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

问题描述 投票:0回答:3

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

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

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

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

现在我想尝试一下新的管道。我的想法是创建多分支管道项目,并将

Jenkinsfile
放置在包含构建说明的存储库中。

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

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

目前使用

ReverseBuildTrigger
解决了这个问题。但是这个东西一旦靠近管道就会停止工作。

我真的不知道如何让它发挥作用。有没有办法让

ReverseBuildTrigger
之类的东西在管道脚本中工作?

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

jenkins jenkins-workflow jenkins-2 jenkins-pipeline
3个回答
56
投票

如果您使用声明式多分支管道,您可以使用:

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)
}

注意:如果您在 github 中使用“组织”,则必须在项目名称之前添加您的组织名称作为前缀,如下所示:

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

15
投票

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

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

这至少让詹金斯承认它应该在以下情况下触发: 'some_project' 已构建,即它出现在“查看配置”页面中。

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

话虽这么说,也许你会更幸运。 让我知道它是否适合您。

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


3
投票

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

不幸的是,反向触发不可用管道多分支作业。最接近反向触发的是使用Promoted Builds Plugin。但它仍然不允许您配置每个分支设置。

另外片段生成器澄清:

以下变量当前在管道脚本中不可用:

节点标签 工作空间 SCM 特定的变量,例如 SVN_REVISION

ps。也许唯一的方法就是从上游提示到下游

© www.soinside.com 2019 - 2024. All rights reserved.