首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >travis-ci未能部署到sonatype

travis-ci未能部署到sonatype
EN

Stack Overflow用户
提问于 2018-03-30 08:06:58
回答 1查看 308关注 0票数 0

我已经开始使用travis-ci来自动化我的构建。我有几个开源项目,它们都从maven central部署到nexus sonatype。它们都是使用Maven构建和github作为回购工具的Java项目。我已经手动做了很多年了,我有适当的密钥和登录,我的pom兼容等等。实现第一个很容易,它是一个单模块工程,它构建和部署都很好。然后,我做了第二个,一个多模块的项目,并使它的工作方式大致相同。然而,我的第三个人却让我感到困惑。这个maven构建有点棘手,但是它在本地运行得很好,我甚至让它成功地运行了travis上的实际构建。但部署无效。问题是,当它试图连接到nexus sonatype时,我得到了一个授权错误:

代码语言:javascript
复制
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_USERNAME和SONATYPE_PASSWORD,我删除了这两种标记,并重新输入它们,以防出现错误)。我还添加了对本地maven设置文件中的引用:

代码语言:javascript
复制
...
<server>
    <id>ossrh</id>
    <username>${env.SONATYPE_USERNAME}</username>
    <password>${env.SONATYPE_PASSWORD}</password>
</server>
...

本地maven设置文件是我的项目中的一个文件,.travis.yml maven命令引用它。travis.yml文件中有一个与其他两个(工作)项目相同的部署部分,但我一直在添加额外的比特来尝试并使其工作。但这些差异似乎都与此无关。工作部署如下所示:

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

因此,只有当回购已经被标记并且使用标签作为版本号时,这才会开始。在其他的项目中,这是很好的工作,但在我努力工作的项目中就不行了。标记确实按其应有的方式触发部署,但部署失败。有人知道为什么我在一个项目上得到部署而不是另一个项目吗?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-31 03:38:09

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

代码语言:javascript
复制
    <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。deploy是在没有这种情况下尝试的,但是由于它没有对serverId:ossrh的引用,所以它不会从maven设置文件中获取凭据,因此我会得到一个授权错误。发布概要文件需要位于父项目和所有模块项目上。我已经把它添加到模块中了,但是忘记了父模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49570760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档