我有一个Jenkins工作,它使用maven构建目标'clean package deploy'作为主git分支 . 但是,由于nexus repo不允许重新部署,如果Jenkins作业第二次运行而没有更改版本,它将失败并出现预期的400 Bad Request错误:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal
org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy)
on project common-library:
Failed to deploy artifacts: Could not transfer artifact
net.bacon.common:common-library:pom:1.2.13 from/to bacon-releases
(https://maven.bacon.com/nexus/content/repositories/releases):
Failed to transfer file:
https://maven.bacon.com/nexus/content/repositories/releases/net/bacon/common/common-library/1.2.13/common-library-1.2.13.pom.
Return code is: 400, ReasonPhrase:Bad Request.
任何人都可以建议一个不同的策略,即部署目标可以在不使Jenkins工作失败的情况下运行吗?
5 回答
这也是我们小组的问题 .
我们希望maven尝试进行PASSIVE部署,因此如果部署存在于nexus,则可以接受继续进行已成功部署,如果部署在nexus中不存在,则将使用SUCCESS上载和部署 .
我们希望jenkins在构建并通过覆盖检查后进行部署,但是如何进行部署以便只部署未部署的部署,并忽略已部署的部分 .
我们的解决方案是自定义脚本 .
您应该确保master上的每个提交在pom文件上都有自己的版本号 . 所以你不会重新部署 .
拒绝“重新部署”是有充分理由的:发布版本的内容永远不会改变 .
如果您无法避免在master上提交相同版本号,请考虑将链接的jenkins作业更改为“clean install”(仅将工件存储在本地存储库中)并使用“clean deploy”创建一个仅启动的新作业手动 .
您可以使用候选版本概念 . 当您开始发布时,将-RC1添加到版本(例如1.1.0-RC1) .
在下次重新部署时,您将增加RC编号 . 当发布完成并且您想要生成新TAG时,您只删除该版本的RC . 在TAG创建之前
我们采用“双重行动”解决方案:
增量版
运行 mvn install
运行测试
如果全部通过,我们运行 mvn deploy
这样,在我们知道所有传递之前,我们不会尝试部署,并且每次都会部署一个唯一的版本 .
我希望这有帮助 .
我们所做的是自动快照构建 . 然后,版本自动递增 .
对于发布版本,我们使用maven发布插件并手动输入版本 . 但是,您可以让发布插件完成工作 . 它将删除“-SNAPSHOT”构建,部署,然后,为下一个版本增加最后一个数字并再次附加“-SNAPSHOT” .
对于分发管理,您可以使用两个repos,一个用于快照,一个用于发布,具有不同的重新部署设置 .