Jenkins插件Parameterized Scheduler用法

03-12 1334阅读

Jenkins定时触发构建的同时设定参数。可以根据不同的定时构建器设置不同参数或环境变量的值。可以设置多个参数。并结合when控制stage流程的执行。结合when和triggeredBy区分定时构建的stage和手动执行的stage。

目录

  • 什么是Parameterized Scheduler?
  • 如何配置实现呢?
    • 示例一,不同corn表达式指定单个参数的值
    • 示例二,不同corn表达式指定多个参数的值
    • 声明式pipeline 配置例子
    • 使用when/triggeredBy指令
      • 内置的cron 触发器中cron表达式结合when/triggeredBy指令
      • parameterizedCron 触发器中cron表达式结合when/triggeredBy指令
      • parameterizedCron 触发器中cron表达式参数控制stage执行
      • 脚本化管道示例
      • config页面直接配置
      • 参考
        • 关于corn表达式
        • 关于when

          Jenkins插件名称:Parameterized Scheduler

          插件链接:Parameterized Scheduler插件官方文档

          这个是官方文档,其中包含了安装,介绍,使用示例,Issues等相关信息。

          config位置:configure->Build Triggers->Build periodically with parameters

          下面为对官方文档的机翻+自我理解和使用实例补充。

          什么是Parameterized Scheduler?

          Parameterized Scheduler是一个 Jenkins 插件,支持在构建计划中设置参数。支持使用多个 cron 行,每个 cron 行都以 % 和一些键值对name=value结尾,可以安排参数化构建在不同时间使用不同参数运行。

          能在不同的cron表达式下设置不同的参数值,可以同时设置多个参数值。

          安装参考:https://www.jenkins.io/doc/book/managing/plugins/

          安装完之后,配置页面config会有如下标识:

          Jenkins插件Parameterized Scheduler用法Jenkins插件Parameterized Scheduler用法

          如何配置实现呢?

          Build periodically with parameters中% 符号之前的 cron表达式的编写和处理方式与 jenkins 中的 Build periodically Schedule 相同。不同的是Build periodically with parameters在corn表达式后加%,然后添加项目构建参数所需的name=value键值对,可以同时添加多个。

          这个插件的idea源于Job流程构建时可能会使用到不同环境的需要。在不同的定时构建条件下,构建流程的参数可以设置为不同的,从而控制流程的开合。

          其中Build periodically Schedule中cron表达式类似为

          triggers{
            cron('H * * * *')
          }
          

          Build periodically with parameters的cron表达式设置可参考下文:

          示例一,不同corn表达式指定单个参数的值

          在此示例中,有两个cron表达式,表示的是两种定时构建方案。

          其中每隔15min触发的Job流程里,Job参数会被设置为env=int;

          其中每隔30min触发的Job流程里,Job参数会被设置为env=qa;

          # lets run against the integration environment at 15 past the hour
          15 * * * * %env=int
          # run QA too
          30 * * * * %env=qa
          

          在pipeline中该代码片段为

          triggers {
              parameterizedCron('''
                  15 * * * * %env=int
                  30 * * * * %env=qa
              ''')
          }
          

          示例二,不同corn表达式指定多个参数的值

          比如有三个参数:

          ● furniture

          ● color

          ● name (with a default of fred

          可以使用如下流程:

          # leave spaces where you want them around the parameters. They'll be trimmed.
          # we let the build run with the default name
          5 * * * * %furniture=chair;color=black
          # now, let's override that default name and use Mr. Rubble.
          10 * * * * %furniture=desk;color=yellow;name=barney
          

          表示每5min触发一次Job流程,Job参数会被设置为,furniture=chair;color=black

          每20min触发一次的Job流程,Job参数会被设置为,furniture=desk;color=yellow;name=barney

          在pipeline中该代码片段为

          triggers {
              parameterizedCron('''
                  5 * * * * %furniture=chair;color=black
                  10 * * * * %furniture=desk;color=yellow;name=barney
              ''')
          }
          

          声明式pipeline 配置例子

          可以使用触发器指令下的keyparameterizedCron来指定参数化 cron 触发器。内置的 cron 触发器仍然可用,并且独立于parameterizedCron。

          例子

          pipeline {
              agent any
              parameters {
                string(name: 'PLANET', defaultValue: 'Earth', description: 'Which planet are we on?')
                string(name: 'GREETING', defaultValue: 'Hello', description: 'How shall we greet?')
              }
              triggers {
                  parameterizedCron('''
                      # leave spaces where you want them around the parameters. They'll be trimmed.
                      # we let the build run with the default name
                      */2 * * * * %GREETING=Hola;PLANET=Pluto
                      */3 * * * * %PLANET=Mars
                  ''')
              }
              stages {
                  stage('Example') {
                      steps {
                          echo "${params.GREETING} ${params.PLANET}"
                          script { currentBuild.description = "${params.GREETING} ${params.PLANET}" }
                      }
                  }
              }
          }
          

          使用when/triggeredBy指令

          when指令的选项之一是triggeredBy子句。当使用内置的 cron 触发器时,应该使用triggedBy 'TimerTrigger'。但是,parameterizedCron 触发器与内置触发器是不同的触发器,因此应该相应地更新triggeredBy,为 triggeredBy 'ParameterizedTimerTriggerCause'。

          内置的cron 触发器中cron表达式结合when/triggeredBy指令

          使用Build periodically Schedule中cron表达式,执行 控制某阶段 只能在定时构建时才触发这个流程时,需要写为:

          pipeline {
              agent any
              parameters {
                string(name: 'PLANET', defaultValue: 'Earth', description: 'Which planet are we on?')
                string(name: 'GREETING', defaultValue: 'Hello', description: 'How shall we greet?')
              }
              triggers {
                  cron('*/2 * * * *')
              stages {
                  stage('Example') {
                      when {
                          triggeredBy 'TimerTrigger'
                      }
                      steps {
                          echo 'This build was triggered by a `parameterizedCron` trigger'
                      }
                  }
              }
          }
          

          parameterizedCron 触发器中cron表达式结合when/triggeredBy指令

          使用Build periodically with parameters中cron表达式,执行 控制某阶段 只能在定时构建时才触发这个流程时,需要写为:

          pipeline {
              agent any
              parameters {
                string(name: 'PLANET', defaultValue: 'Earth', description: 'Which planet are we on?')
                string(name: 'GREETING', defaultValue: 'Hello', description: 'How shall we greet?')
              }
              triggers {
                  parameterizedCron('''
                      # leave spaces where you want them around the parameters. They'll be trimmed.
                      # we let the build run with the default name
                      */2 * * * * %GREETING=Hola;PLANET=Pluto
                      */3 * * * * %PLANET=Mars
                  ''')
              stages {
                  stage('Example') {
                      when {
                          triggeredBy 'ParameterizedTimerTriggerCause'
                      }
                      steps {
                          echo 'This build was triggered by a `parameterizedCron` trigger'
                      }
                  }
              }
          }
          

          相当于该阶段stage('Example') 只在 参数化定时构建(parameterizedCron) 触发流程时才会执行该阶段流程。手动触发该流程不会触发到这个阶段流程。

          parameterizedCron 触发器中cron表达式参数控制stage执行

          下面这个示例流程则是,当3点定时触发时,TEST_MODE=Daily,会触发stage('daily_test')而不会触发stage('weekly_test') ;

          当4点定时触发Job时,TEST_MODE=Weekly,会触发stage('weekly_test')而不会触发stage(‘daily_test’)`;

          pipeline {
              agent any
              parameters {
                string(name: 'TEST_MODE', defaultValue: '', description: 'TEST MODE: Daily Weekly')
              }
              triggers {
                  parameterizedCron('''
                      H 3 * * * %TEST_MODE=Daily
                      H 4 * * * %TEST_MODE=Weekly
                  ''')
              stages {
                  stage('daily_test') {
                     when {
          	              environment name: 'TEST_MODE', value: 'Daily'
          	              beforeAgent true
          	          }
                      steps {
                          echo 'Daily Test'
                      }
                  }
                  stage('weekly_test') {
                     when {
          	              environment name: 'TEST_MODE', value: 'Weekly'
          	              beforeAgent true
          	          }
                      steps {
                          echo 'WeeklyTest'
                      }
                  }
              }
          }
          

          这样就能实现在不同时间点,控制传递给Job的参数值,并根据参数值控制执行不同流程。

          脚本化管道示例

          在脚本式管道要实现这个,可以参考下文:

          properties([
            parameters([
              string(name: 'PLANET', defaultValue: 'Earth', description: 'Which planet are we on?'),
              string(name: 'GREETING', defaultValue: 'Hello', description: 'How shall we greet?')
            ]),
            pipelineTriggers([
              parameterizedCron('''
                  */2 * * * * %GREETING=Hola;PLANET=Pluto
                  */3 * * * * %PLANET=Mars
              ''')
            ])
          ])
          

          config页面直接配置

          Jenkins插件Parameterized Scheduler用法

          参考

          关于corn表达式

          Jenkins cron定时构建触发器

          关于when

          when的用法

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]