5

我在詹金斯有一份专家工作。通常在构建结束时,工件将通过 jenkins 构建后操作部署到工件。但是,如果我进行发布构建,在这种情况下我会从詹金斯那里得到一个错误。那么,是否有可能避免在发布构建结束时部署工件。

让我准确地指出错误。Maven 目标是“全新安装”。我需要通过“正常”工作部署到工件的后期操作。如果我通过 M2 发布插件发布此工件,则发布的工件的部署将由 M2 发布插件本身完成。但是在工作结束时,发布操作尝试使用工件不允许的旧 SNAPSHOT 版本部署工件。

4

5 回答 5

4

Jenkins M2 发布插件(使用 Maven 的 maven-release-plugin)。如果您创建了一个 Maven 作业(而不是 Free Style),那么在作业配置的 M2 Release 部分中,您将看到目标是:

-Dresume=false release:prepare release:perform 

如果您将其替换为以下 M2 发布插件,则默认情况下不会调用由发布发起的部署目标:执行目标。

-Dresume=false release:prepare release:perform -Darguments="-Dmaven.deploy.skip=true"

就我而言,我不希望工件在 release:perform 和 release:prepare 目标完成后立即进入 Artifactory,因此上述内容有所帮助。但是,即使 Jenkins 作业有一个 Post Build 操作作为“部署到 Artifactory”来快照或发布存储库(取决于你有什么样的构建,也就是自动/手动运行构建作业或通过运行 Perform Maven Release),它从未调用后期构建操作。

从某种意义上说,这可能很好,现在我可以在环境中使用生成的发布工件调用部署,如果部署/一些 IT 测试成功,那么我可以将工件上传到 Artifactory。不利的一面是,如果您的部署依赖于从 Artifactory/Nexus 获取新工件(即部署脚本逻辑中的某处),那么在您将工件从一个作业复制到另一个子作业之前,您无法使其正常工作。

除此之外,maven 部署目标需要 settings.xml 或 pom.xml 中的有效 / 设置,其中您为上述每个部分指定的部分(在部分下定义)必须与 setting.xml/ 中定义的部分值匹配pom.xml。

可以定义/设置部分的值以使用非发布存储库,该存储库的顺序(用于工件解析)高于快照存储库,即使用 libs-alpha-local 或 libs-stage-local 然后让 maven deploy 目标部署Artifactory / Nexus的工件。

稍后,在成功部署到更高的环境(如 QA/PRE 等)后,您可以将工件从 alpha/stage 移动到 libs-release-local。

IS_M2RELEASEBUILD M2 Release 插件附带的布尔变量可以在有条件的步骤中使用,在这里或那里或根本不部署。

于 2014-07-31T09:57:25.450 回答
2

在“Maven 发布构建”的配置中,您可以在高级模式下设置“发布环境变量”(默认为 IS_M2RELEASEBUILD)。稍后在 bild-action 的“发布工件”中,您可以检查是否设置了此环境变量,然后跳过部署。

于 2013-09-11T15:16:29.060 回答
0

你应该看看 Artifactory Jenkins 插件。1. 部署错误。2. 内置发布功能。3. 它将为您提供独特的 buildInfo 功能,以便通过 Artifactory 中的工件更严格地保存构建信息,https: //wiki.jenkins-ci.org/display/JENKINS/Artifactory+Plugin

于 2013-08-09T16:52:04.787 回答
0

我想你可能想为你的发布版本创建一个单独的詹金斯工作。并在构建后操作下运行不同的 maven 命令集,只是为了打包工件而不是将其安装到工件中。话虽如此,如果其他应用程序依赖于您不想发布的工件。这可能会导致版本控制问题。

于 2013-08-09T16:38:24.460 回答
-1

如果我可以假设您使用的是M2 Release Plugin,那么还有另一个问题。在发布后跳过部署将是不必要的解决方法,因为我已经看到了这项工作。您应该尝试从根本原因解决此问题。如果您可以提供有关该错误的更多信息,将会有所帮助。

于 2013-08-09T16:53:26.887 回答