繁体   English   中英

Jenkins 使用正则表达式轮询特定分支的 scm

[英]Jenkins Poll scm for specific branch with regex

我有两个 Jenkins 管道作业:-

  1. Main - 当main分支上有代码更改时应该触发
  2. 分支 - 当main分支以外的任何分支发生代码更改时应触发

我已经为 GitHub 存储库上每分钟轮询更改的两个作业启用了Poll SCM选项。 请注意,在我的情况下,轮询是唯一可行的选项。

分支作业配置

在此处输入图像描述

从 Branch 作业的配置中可以看出,它正在使用*/*寻找任何分支,而不是它应该寻找除main分支之外的任何分支。 如果我尝试在那里添加任何正则表达式,例如(?..*main).*$ ,那么 Jenkins 会给出错误,因为它无法解析正则表达式。 如果有人能指出一种使这项工作有效的方法,我将不胜感激。

仅供参考: Jenkinsfile具有管道阶段 - 构建、测试和发布,因为结帐是从管道配置本身处理的。

Additional Behaviors部分有一个名为Strategy 的选项,用于选择要构建的内容
添加它时,您将有多种选择策略的选项,其中之一是Inverse

构建除与上面配置的分支说明符匹配的分支之外的所有分支。 这很有用,例如,当您有构建主分支和各种发布分支的工作,并且您想要构建所有新功能分支的第二个工作 - 即与这些模式不匹配的分支 - 而无需重复构建主分支和发布分支时他们改变的时间。

因此,只需添加该选项,将其设置为Inverse并将您的分支说明符设置为*/main - 这将导致作业为任何非主分支(或模式中指定的任何其他分支)运行。

在此处输入图像描述


您可以采取的另一种方法是为所有分支创建一个作业,然后使用when指令的内置分支条件分隔不同的阶段逻辑:

stage('Tests'){
   when { 
       branch 'master'
    }
    steps {
       ...
    }
}
stage('Upload'){
   when { 
       branch pattern: "release-\\d+", comparator: "REGEXP"
    }
    steps {
       ...
    }
}

当所有分支的大部分代码都相同时,这非常有用,但您对特定分支有一些额外的阶段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM