Jenkins多分支流水线和指定上游项目

9
我们目前使用Jenkins job DSL按Git分支生成了大量Jenkins作业;多分支管道插件似乎是一种有趣的方法,可以通过Jenkinsfiles潜在地获得一流的作业生成支持,并减少我们维护的Job DSL数量。
例如,我们有libwidget-server和widget-server开发分支项目。当libwidget-server构建完成后,会触发widget-server作业(用于开发分支)。这也适用于其他分支。
这利用“在其他项目构建后构建”来在上游构建完成后触发(例如,libwidget-server导致widget-server被构建)。
看起来,多分支管道插件缺少“在其他项目构建后构建”的设置 - 我们如何在多分支管道构建中完成上述操作?
2个回答

15

假设您的上游作业也使用多分支管道,您应该将分支名称添加到上游作业中。

假设您有一个文件夹,其中包含两个作业,都是多分支管道作业:jobAjobB;在jobAmaster之后应触发jobB

您可以将此代码片段添加到jobB的Jenkinsfile中:

properties([
  pipelineTriggers([
    upstream(
      threshold: 'SUCCESS',
      upstreamProjects: '../jobA/master'
    )
  ])
])

请注意,这里的任何jobB分支将在jobA的主干之后触发!


我们这种情况下的上游不是多分支流水线,但我会进行一些测试。我还需要查看 @cscutcher 上面的建议。 - Friedrich 'Fred' Clausen
它在多分支作业方面运行得非常完美,但似乎不支持Bitbucket分支源插件。 - luka5z
您可以使用绝对或相对路径"/t/multibranch-job/master, ../multibranch-job/master, test, feature%252Ftest"从多分支作业中引用其他作业。 - luka5z
当我尝试使用这种方法时,我会收到org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticField hudson.model.Result UNSTABLE异常。有没有什么解决办法?或者我应该要求管理员将API加入白名单(这很繁琐)? - Codebender
@luka5z 这看起来怎么样? 属性([ pipelineTriggers([ upstream( 阈值:hudson.model.Result.SUCCESS, upstreamProjects:'"/t/multibranch-job/master, ../multibranch-job/master, test, feature%252Ftest" ) ) ]) - Japster24
1
@Codebender 有点晚了,但我相信更新后的答案应该解决了你的异常问题? - Jo Vandeginste

5

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

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

至少这让Jenkins承认它应该在“查看配置”页面中出现时触发“some_project”的构建。然而,到目前为止,“some_project”的构建仍然没有像预期的那样触发下游项目。
话虽如此,也许你会更幸运。如果它对你有用,请告诉我。
(其他人在这里提出了类似的问题-> Jenkins:在上游更改时触发多分支管道

4
当我将result:替换为threshold:时,这对我很有帮助。我还使用了"some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F")来指定多分支流水线的匹配分支。 - Ross Lagerwall
@cscutcher,@Ross Lagerwall,使用声明式触发器triggers { upstream() }无法在Jenkins 2.249.2,Pipeline: Multibranch v2.22,Pipeline v2.6,Pipeline: Job v2.4中链接两个多分支管道作业。我在某处读到,上游作业需要被指定为“路径”,正如@Jo Vandeginste在上面建议的那样,但是对我来说,无论是作业名称(“common_folder/mb_project/branch”)还是路径(“../../other_mb_project/branch”),都不起作用... - timblaktu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接