Jenkins:触发上游变更的多分支管道

Nit*_*ram 25 jenkins jenkins-workflow jenkinsfile jenkins-2

我目前正在测试Jenkins 2.0的管道方法,看看它是否适用于我正在使用的构建环境.

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

目前,每个存储库/分支都设置为不同配置的Matrix项目.每个项目都将它的构建结果公开为工件,并且这些工件在下游项目中使用.

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

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

主要问题是使构建相互触发,因为基本上是特定上游分支的构建需要触发下游分支.上游项目不知道下游分支需要触发的信息.每个下游项目从一些上游分支获取工件,理想的解决方案是,如果作为工件源的上游构建完成它的构建,将触发下游构建.

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

目前这是使用ReverseBuildTrigger.但是,一旦它接近管道,这件事就会停止工作.

我真的不知道如何让这个工作.有没有办法得到类似ReverseBuildTrigger工作内部管道脚本?

如果单个分支上游发生更改,也会触发所有分支的整个下游构建,这不是一个选项.这会产生太多相等的构建.

Jap*_*r24 37

如果您正在使用声明性多分支管道,则可以使用:

triggers {
  upstream(upstreamProjects: "some_project/some_branch", threshold: hudson.model.Result.SUCCESS)
}
Run Code Online (Sandbox Code Playgroud)

如果您希望跨依赖项进行分支匹配,可以使用:

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

  • 多个upstreamProjects的语法看起来像这样(upstreamProjects:“some_project/some_branch,other_project/other_branch”,...)只是组合在一个字符串中的项目,根据https://jenkins.io/doc/在字符串中用逗号分隔书/管道/语法/#triggers (3认同)

小智 12

我目前正在尝试将其用于我们的部署.我最接近的是将下面的内容添加到下游Jenkins文件中;

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

这至少让Jenkins承认它应该在'some_project'构建时触发,即它出现在"View Configuration"页面中.

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

也就是说,也许你会有更多的运气.请让我知道这对你有没有用.

(其他人已经问过Jenkins多分支管道和指定上游项目的类似问题)