【发布时间】:2015-03-29 12:07:51
【问题描述】:
我正在尝试使用通常的 Maven Release Plugin 从 Travis 发布版本。为了为我的 GPG 密钥(和一些其他参数)提供密码短语,我有一个带有我的 settings.xml 的 travis 分支,我将其作为构建的一部分检出。然后我运行 Maven 并为其提供自定义设置 (--settings) 并确保在发布期间也使用 -Darguments 进行传播:
mvn release:prepare --settings ${MVN_SETTINGS} -B -V \
-PwithMutationTests,gpg,rpm,deb \
-Darguments="--settings ${MVN_SETTINGS}"
mvn release:perform --settings ${MVN_SETTINGS} -B -V \
-PwithMutationTests,gpg,rpm,deb \
-Darguments="--settings ${MVN_SETTINGS}"
日志表明我的设置被传递:
[INFO] Executing: /bin/sh -c cd /home/travis/build/jmxtrans/jmxtrans \
&& /usr/local/maven/bin/mvn \
-s /tmp/release-settings1372267334822299631.xml \
clean verify --no-plugin-updates --batch-mode \
--settings /home/travis/build/jmxtrans/jmxtrans/target/travis/settings.xml \
-Psonatype-oss-release -P withMutationTests,gpg,rpm,deb
Maven 发布插件似乎还添加了-s /tmp/release-settings1372267334822299631.xml,它可能优先于我的 settings.xml(我找不到这方面的文档)。
最后,我的构建失败了,因为它找不到我的 GPG 密钥:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.1:sign (sign-artifacts) on project jmxtrans: Cannot obtain passphrase in batch mode -> [Help 1]
我相当肯定 settings.xml 没有问题并且包含所有必要的信息:我对 SNAPSHOT 构建使用相同的 settings.xml,并且它们是正确的 GPG 签名的。
如何确保在发布期间使用我的设置?
编辑:
我的settings.xml的相关部分:
<profile>
<id>gpg</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.homedir>./target/travis/</gpg.homedir>
</properties>
</profile>
问题可能实际上来自gpg.homedir 属性是相对路径而不是绝对路径。仍在检查,如果是这种情况,将添加答案。
其他资源:
- .travis.yml
- travis-script.sh:由 .travis.yml 用于编排构建
- settings.xml
- full log of failed build(抱歉,伐木繁盛)
【问题讨论】:
-
天哪,请修复您的日志记录(好问题很难)
-
是的,修复日志记录是下一个优先事项(抱歉)
-
从您的 shell 脚本中,您可以 grep tmp 文件名,然后合并您的 settings.xml 并运行 mvn release:prepare -Dresume(非常痛苦)
-
我宁愿不要做这种极端的事情......感觉就像我做错了什么,应该有一种方法可以在 Maven 版本中使用自定义 settings.xml插件...
-
afaik 作为替代方案,您可以设置不同的 m2_home,这就是要复制设置的位置(至少,在 jenkins 中);你可以在运行之前把你的自定义设置放在那里,但我认为这不那么痛苦
标签: maven settings release travis-ci