【问题标题】:travis-ci failing to deploy to sonatypetravis-ci 无法部署到 sonatype
【发布时间】:2018-03-31 11:38:09
【问题描述】:

我已经开始使用 travis-ci 来自动化我的构建。我有几个开源项目,它们都部署到 nexus sonatype 从那里到 maven Central。它们都是使用 Maven 构建并使用 github 作为 repo 的 Java 项目。 多年来我一直在手动执行此操作,并且我有适当的密钥和登录名,并且我的 pom 是兼容的等。 实现第一个很容易,它是single module project,它可以很好地构建和部署。然后我做了第二个,a multi module project,并以几乎相同的方式工作。然而,我的第三个让我感到困惑。 在这个东西上构建的 maven 有点棘手,但它在本地运行良好,我什至让它在 travis 上成功运行实际构建。但是部署不起作用。 问题是当它尝试连接到 nexus sonatype 时出现授权错误:

Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project madura-bundles: 
Failed to deploy artifacts: Could not transfer artifact nz.co.senanque:madura-bundles:pom:4.5.6 from/to sonatype-nexus-staging (https://oss.sonatype.org/service/local/staging/deploy/maven2/): 
Failed to transfer file: https://oss.sonatype.org/service/local/staging/deploy/maven2/nz/co/senanque/madura-bundles/4.5.6/madura-bundles-4.5.6.pom.
Return code is: 401, ReasonPhrase: Unauthorized.

我似乎没有正确设置我的 sonatype 凭据。但我的设置方式与其他两个项目的设置方式相同。具体来说,我进入 Nexus Sonatype 并获取我的访问用户令牌并将它们添加到我的环境中(SONATYPE_USERNAME 和 SONATYPE_PASSWORD,我删除了这两个并重新输入它们以防错字)。我还在我的本地 Maven 设置文件中添加了对那些的引用:

...
<server>
    <id>ossrh</id>
    <username>${env.SONATYPE_USERNAME}</username>
    <password>${env.SONATYPE_PASSWORD}</password>
</server>
...

本地 maven 设置文件是我项目中的一个文件, .travis.yml maven 命令引用它。 travis.yml 文件具有与其他两个(工作)项目相同的部署部分,除了我一直在添加额外的位以尝试使其工作。但是那里的差异看起来都不相关。工作部署如下所示:

deploy:
 provider: script
  script: "mvn versions:set -DnewVersion=${TRAVIS_TAG} && mvn clean deploy -B -U -P release --settings travis/settings.xml"
  on:
    tags: true

所以只有在 repo 被标记并且它使用标记作为版本号时才会启动。在其他项目中,这工作正常,但在我试图开始工作的项目中却不行。该标签确实触发了部署,但部署失败。 有谁知道为什么我在一个项目上部署而不是另一个项目?感谢您的帮助。

【问题讨论】:

    标签: travis-ci nexus sonatype


    【解决方案1】:

    好的,我想通了。问题是失败项目的父 pom 没有发布配置文件,工作项目的父 pom 确实有一个。两种情况下的发布配置文件如下所示:

        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>1.5</version>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.sonatype.plugins</groupId>
                        <artifactId>nexus-staging-maven-plugin</artifactId>
                        <version>1.6.3</version>
                        <extensions>true</extensions>
                        <configuration>
                            <serverId>ossrh</serverId>
                            <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                            <autoReleaseAfterClose>true</autoReleaseAfterClose>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    

    需要使用 gpg 插件对生成的工件(jar 文件、javadoc 文件等)进行签名并将它们部署到 nexus。在没有这个的情况下尝试部署到 nexus,但因为它没有对 serverId:ossrh 的引用,它没有从 maven 设置文件中获取凭据,因此我收到授权错误。 发布配置文件需要在父项目和所有模块项目上。我已将其添加到模块中,但忘记了父级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多