我工作的公司正在评估 Jenkins 2.71,特别是管道和蓝海插件。我们已经测试了 GoCD,我们需要一种管道自动从其他2 个管道中获取工件的方法(取每个管道的最后一个成功结果(,这是我们的情况。
我们有这些初始管道(构建和运行测试(,它们反映了2个项目:
- 前端,~ 15 分钟
- 后端,~10 分钟
我创建了一个名为configure(~1 分钟(的管道,例如,使用一个名为customer-name的参数,该参数获取后端和前端文件并将它们放在一起,然后应用特定的客户特定配置和自定义,并生成可部署的工件。除了"客户名称"之外,我还可以并行化此作业,以一次为每个客户创建所有工件,并分隔在不同的目录中。
下一个管道是将它们部署在每个客户分开的不同测试服务器上。这也可能是同一配置管道的一部分,我们仍然需要看看如何在 jenkins 中将东西放在一起......
理想情况下,我需要将管道配置为在每个前端或后端成功后自动(或按需(触发,并将这 2 个管道中的最后一个成功工件作为输入,但不仅仅是拥有最后一个成功的构建,我们需要作为依赖项 git 分支名称。
例如,我们有:
后端分支:
- 主人
- 版本/2017.2
前端胸罩:
- 主人
- 版本/2017.2
在管道编辑器中,我找到了一个"生成触发器"选项,并按如下方式设置:在构建其他项目后生成> 要监视的项目:前端、后端>选中 仅在构建稳定或更好时触发 在我的充满失败的测试环境中即使构建不稳定也会触发。
进一步搜索,我找到了复制工件插件
但现在最大的问题是,如何使用相同的 git 分支名称从这些管道中获取最后一个成功的工件?
因为我们不想将"release/2017.2"的后端构建与前端"master"混合在一起,所以它必须找到具有相同关系或参数或任何您想要称呼它的最后一个成功构建,在我们的例子中,关联是 git 分支名称。
有可能做到这一点吗?如果是,如何?
复制工件插件似乎可以在自由式项目中工作。它会在管道中工作吗?这也是一个问题...
谢谢
是的,复制工件插件确实适用于自由式和管道项目; 管道使用我在评论中引用的copyArtifact
函数。 请注意,如果转到"管道语法"链接,它是隐藏的:必须先从下拉列表中选择""step: General Build Step"
",然后它将为您提供"复制工件"管道命令生成器。
我将假设您的frontend
和backend
项目是作为多分支管道构建的,因为这可能最容易维护,这样您就不必为每个版本不断创建新项目。 您可以通过引用<project name>/<branch name>
从其他项目中引用这些项目(有时我不得不用%2f
替换/
,我认为主要是在自由式项目上(。 然后,您可以将configure
项目设置为参数化构建(管道或自由样式(,例如使用字符串参数PROJECT_BRANCH_NAME
。 然后在前端/后端项目管道脚本中放入以下内容,以触发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的特定原因。