5

我有一个 Jenkins 工作,它使用 maven 构建目标“干净的包部署”作为主 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 工作失败的情况下运行部署目标吗?

4

5 回答 5

4

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

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

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

于 2013-04-22T13:51:18.083 回答
1

We apply a "double action" solution:

  • Increment version
  • Run mvn install
  • Run tests
  • If all passed, we run mvn deploy

This way, we do not try to deploy before we know all passed and we have a unique version deployed every time.

I hope this helps.

于 2013-07-09T06:24:40.120 回答
0

这也是我们组的一个问题。

我们希望 maven 尝试被动部署,因此如果部署存在于 nexus 中,那么它将继续使用 SUCCESS ALREADY DEPLOYED,如果部署在 nexus 中不存在,它将上传并部署 SUCCESS。

我们希望 jenkins 在构建并通过覆盖检查后进行部署,但是如何使其只有未部署的才会被部署,而已经部署的会被忽略。

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

于 2013-07-08T23:23:07.313 回答
0

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

拒绝“重新部署”有一个很好的理由:发布版本的内容永远不应该改变。

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

于 2013-04-22T14:05:05.583 回答
0

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

随着下一次重新部署,您将增加 RC 编号。发布完成后,如果要生成新的 TAG,只需删除该版本的 RC。TAG创建之前

于 2017-10-04T08:26:19.477 回答