Jenkins:触发上游变化的多分支管道
Jenkins: Trigger Multi-branch pipeline on upstream change
我目前正在测试 Jenkins 2.0 的管道方法,看看它是否适用于我正在使用的构建环境。
首先是关于环境本身。它目前由多个 SCM 存储库组成。每个存储库包含多个分支,用于开发的不同阶段,每个分支都是使用多种配置构建的。并非所有配置都适用于每个存储库。
目前每个 repository/branch 都设置为 Matrix Project 用于不同的配置。每个项目都将其构建结果公开为工件,这些工件用于下游项目。
不同的存储库相互依赖,因此上游作业的成功构建会触发一些特定的下游作业。目前一切正常,但设置新分支或调整构建过程所需的工作量很大,因为许多不同的项目需要手动更改。
现在我想尝试一下新管道。我的想法是创建多分支管道项目并在包含构建说明的存储库中放置一个 Jenkinsfile
。
主要问题是让构建相互触发,因为基本上特定上游分支中的构建需要触发下游分支。上游项目不知道需要触发下游分支的信息。每个下游项目从一些上游分支获取工件,理想的解决方案是,如果作为工件源的上游构建完成构建,下游构建将被触发。
问题是只有下游项目才真正知道他们需要什么工件。在大多数情况下,分支名称不太可能匹配,这使得从上游项目触发构建非常困难。
目前使用 ReverseBuildTrigger
解决了这个问题。但是这个东西一靠近管道就停止工作了。
我真的不知道如何让它工作。有什么方法可以让 ReverseBuildTrigger
之类的东西在管道脚本中工作?
如果单个分支上游发生更改,也不会触发所有分支的整个下游构建。这会创建太多相同的构建。
Pipeline Job配置仍然原生支持构建触发器,包括反向构建触发器,构建其他项目后构建。您甚至可以从 Pipeline Multi-branch 项目中指定一个分支。
遗憾的是,反向触发不可用管道多分支 作业。最接近反向触发的方法是使用 Promoted Builds Plugin。但它仍然不允许您配置每个分支设置。
此外 代码段生成器 澄清:
The following variables are currently unavailable inside a Pipeline script:
NODE_LABELS
WORKSPACE
SCM-specific variables such as SVN_REVISION
ps。也许唯一的方法是提示从 upstream 到 downstream.
我目前正试图让它为我们的部署工作。
我得到的最接近的是将以下内容添加到下游 Jenkinsfile;
properties([
pipelineTriggers([
triggers: [
[
$class: 'jenkins.triggers.ReverseBuildTrigger',
upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS
]
]
]),
])
至少让詹金斯承认它应该在什么时候触发
'some_project' 已构建,即它出现在 "View Configuration" 页面中。
但是到目前为止 'some_project' 的构建仍然没有触发下游
项目符合预期。
话虽这么说,也许你会有更多的运气。
让我知道它是否适合你。
(有人问过类似问题)
如果您使用的是 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)
}
我目前正在测试 Jenkins 2.0 的管道方法,看看它是否适用于我正在使用的构建环境。
首先是关于环境本身。它目前由多个 SCM 存储库组成。每个存储库包含多个分支,用于开发的不同阶段,每个分支都是使用多种配置构建的。并非所有配置都适用于每个存储库。
目前每个 repository/branch 都设置为 Matrix Project 用于不同的配置。每个项目都将其构建结果公开为工件,这些工件用于下游项目。
不同的存储库相互依赖,因此上游作业的成功构建会触发一些特定的下游作业。目前一切正常,但设置新分支或调整构建过程所需的工作量很大,因为许多不同的项目需要手动更改。
现在我想尝试一下新管道。我的想法是创建多分支管道项目并在包含构建说明的存储库中放置一个 Jenkinsfile
。
主要问题是让构建相互触发,因为基本上特定上游分支中的构建需要触发下游分支。上游项目不知道需要触发下游分支的信息。每个下游项目从一些上游分支获取工件,理想的解决方案是,如果作为工件源的上游构建完成构建,下游构建将被触发。
问题是只有下游项目才真正知道他们需要什么工件。在大多数情况下,分支名称不太可能匹配,这使得从上游项目触发构建非常困难。
目前使用 ReverseBuildTrigger
解决了这个问题。但是这个东西一靠近管道就停止工作了。
我真的不知道如何让它工作。有什么方法可以让 ReverseBuildTrigger
之类的东西在管道脚本中工作?
如果单个分支上游发生更改,也不会触发所有分支的整个下游构建。这会创建太多相同的构建。
Pipeline Job配置仍然原生支持构建触发器,包括反向构建触发器,构建其他项目后构建。您甚至可以从 Pipeline Multi-branch 项目中指定一个分支。
遗憾的是,反向触发不可用管道多分支 作业。最接近反向触发的方法是使用 Promoted Builds Plugin。但它仍然不允许您配置每个分支设置。
此外 代码段生成器 澄清:
The following variables are currently unavailable inside a Pipeline script:
NODE_LABELS WORKSPACE SCM-specific variables such as SVN_REVISION
ps。也许唯一的方法是提示从 upstream 到 downstream.
我目前正试图让它为我们的部署工作。 我得到的最接近的是将以下内容添加到下游 Jenkinsfile;
properties([
pipelineTriggers([
triggers: [
[
$class: 'jenkins.triggers.ReverseBuildTrigger',
upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS
]
]
]),
])
至少让詹金斯承认它应该在什么时候触发 'some_project' 已构建,即它出现在 "View Configuration" 页面中。
但是到目前为止 'some_project' 的构建仍然没有触发下游 项目符合预期。
话虽这么说,也许你会有更多的运气。 让我知道它是否适合你。
(有人问过类似问题
如果您使用的是 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)
}