triggers
在jenkinsfile来定义流水线时,常规情况下,项目都是基于手动点击部署,这种策略尤其适用于线上环境,但在测试环境,乃至于预发环境,应该对自动构建有更高的集成度,使开发者只关注于开发,而不必过多纠结构建的过程。这里使用triggers
来定义流水线触发的机制和条件。
目前流水线支持的触发器有三种:crob、pollSCM和upstream。
-
cron
这里采用和Linux系统一样的定时任务管理方案,加入一些简单的参数项,以应对某些需要定期执行的场景。pipeline { agent any triggers { cron('* * * * *') } stages { stage('cron job') { steps { echo 'cron job test' } } } }
这里参数可以参考linux cron来配置。
-
pollSCM
这里表示定期对代码仓库进行检测,如果有变化,则自动触发构建。pipeline { agent any triggers { pollSCM('* * * * *') } stages { stage('cron job') { steps { echo '每一小时检测一次仓库的变化' } } } }
-
upstream
当B项目的执行依赖A项目的执行结果是,A就是B的上游项目,在Jenkins2.22以上的版本中,可以通过upstream关键字进行这种关系的表示。triggers { // job1,job2都是任务名称 upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) }
hudson.model.Result
是一个枚举用于指示上游项目状态,包含以下指令:- ABORTED:任务被手动终止。
- FAILURE:构建失败。
- SUCCESS:构建成功。
- UNSTABLE:存在一些错误,但不至于构建失败。
- NOT_BUILT:再多阶段构建时,前面阶段的问题导致后面阶段无法执行。
-
gitlab事件触发
这个场景应用较多,大多时候,我们都默认将项目配置为,开发者提交某些分支,然后自动触发对应的构建。传统方式下,需要比较复杂的几步配置,但是在pipeline中也可以通过代码形式对这种触发器进行配置。
注意:gitlab触发Jenkins的构建需要依赖Gitlab插件,而并不需要插件当中列出来的所谓的gitlab hook。pipeline { agent any triggers{ gitlab( triggerOnPush: true, triggerOnMergeRequest: true, branchFilterType: 'All', secretToken: "xxxxxxxx") } stages { stage('build') { steps { echo '提交代码触发构建' } } } }
对于触发器用到的参数:
- triggerOnPush:当Gitlab触发push事件时,是否执行构建。
- triggerOnMergeRequest:当Gitlab触发mergeRequest事件时,是否执行构建。
- branchFilterType:只有符合条件的分支才会触发构建,必选,否则无法实现触发。
可选参数如下: - NameBasedFilter:基于分支名进行过滤,多个分支名使用逗号分隔。
- includeBranchesSpec:基于branchFilterType值,输入期望包括的分支的规则。
- excludeBranchesSpec:基于branchFilterType值,输入期望排除的分支的规则。
- RegexBasedFilter:基于正则表达式对分支名进行过滤。
- sourceBranchRegex:定义期望的通过正则表达式限制的分支规则。
这里举几个示例进行说明:
1.只接受固定分支的触发请求,语法如下:
- sourceBranchRegex:定义期望的通过正则表达式限制的分支规则。
triggers{ gitlab( triggerOnPush: true, triggerOnMergeRequest: true, branchFilterType: "NameBasedFilter", includeBranchesSpec: "release", secretToken: "${env.git_token}") }
2.通过正则匹配到某些分支触发
triggers{ gitlab( triggerOnPush: true, triggerOnMergeRequest: true, branchFilterType: "RegexBasedFilter", sourceBranchRegex: "test.*", secretToken: "${env.git_token}") }
注意:所有对于jenkinsfile的配置都需要手动执行一次,将jenkins加载配置,后面指令才会生效。