管道使用来自同一git分支名称

时间:2017-07-24 13:51:49

标签: jenkins jenkins-pipeline jenkins-2 jenkins-blueocean

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

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

  • 前端,~15分钟
  • 后端,~10分钟

我创建了一个名为 configure (约1分钟)的管道,例如一个名为 customer-name 的参数,它接收后端和前端文件并将它们放在一起,然后应用特定的客户特定配置和自定义并生成可部署的工件。而不是“客户名称”,我也可以并行化这项工作,一次为每个客户创建所有工件,在不同的目录中分开。

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

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

E.g。我们有:

后端分支:

  • 释放/ 2017.2

前端分支:

  • 释放/ 2017.2

在管道编辑器中,我找到了构建触发器选项并将其设置如下:构建其他项目后构建> 要观看的项目:前端,后端>在我的测试环境中,只有在构建稳定或更好的情况下检查触发器触发即使构建不稳定触发器

进一步搜索,我找到了Copy Artifact Plugin

但现在最重要的问题是,如何使用相同的git分支名称从这些管道中获取最后成功的工件

因为我们不想混合,例如与前端“master”的后续版本“release / 2017.2”,它必须找到具有相同关系或参数的最后一个成功构建或者你想要的任何东西,在我们的例子中,该关联是git分支名称。

有可能实现这一目标吗?如果是,怎么样?

复制工件插件似乎适用于自由式项目。它会在管道中工作吗?这也是一个问题...

由于

1 个答案:

答案 0 :(得分:0)

是的,Copy Artifact插件在自由式和管道项目中都有效;管道使用我在评论中引用的copyArtifact函数。请注意,如果您转到Pipeline Syntax链接,它就是隐藏的类型:您必须先从下拉列表中选择"step: General Build Step",然后它将为您提供Copy Artifact管道命令构建器。

我将假设您的frontendbackend项目被构建为多分支管道,因为这可能是最容易维护的,因此您不必拥有继续为每个版本创建新项目。您可以通过引用<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。