首页 文章

通过Jenkins工作部署maven的策略

提问于
浏览
5

我有一个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 回答

  • 0

    这也是我们小组的问题 .

    我们希望maven尝试进行PASSIVE部署,因此如果部署存在于nexus,则可以接受继续进行已成功部署,如果部署在nexus中不存在,则将使用SUCCESS上载和部署 .

    我们希望jenkins在构建并通过覆盖检查后进行部署,但是如何进行部署以便只部署未部署的部署,并忽略已部署的部分 .

    我们的解决方案是自定义脚本 .

  • 0

    您应该确保master上的每个提交在pom文件上都有自己的版本号 . 所以你不会重新部署 .

    拒绝“重新部署”是有充分理由的:发布版本的内容永远不会改变 .

    如果您无法避免在master上提交相同版本号,请考虑将链接的jenkins作业更改为“clean install”(仅将工件存储在本地存储库中)并使用“clean deploy”创建一个仅启动的新作业手动 .

  • 1

    您可以使用候选版本概念 . 当您开始发布时,将-RC1添加到版本(例如1.1.0-RC1) .

    在下次重新部署时,您将增加RC编号 . 当发布完成并且您想要生成新TAG时,您只删除该版本的RC . 在TAG创建之前

  • 0

    我们采用“双重行动”解决方案:

    • 增量版

    • 运行 mvn install

    • 运行测试

    • 如果全部通过,我们运行 mvn deploy

    这样,在我们知道所有传递之前,我们不会尝试部署,并且每次都会部署一个唯一的版本 .

    我希望这有帮助 .

  • 4

    我们所做的是自动快照构建 . 然后,版本自动递增 .

    对于发布版本,我们使用maven发布插件并手动输入版本 . 但是,您可以让发布插件完成工作 . 它将删除“-SNAPSHOT”构建,部署,然后,为下一个版本增加最后一个数字并再次附加“-SNAPSHOT” .

    对于分发管理,您可以使用两个repos,一个用于快照,一个用于发布,具有不同的重新部署设置 .

相关问题