Jenkins插件Parameterized Scheduler用法

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

目录

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会有如下标识:

如何配置实现呢?

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

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

其中Build periodically Schedulecron表达式类似为

复制代码
triggers{
  cron('H * * * *')
}

Build periodically with parameterscron表达式设置可参考下文:

示例一,不同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 Schedulecron表达式,执行 控制某阶段 只能在定时构建时才触发这个流程时,需要写为:

复制代码
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 parameterscron表达式,执行 控制某阶段 只能在定时构建时才触发这个流程时,需要写为:

Groovy 复制代码
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')`;

Groovy 复制代码
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页面直接配置

参考

关于corn表达式

Jenkins cron定时构建触发器

关于when

when的用法

相关推荐
weixin_307779134 小时前
Clickhouse统计指定表中各字段的空值、空字符串或零值比例
运维·数据仓库·clickhouse
bubiyoushang8884 小时前
Windows11 WSL2 Ubuntu编译安装perf工具
linux·运维·ubuntu
xuanwojiuxin6 小时前
linux panic-propagation
linux·运维·服务器
藥瓿亭8 小时前
K8S认证|CKS题库+答案| 9. 网络策略 NetworkPolicy
linux·运维·docker·云原生·容器·kubernetes·cks
liuzhenghua668 小时前
Python任务调度模型
java·运维·python
黎相思8 小时前
应用层自定义协议与序列化
运维·服务器·网络
测试开发Kevin9 小时前
详解Jenkins Pipeline 中git 命令的使用方法
运维·jenkins
什么半岛铁盒9 小时前
Linux线程与进程关系及底层实现
java·linux·运维
langmeng11010 小时前
使用docker在3台服务器上搭建基于版本redis 6.x的一主两从模式
运维·redis·docker·容器·集群
jllllyuz10 小时前
如何为服务器生成TLS证书
运维·服务器·数据库