travis-ci未能部署到sonatype

时间:2018-03-30 08:06:58

标签: travis-ci nexus sonatype

我开始使用travis-ci来自动化我的构建。我有几个开源项目,他们都从nexus sonatype部署到maven central。他们是所有使用Maven构建的Java项目和github作为回购。 我已经手动多年这么做了,我有适当的密钥和登录,我的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.

看起来我没有正确设置我的声纳类型凭据。但我的设置方式与我对其他两个项目的设置方式相同。具体来说,我进入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

所以只有在回购标记被标记并且它使用标记作为版本号时才会启动。在其他项目中,这可以正常工作,但不是在我努力工作的那个项目中。标签确实会触发部署,但部署失败。 有谁知道我为什么要在一个项目上部署而不是另一个项目?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。问题是失败项目的父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设置文件中获取凭据,因此我收到授权错误。 发布配置文件需要位于父项目和所有模块项目上。我已将它添加到模块中但忘记了父级。