一尘不染

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

jenkins

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

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

当前,每个存储库/分支都被设置为适用于不同配置的矩阵项目。每个项目将其构建结果作为工件公开,并且这些工件在下游项目中使用。

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

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

主要问题是使内部版本相互触发,因为基本上在特定上游分支中的内部版本需要触发下游分支。上游项目并不知道需要触发哪些下游分支的信息。每个下游项目都从一些上游分支获取工件,而理想的解决方案是,如果作为工件的来源的上游构建完成了构建,则将触发下游构建。

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

目前,这是使用解决的ReverseBuildTrigger。但是,只要它到达管道附近,它就会停止工作。

我真的很茫然如何使它工作。有什么办法可以像ReverseBuildTrigger在管道脚本中工作一样吗?

如果更改单个上游分支,也不触发所有分支的整个下游构建。这将创建太多相等的构建。


阅读 351

收藏
2020-07-25

共1个答案

一尘不染

我目前正在尝试使其适用于我们的部署。我最接近的是将以下内容添加到下游Jenkinsfile中;

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

至少让Jenkins承认构建“ some_project”时应该触发它,即它出现在“ View Configuration”页面中。

但是,到目前为止,“ some_project”的构建仍未按预期触发下游项目。

话虽这么说,也许您会有更多的运气。请让我知道这对你有没有用。

2020-07-25