【问题标题】:Jenkins Poll scm for specific branch with regexJenkins Poll scm 使用正则表达式获取特定分支
【发布时间】:2022-08-16 04:07:08
【问题描述】:

我有两个 Jenkins 管道工作:-

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

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

    分支作业配置

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

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

    标签: git github jenkins


    【解决方案1】:

    在里面其他行为部分有一个选项叫做选择构建什么的策略.
    添加它时,您将有多个选项选择策略, 其中之一是

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多