Jenkins插件Parameterized Scheduler用法

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会有如下标识:
在这里插入图片描述在这里插入图片描述

如何配置实现呢?

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=int30 * * * * %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=black10 * * * * %furniture=desk;color=yellow;name=barney''')
}

声明式pipeline 配置例子

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

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

pipeline {agent anyparameters {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 anyparameters {string(name: 'TEST_MODE', defaultValue: '', description: 'TEST MODE: Daily Weekly')}triggers {parameterizedCron('''H 3 * * * %TEST_MODE=DailyH 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的用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/276342.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 ReclaiMe Pro 恢复任意文件系统(Win/Linux/MacOS)

天津鸿萌科贸发展有限公司是 ReclaiMe Pro 数据恢复软件授权代理商。 ReclaiMe Pro 是一个通用工具包,几乎可以用于从所有文件系统(从 Windows 系列文件系统、Linux 和 MacOS)中恢复数据。此外,考虑到数据恢复工作的具体情况&…

python练习

1. 五个PPT上的界面打印【print、input函数】 #界面1 -登录 print(英雄商城登录界面) print(英雄联盟商城登录界面) print(~*~*~*~*~*~*~*~*~*~*~*~*~*) print(1.用户登录) print(2.新用户注册) print(3.退出系统) print(~*~*~*~*~*~*~*~*~*~*~*~*~*) input("(温馨提示)请…

Gitee配置SSH登录

一、背景 新入手的电脑,需要对Gitee上存放的项目进行更改上传,发现上传不了需要登录,便采用SSH密钥进行登录,防止远程管理工程中的信息泄露 二、前提 电脑已下载Git Bash工具,在项目下点击鼠标右键,进入…

为什么不直接用百度,要用AI呢

使用百度和其他搜索引擎与使用AI技术(如我这样的人工智能助手)各有优势,选择使用哪一种往往取决于具体的需求和情境。 1.使用AI技术的几个原因 1. 定制化体验:AI技术可以提供更加个性化的服务。例如,AI助手可以根据您…

如何使用CloudRecon扫描Web应用程序并从SSL证书中发现有效资产

关于CloudRecon CloudRecon是一款功能强大的Web应用程序资产扫描与识别工具,该工具可以帮助广大研究人员对目标Web应用程序执行扫描,并从证书中识别出有价值的资产数据。 CloudRecon本质上是一个工具集,由三个组件组成,可以帮助红…

深入了解 Spring boot的事务管理机制:掌握 Spring 事务的几种传播行为、隔离级别和回滚机制,理解 AOP 在事务管理中的应用

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

ElementUI两个小坑

1.form表单绑定的是一个对象&#xff0c;表单里的一个输入项是对象的一个属性之一&#xff0c;修改输入项&#xff0c;表单没刷新的问题&#xff0c; <el-form :model"formData" :rules"rules" ref"editForm" class"demo-ruleForm"…

拆解Spring boot:Springboot为什么如此丝滑而简单?源码剖析解读自动装配

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

【深度学习】线性回归

Linear Regression 一个例子线性回归机器学习中的表达评价函数好坏的度量&#xff1a;损失&#xff08;Loss&#xff09;损失函数&#xff08;Loss function&#xff09;哪个数据集的均方误差 (MSE) 高 如何找出最优b和w?寻找最优b和w如何降低损失 (Reducing Loss)梯度下降法梯…

Vue首屏优化方案

在Vue项目中&#xff0c;引入到工程中的所有js、css文件&#xff0c;编译时都会被打包进vendor.js&#xff0c;浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多&#xff0c;那么vendor.js文件体积将会相当的大&#xff0c;影响首屏的体验。可以看个例子&#xff1a;…

Elasticsearch使用Kibana进行基础操作

一、Restful接口 Elasticsearch通过RESTful接口提供与其进行交互的方式。在ES中&#xff0c;提供了功能丰富的RESTful API的操作&#xff0c;包括CRUD、创建索引、删除索引等操作。你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上&#xff0c;你甚至可以使用 curl …

java SSM在线学习网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM在线学习网站系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用…

COX回归影响因素分析的基本过程与方法

在科学研究中&#xff0c;经常遇到分类的结局&#xff0c;主要是二分类结局&#xff08;阴性/阳性&#xff1b;生存/死亡&#xff09;&#xff0c;研究者可以通过logistic回归来探讨影响结局的因素&#xff0c;但很多时候logistic回归方法无法使用。如比较两种手段治疗新冠肺炎…

AOP-面向切面编程

文章目录 AOP应用背景AOP介绍AOP七大术语切点表达式 AOP应用背景 一天&#xff0c;项目经理突然跟我说&#xff1a;官网后端管理系统需要增加“用户操作流水功能”&#xff01;啥&#xff0c;用户操作流水&#xff1f;对&#xff0c;记录后台管理用户的所有增删改查的操作&…

mac删除带锁标识的app

一 、我们这里要删除FortiClient.app 带锁 常规方式删除不掉带锁的 app【如下图】 二、删除命令&#xff0c;依次执行即可。 /bin/ls -dleO /Applications/FortiClient.app sudo /usr/bin/chflags -R noschg /Applications/FortiClient.app /bin/ls -dleO /Applications/Forti…

QT信号与槽实现方式

1、第一种实现方式 在QT开发工具UI界面先拖入按钮&#xff0c;然后鼠标右键拖入按钮&#xff0c;点击选中槽&#xff0c;在页面选着需要的信号&#xff0c;然后OK&#xff0c;随即将会跳转到类的.cpp文件&#xff0c;&#xff08;这种UI代码结合的方式&#xff0c;会自动去绑定…

【洛谷 P8637】[蓝桥杯 2016 省 B] 交换瓶子 题解(贪心算法)

[蓝桥杯 2016 省 B] 交换瓶子 题目描述 有 N N N 个瓶子&#xff0c;编号 1 ∼ N 1 \sim N 1∼N&#xff0c;放在架子上。 比如有 5 5 5 个瓶子&#xff1a; 2 , 1 , 3 , 5 , 4 2,1,3,5,4 2,1,3,5,4 要求每次拿起 2 2 2 个瓶子&#xff0c;交换它们的位置。 经过若干次…

AIGC笔记--关节点6D位姿按比例融合

1--核心代码 6D位姿一般指平移向量和旋转向量&#xff0c;Maya软件中关节点的6D位姿指的是相对平移向量和欧拉旋转向量&#xff1b; 为了按比例融合两个Pose&#xff0c;首先需要将欧拉旋转向量转换为旋转矩阵&#xff0c;在将旋转矩阵转换为四元数&#xff0c;利用球面线性插值…

react native常用插件

react-native-async-storage/async-storage 说明&#xff1a;AsyncStorage 是一个在 react-native 中轻量存储的库&#xff1b;跟 localStorage 类似&#xff0c;API 也几乎一样&#xff1b;存储的时候需要将存储内容转成字符串存储。 react-navigation/material-bottom-tabs …

如何在WordPress网站上设置多语言展示

在今天的全球化世界中&#xff0c;拥有多语言网站对于吸引更广泛的受众至关重要。前不就我们遇到Hostease的客户咨询我们的在线客服&#xff0c;他想要对他的wordpress网站支持多语言。我们提供给客户可以尝试以下的插件来支持多语言。 在本教程中&#xff0c;我们将逐步介绍如…