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的用法

相关推荐
用户0328472220701 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes