2016-04-24 47 views
13

我目前正在测试Jenkins 2.0的管道方法,以查看它是否适用于我正在使用的构建环境。Jenkins:上游变化触发多分支管道

首先关于环境本身。它目前由多个SCM存储库组成。每个存储库都包含多个分支,用于开发的不同阶段,每个分支构建多个配置。并非所有配置都适用于每个存储库。

对于不同的配置,当前每个存储库/分支都设置为Matrix Project。每个项目都将其构建结果作为工件进行公开,这些工件将用于下游项目中。

不同的存储库相互依赖,因此成功构建上游作业会触发某些特定的下游作业。目前所有的工作,但建立一个新的分支或调整建设过程所需的工作量很多,因为许多不同的项目需要手动更改。

现在我想尝试新的管道。我的想法是创建多分支管道项目,并在存储库中放置一个Jenkinsfile,其中包含构建的说明。

主要问题是让构建触发对方,因为基本上构建在特定的上游分支中,需要触发下游分支。上游项目不知道下游分支需要触发的信息。每个下游项目都会从某些上游分支中获取工件,理想的解决方案是,如果下游构建将在作为工件源的上游构建完成构建时触发。

问题是只有下游项目真的知道他们需要什么工件。在大多数情况下,分支名称不太可能匹配,这使得从上游项目触发构建非常困难。

目前这是使用ReverseBuildTrigger解决。但是,只要它靠近管道,这件事就会停止工作。

我真的很茫然如何得到这个工作。有没有办法让ReverseBuildTrigger在管道脚本里面工作?

在单个分支上游更改的情况下,也触发整个下游构建的所有分支不是一个选项。这会造成太多的平等构建。

+0

您使用哪种SCM类型? – luka5z

+2

@ luka5z不应该是相关的。但它是SVN。 – Nitram

回答

7

我目前正试图让这个为我们的部署工作。 我得到的最接近的是将下列内容添加到下游的Jenkins文件中;

properties([ 
    pipelineTriggers([ 
     triggers: [ 
      [ 
       $class: 'jenkins.triggers.ReverseBuildTrigger', 
       upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS 
      ] 
     ] 
    ]), 
]) 

至少得到詹金斯承认,它应该被触发时 “some_project”得到的建成即出现在“查看配置”页面。

但是到目前为止,'some_project'的构建仍然没有按预期触发下游 项目。

这就是说,也许你会有更多的运气。 让我知道它是否适合你。

(另有人问过类似的问题Jenkins multi-branch pipeline and specifying upstream projects

+0

绝对正确。新版本的作业插件,从“Pipeline:Job”插件的2.4版本开始,现在支持这个用例。我已经在使用它。 – Nitram

+0

非常适合我,非常感谢你发布这个!在附注中,我必须在“Manage Jenkins”的“进程内脚本审批”菜单中启用SUCCESS staticField,但在完成之后,它的工作完美无瑕。谢谢! – jvperrin

2

Pipeline Job配置仍然原生支持构建触发,包括反向编译触发,其他项目后构建内置。您甚至可以从Pipeline Multi-branch项目指定分支。

不幸的是反向触发不可用管道多分支工作。最接近你可以得到反向触发是通过使用Promoted Builds Plugin。但它仍然不能让你配置每个分支的设置。

此外片段发生器阐明:

以下变量目前是管道脚本内不可用:

NODE_LABELS WORKSPACE SCM特定 变量如SVN_REVISION

PS 。也许唯一的办法是从上游下游

+1

这是正确的。我多年来一直在寻找**多分支流水线作业**的解决方案,并且在最佳情况下可以使用流水线脚本进行配置。 – Nitram

14

如果您使用的是declarative multi-branch pipeline,你可以使用:

triggers { 
    upstream(upstreamProjects: "some_project/some_branch", threshold: hudson.model.Result.SUCCESS) 
} 

如果您希望分支匹配跨您可以使用依赖性发生:

triggers { 
    upstream(upstreamProjects: "some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F"), threshold: hudson.model.Result.SUCCESS) 
} 
+4

+100 - 为什么在官方文档中不可用(“目前只有两个可用的触发器是cron和pollSCM。”)。 –

相关问题