管道使用来自由相同 git 分支名称关联的 2 个项目的工件

Pipeline to use artifacts from 2 projects associated by the same git branch name

我工作的公司正在评估 jenkins 2.71,特别是 pipelineblue ocean 插件。我们也已经测试过 GoCD 并且我们需要,就像在 GoCD 中一样,一种管道自动从其他 2 个管道获取工件的方法(获取每个管道的最后成功结果其中),这里是我们的案例。

我们有这些初始管道(构建和 运行 测试),它们反映了 2 个项目:

我创建了一个名为 configure 的管道(约 1 分钟),例如一个名为 customer-name 的参数,它获取后端和前端文件并将它们放在一起,然后应用特定客户特定的配置和自定义并生成可部署的工件。除了 "customer-name",我还可以将此作业并行化,以便同时为每个客户创建所有工件,将它们分开放在不同的目录中。

下一个管道是将它们部署在为每个客户分开的不同测试服务器上。这也可能是相同 configure 管道的一部分,我们仍然需要看看如何在 jenkins 中将它们放在一起...

理想情况下,我需要配置管道在每次前端或后端成功后自动(或按需)触发并作为从这 2 个管道输入最后成功的工件,但不仅仅是最后成功的构建,我们需要 依赖 git 分支名称 .

例如我们有:

后端分支:

前端分支:

在pipeline editor中,找到一个Build Triggers选项,设置如下:其他项目构建完成后构建 > 值得关注的项目:前端、后端> 检查仅在构建稳定时触发 或在我充满故障的测试环境中更好甚至触发如果构建不稳定.

进一步搜索,我发现 Copy Artifact Plugin

但现在有个大问题,如何从这些具有相同 git 分支名称 的管道中获取最后成功的工件?

因为我们不想混在一起"release/2017.2" 和前端 "master" 的后端构建,它必须找到具有相同关系或参数的最后一个成功构建或任何你想调用它的东西,在我们的例子中,关联是 git 分支名称.

有可能实现吗?如果是,如何?

copy artifact 插件似乎可以在自由式项目中使用。它会在管道中工作吗?这也是一个问题...

谢谢

是的,Copy Artifact 插件在 freestyle 和 pipeline 项目中都有效;管道使用我在评论中引用的 copyArtifact 函数。请注意,如果您转到管道语法 link,它有点隐藏:您必须先从下拉列表中选择 select "step: General Build Step",然后它会给您 Copy Artifact 管道命令建设者。

我假设您的 frontendbackend 项目是作为多分支管道构建的,因为这可能最容易维护,因此您不必保留为每个版本创建新项目。您可以通过引用 <project name>/<branch name> 从其他项目中引用这些项目(有时我不得不将 / 替换为 %2f,我认为主要是在自由式项目上)。然后,您可以将 configure 项目设置为参数化构建(管道或自由式),例如使用 PROJECT_BRANCH_NAME 的字符串参数。然后将以下内容放入您的 frontend/backend 项目管道脚本中以触发构建您的 configure 项目

build job: 'configure', parameters: [[$class: 'StringParameterValue', name: 'PROJECT_BRANCH_NAME', value: ${env.BRANCH_NAME}]]

然后您应该能够让您的 configure 项目在复制工件时引用 frontend/%PROJECT_BRANCH_NAME%backend/%PROJECT_BRANCH_NAME%(或管道脚本中的 ${env.PROJECT_BRANCH_NAME})。

此外,您要专门评估 Jenkins 2.7 是否有特殊原因? 2.7 现在已经有一年了,从那时起已经发布了一些新的 LTS 版本。我建议您保持合理的最新状态,除非您知道有特定原因需要 2.7。