是否可以在 Jenkinsfile "when changeset"条件下使用正则表达式



我们在gitlab repo中有一个jenkinsfile,我希望根据gitlab变更集避免几个阶段。当只修改了K8S conf文件时,基本上不需要构建和推送我们的容器映像。假设回购中有4个文件夹:

  • velero
  • k8
  • 监测
  • 码头图像

首先我尝试了以下操作,但在同一提交中更改dockerimage和k8s文件夹中的文件将被视为有效条件,并将避免步骤。。。这当然不是我们想要的。

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

所以我想到了这个,但是看起来regex没有得到正确的评估,无论发生什么变化,都总是避免步骤。那么,正则表达式是错误的,还是在变更集条件下不允许使用正则表达式?

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

当然,我们可以使用"anyOf"条件列出我们想要触发构建和推送的所有文件夹,但这就不那么灵活了,因为我们要构建的文件夹比要避免的文件夹多,并且添加要构建的新文件夹也需要更新jenkinsfile。

如果你们有想法。。。请告诉我:(

没关系。。。找到了另一条路。我计划根据提交内容的更改绕过我们的管道步骤,但下面提供了更多的灵活性,允许开发人员在任何提交注释中键入"#DNB"(不区分大小写(时绕过这些步骤。

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

最新更新