Jenkinsfile_触发器_配置定时任务

在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.只接受固定分支的触发请求,语法如下:
    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加载配置,后面指令才会生效。

posted @ 2021-07-21 11:40  30岁再次出发  阅读(707)  评论(0编辑  收藏  举报