首页 文章

Jenkins multibranch管道仅适用于子文件夹

提问于
浏览
3

我有git monorepo与不同的应用程序 . 目前我在根文件夹中有单个Jenkinsfile,其中包含app alls的管道 . 当提交仅更改一个应用程序时,为所有应用程序执行完整管道非常耗时 .

我们使用类似GitFlow的方法进行分支,因此Jenkins的Multibranch Pipeline工作非常适合我们的项目 .

我正在寻找一种在Jenkins中拥有多个工作的方法,只有在相应应用程序的代码发生变化时才会触发每个工作 .

Perfect solution for me looks like this:

我在Jenkins有几个Multibranch Pipeline工作 . 每个人只查找给定目录和子目录的更改 . 每个人都使用自己的Jenkins文件 . 乔布斯每隔X分钟拉一次git,如果现有分支中的相应目录有变化 - 启动构建;如果有新分支 with changes to appropriate directories - 启动构建 .

What stops me from this implementation

  • 我错过了一种定义提交的方法,在Multibranch管道扫描执行期间必须忽略哪些文件夹 . Multibranch管道的“附加行为”没有“轮询忽略对某些路径的提交”选项,而管道或Freestyle作业具有 . 但我想使用Multibranch管道 .

  • 描述的解决方案here对我不起作用,因为如果有新的分支仅对"project1"进行更改,那么无论何时触发"project2"的Multibranch管道,它都会发现这个新分支并构建它 . 无论是否对适当的代码进行了更改,我的Multibranch管道中的每个新分支的方法将至少执行一次 .

感谢任何帮助或建议我如何实现几个Multibranch管道在同一个git存储库上观察,但仅在适当的代码片段更改时触发

2 回答

  • 0

    尽管这已经为单声道回购制造了,但根据Jenkins roadmap,这不会改变 .

    使用mono repo方法,除了已经提到的问题之外,还有一些问题需要解决 . 您如何保持构建的概述?当构建失败时,哪个应用程序现在实际上已被破坏?

    只要你没有支持多重回购的CI / CD服务器,一等公民(Jenkins,Bamboo和TeamCity都没有),我会继续使用单一回购 .

    如果您仍想将它们放在一个地方,请查看git子模块 . 但是,它们有其自身的缺点并增加了复杂性 .

  • 0

    我通过创建一个项目来解决这个问题,该项目根据更改的文件构建其他项目 . 例如,从您的repo root:

    /Jenkinsfile

    #!/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'
                }
            }
        }
    }
    

    然后,您将拥有其他管道项目及其自己的Jenkins文件(即project-a / Jenkinsfile) .

相关问题