当前位置: 首页 > 面试题库 >

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

孔经武
2023-03-14
问题内容

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

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

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

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

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

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

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

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

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

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


问题答案:

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

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

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

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

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



 类似资料:
  • 我目前正在测试Jenkins2.0的管道方法,看看它是否适用于我所使用的构建环境。 另外,如果上游的一个分支发生更改,则不能为所有分支触发整个下游构建。这将创建太多的平等构建。

  • 我对使用Jenkins文件和GIT插件的Jenkins多分支pipleline有一个问题。 问题是,每次向暂存分支推送都会触发master管道。所需的行为是,推送到暂存分支仅触发用于暂存的管道,而推送到主分支仅触发主管道 这是我的詹金斯档案 我将分享一些日志:这是主分支的日志 这是主分支的日志,但只有暂存有一个新的提交: 注意“已发现更改”,即使主分支上的头未更改 詹金斯·弗。2.190.1 Gi

  • 我们看到在Jenkins多分支管道项目上触发了重复构建。构建通常使用来自Bitbucket的推送通知触发,并使用以下插件:https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview 然而,出于某种原因,我们现在看到了“双重”构建。如果查看触发的两个生成,一个由

  • 我有一个参数化的Jenkins多分支管道,使用GitHub repo作为Jenkins文件和一些脚本的源。管道被配置为在Webhook上触发分支和拉请求,但我还希望只对主分支使用参数化的cron触发器,特别是在工作日每4小时一次。 我使用声明性管道语法,但如果必要,我愿意使用脚本化管道。 我使用参数化调度器插件来实现带有参数的cron触发器。 这个管道示例捕获了我试图实现但不支持的内容: 这项功能

  • 我正在努力在将提交添加到GitHub上的特定分支时触发Jenkins Pipeline作业。 我在詹金斯工作选项上没有看到合适的构建触发器,就像詹金斯自由式工作一样。 如何将Jenkins管道作业设置为在使用新提交更新分支时触发? 到目前为止,我还没有找到这个场景的明确答案,只有在提交到master时触发Jenkins管道作业,只有关于多分支作业的答案。 任何关于这个问题的帮助将不胜感激!

  • 我目前设置了一个 Jenkins 多分支管道作业,该作业基于 Gitlab 服务器上托管的 Git 存储库。Jenkins 可以读取存储库中的分支,并为存储库中的每个分支创建一个作业。但是我不知道如何在Gitlab中使用webhook触发作业。 我的问题是: > < li> 如何从Gitlab服务器触发在Jenkins中创建新的分支作业?我看不到一个新分支的webhook被推。 如何触发单个分支的