是否可以在Jenkinsfile中使用正则表达式“when changerable”条件

4zcjmb1e  于 11个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(134)

我们在gitlab仓库中有一个jenkinsfile,我想避免一些取决于gitlab更改的阶段。基本上,当只有K8S conf文件被修改时,不需要构建和推送我们的容器镜像。假设仓库中有4个文件夹:

  • Velero
  • k8s
  • 监测
  • dockerimages

首先,我尝试了以下方法,但是在同一次提交中更改dockerimages和k8s文件夹中的文件将被视为有效条件,并且步骤将被避免.

when {
   not {
      changeset "**/k8s/**" 
   }
   not {
      changeset "Monitoring/**"
   }
   not {
      changeset "
   }
}

字符串
所以我想出了这个,但是它看起来像regex没有被正确评估,并且无论如何更改,步骤总是被避免。所以要么regex是错误的,要么regex在更改条件中不允许使用?

when {
   anyOf {
      changeset '^((?!velero|k8s|monitoring).)*$'
   }
}


当然,我们可以使用“anyOf”条件来列出我们想要触发构建和推送的所有文件夹,但这不太灵活,因为我们要构建的文件夹比要避免的文件夹多,并且添加新的文件夹来构建也需要更新jenkinsfile。
如果你们有什么想法,请告诉我:)

2w2cym1i

2w2cym1i1#

没关系.找到了另一种方法。我计划根据提交内容的变化绕过我们的管道步骤,但下面的代码提供了更大的灵活性,允许开发人员在任何提交评论中输入“#DNB”(不区分大小写)时绕过这些步骤。

when { 
    not {
        changelog '^.*(?i)#DNB.*$'
    } 
}

字符串

kmbjn2e3

kmbjn2e32#

到2023年,changeset允许使用不同类型的模式评估:
可选参数comparator可以添加在属性之后,以指定如何评估匹配的任何模式:

  • EQUALS用于简单的字符串比较
  • GLOB(默认值),用于ANT样式的路径glob不区分大小写(可以使用caseSensitive参数关闭)。
  • REGEXP用于正则表达式匹配

例如:when { changeset pattern: ".TEST\\.java", comparator: "REGEXP" }when { changeset pattern: "*/*TEST.java", caseSensitive: true }

相关问题