问题描述
想要在Git上的拉取请求中,当目标分支为master且源分支名称中包含字符串”foo”时,触发Jenkins构建。
用户考虑将这个复杂的逻辑放入Jenkins的流水线文件中。是否有插件或支持的方法可以实现这个需求?用户并没有使用Github。
用户还想知道是否有一种过滤掉不包含”foo”的分支的方法?如何根据拉取请求触发构建?用户尝试过仅使用拉取请求触发构建(不包含搜索”foo”的模式),但即使满足了配置的条件,Jenkins作业也不会运行。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
使用多分支流水线,您有几种不同的方法来过滤分支,例如使用正则表达式来匹配”foo”。为了使用这种作业类型,您必须在您的存储库中创建一个带有使用脚本或声明性语法的构建指令的Jenkinsfile。术语”拉取请求”通常与Github和Bitbucket等服务同义。
您还可以在流水线内部使用声明性语法进行过滤:
when {changeRequest branch: "foo.*", comparator: 'REGEXP' }
也可以使用脚本语法:
if (env.BRANCH_NAME ==~ /foo.*/){ ...}
方案2
使用Jenkins声明性流水线的
when
关键字结合branch
关键字,可以实现此功能。
pipeline {
agent any
stages {
stage('Example Build') {
steps {
echo 'Hello World'
}
}
stage('Example Deploy') {
when {
branch 'production'
}
steps {
echo 'Deploying'
}
}
}
}
以上示例中,我们使用了Jenkins的声明性流水线语法。在Example Deploy
阶段中,我们使用了when
关键字和branch
关键字来指定只有当分支为production
时才执行该阶段的步骤。
正文完