我目前正在测试Jenkins 2.0的管道方法,看看它是否适用于我正在使用的构建环境。
首先是关于环境本身。它目前由多个SCM存储库组成。每个存储库包含多个分支,用于开发的不同阶段,每个分支都使用多个配置构建。并非所有配置都适用于每个存储库。
目前,每个存储库/分支都设置为Matrix Project,用于不同的配置。每个项目都将它的构建结果公开为工件,这些工件在下游项目中使用。
不同的存储库相互依赖,因此在上游作业上成功构建会触发某些特定的下游作业。目前所有这些都有效,但设置新分支或调整构建过程所需的工作量很多,因为需要手动更改许多不同的项目。
现在我想尝试新的管道。我的想法是创建多分支管道项目,并在存储库中放置一个Jenkinsfile
,其中包含构建的说明。
主要问题是使构建相互触发,因为基本上是特定上游分支的构建需要触发下游分支。上游项目不知道下游分支需要触发的信息。每个下游项目从一些上游分支获取工件,理想的解决方案是,如果作为工件源的上游构建完成它的构建,将触发下游构建。
问题是只有下游项目真正知道他们需要什么工件。在大多数情况下,分支名称不太可能匹配,这使得从上游项目触发构建变得非常困难。
目前,这是使用ReverseBuildTrigger
解决的。但是,一旦它接近管道,这件事就会停止工作。
我真的不知道如何让这个工作。有没有办法让管道脚本中的ReverseBuildTrigger
工作?
如果更改单个分支上游,则还可以触发所有分支的整个下游构建。这会产生太多相等的构建。
答案 0 :(得分:31)
如果您使用的是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)
}
答案 1 :(得分:10)
我目前正在尝试将此功能用于我们的部署。 我最接近的是将下面的内容添加到下游Jenkins文件中;
properties([
pipelineTriggers([
triggers: [
[
$class: 'jenkins.triggers.ReverseBuildTrigger',
upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS
]
]
]),
])
至少让Jenkins承认它应该在什么时候触发 'some_project'得到了构建,即它出现在“查看配置”页面中。
然而到目前为止,'some_project'的构建仍然不会触发下游 按预期进行项目。
话虽如此,也许你会有更多的运气。 让我知道它是否适合你。
(其他人也问过类似问题Jenkins multi-branch pipeline and specifying upstream projects)
答案 2 :(得分:2)
Pipeline Job配置仍原生支持构建触发器,包括反向构建触发器,构建其他项目后构建。您甚至可以从管道多分支项目中指定分支。
不幸的是,反向触发不可用 Pipeline Multi-branch 作业。最接近反向触发的方法是使用Promoted Builds Plugin。但它仍然不允许您配置每个分支设置。
此外 Snippet Generator 澄清:
以下变量目前在Pipeline脚本中不可用:
NODE_LABELS 工作区 特定于SCM的变量,例如SVN_REVISION
PS。也许唯一的方法是从上游提示下游。