mrz*_*iak 15 jenkins jenkins-pipeline monorepo jenkins-blueocean
我有不同应用程序的 git monorepo。目前,我在包含应用程序所有管道的根文件夹中有一个 Jenkinsfile。当提交仅更改一个应用程序时,为所有应用程序执行完整管道非常耗时。
我们使用类似于 GitFlow 的方法进行分支,因此 Jenkins 中的 Multibranch Pipeline 作业非常适合我们的项目。
我正在寻找一种在 Jenkins 中拥有多个工作的方法,只有在更改相应应用程序的代码时才会触发每个工作。
对我来说完美的解决方案是这样的:
我在 Jenkins 有几个 Multibranch Pipeline 工作。每个都只查找给定目录和子目录的更改。每个人都使用自己的 Jenkinsfile。作业每 X 分钟拉一次 git,如果现有分支中的适当目录发生更改 - 启动构建;如果有更改适当目录的新分支 - 启动构建。
是什么阻止我执行此操作
我缺少一种方法来定义在 Multibranch 管道执行扫描期间必须忽略哪些文件夹的提交。Multibranch 管道的“附加行为”没有“轮询忽略对某些路径的提交”选项,而管道或自由式作业有。但我想使用 Multibranch 管道。
此处描述的解决方案对我不起作用,因为如果将有仅对“project1”进行更改的新分支,那么无论何时触发“project2”的多分支管道,它都会发现这个新分支并构建它。意味着对于每个新分支,无论是否对适当的代码进行了更改,我的每个多分支管道都将至少执行一次。
感谢任何帮助或建议我如何实现几个多分支管道监视同一个 git 存储库但仅在适当的代码片段更改时触发
我通过创建一个项目来解决这个问题,该项目根据更改的文件构建其他项目。例如,从您的回购根目录:
/詹金斯档案
#!/usr/bin/env groovy
pipeline {
agent any
options {
timestamps()
}
triggers {
bitbucketPush()
}
stages {
stage('Build project A') {
when {
changeset "project-a/**"
}
steps {
build 'project-a'
}
}
stage('Build project B') {
when {
changeset "project-b/**"
}
steps {
build 'project-b'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您将拥有其他带有自己的 Jenkinsfile(即 project-a/Jenkinsfile)的 Pipeline 项目。
这可以通过使用Multibranch 构建策略扩展插件来完成。使用此插件,您可以定义一个规则,其中仅当更改属于子目录时才启动构建。
subfolder/** 
这样,更改仍会被发现,但如果它不属于某个文件或文件夹集,它们将不会启动构建。
这是迄今为止我所知道的最好的方法。但我认为最好的方法是甚至没有发现更改的情况。
如果您使用 Gerrit Code Review 插件,您还可以使用自定义查询来防止发现新更改:
| 归档时间: |
|
| 查看次数: |
7864 次 |
| 最近记录: |