当前位置: 首页 > 知识库问答 >
问题:

仅用于子文件夹的Jenkins多分支管道

刘选
2023-03-14

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

我们使用类似GitFlow的方法进行分支,因此Jenkins中的多分支管道作业非常适合我们的项目。

我正在寻找一种方法,在詹金斯有几个工作,每一个将被触发,只有当适当的应用程序的代码被改变。

我的完美解决方案如下所示:

我在詹金斯有几份多分支管道的工作。每个目录只查找给定目录和子目录的更改。每个人都使用自己的文件。作业每X分钟拉一次git,如果现有分支中的相应目录发生更改,则启动构建;如果有对相应目录进行更改的新分支,则启动生成。

是什么阻止了我的实施

>

这里描述的解决方案对我不起作用,因为如果有新分支只对“project1”进行更改,那么每当触发“project2”的多分支管道时,它都会发现这个新分支并构建它。意味着对于每个新分支,我的每个多分支管道将至少执行一次,无论是否对适当的代码进行了更改。

感谢您对我如何实现几个多分支管道来监视同一个git存储库的帮助或建议,但这些管道只有在适当的代码片段发生更改时才会触发

共有3个答案

吴欣悦
2023-03-14

我知道这篇文章已经很老了,但我通过更改SVN存储库的“include branchs”参数解决了这个问题(这也可以使用git repos的属性“Filter by name(with wildcards)”)。我不仅提供了实际的分支名称,还包括了子文件夹。因此,我没有只提供“trunk”,而是使用了“trunk/subfolder”。这将扫描限制为仅扫描该特定目录。请注意,我还没有完全测试这个解决方案。

长孙章横
2023-03-14

这可以通过使用多分支构建策略扩展插件来实现。使用这个插件,您可以定义一个规则,其中只有当更改属于子目录时,构建才会启动。

  1. 安装插件

这样,更改仍然会被发现,但是如果它不属于某个文件或文件夹集,它们就不会启动构建。

这是迄今为止我所知道的最好的方法。但我认为最好的办法是,这些变化甚至没有被发现。

如果您正在使用Gerrit Code Review插件,还可以通过使用自定义查询来防止发现新的更改:

孙钱青
2023-03-14

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

/詹金斯档案

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

然后,您将拥有具有自己的Jenkinsfile(即project-a/Jenkinsfile)的其他管道项目。

 类似资料:
  • 我正试图在詹金斯建立一个多分支管道项目。理想情况下,我希望在开发人员推出新代码后构建分支管道。例如,如果开发人员推送到“dev”分支,那么“dev”管道将自动生成。 我知道在“扫描多分支管道触发器”选项下,您可以设置Jenkins查找更改的频率,但我更希望是相反的方式,这意味着一旦分支中有新代码,Jenkins将构建管道。 我配置了我的Jenkinsfile,并在我的GitHub项目中设置了Web

  • 对于一个新项目,我想使用Jenkins CI的新管道功能。我们的Git存储库中有几个分支,应该以同样的方式进行测试。它还应该自动跟踪和处理新的分支。因此,我创建了一个多分支管道作业。但它的配置有两个问题: 1) 为了被Jenkins标记为有效,分行需要一个“Jenkinsfile”。如果这不存在,詹金斯将忽略该分支。有没有办法标记与模式匹配的所有分支,而不需要在其中包含此文件? 2) 每个分支都应

  • 我使用声明Jenkinsfile与安静期: 工具版本: 詹金斯-2.190.3 管道多分支插件-2.21 管道声明性插件-1.4.0 现在的问题是,在GitHub SCM更改上,独立管道项目尊重静默期,但多分支管道项目不尊重静默期。它也不返回错误,只是在接收webhooks时立即触发构建。 我知道詹金斯-37588在这方面的公开问题。 将上游包装作业与一起使用是不可行的,因为我有几百个多分支项目。

  • 我正在努力使用Jenkins 2.1多分支管道,在这里,我从同一个git存储库构建了多个工件。一些工件是独立的,应该根据它们各自目录中的更改触发构建。有些是依赖的,应该由先前的步骤/构建触发。 存储库有一个控制整个管道的文件。Jenkins多分支管道作业会在所有更改时触发(无其他行为)。 我不知道如何在目录dirA发生变化时触发工件A的构建。 git回购协议中的Jenkins文件file:///r

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

  • 我是詹金的新手,我在比特桶里有4个回购,比如甲、乙、丙、丁。我必须去拿甲、乙 在Jenkinsfile中添加了上面的脚本,我将其放在repo中。 现在,我已经创建了一个多分支管道来获取所有和分支内的源- 我在源代码管理方面创造了自由式的新工作- 任何帮助都很感激。