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

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页面直接配置

在这里插入图片描述

参考

关于corn表达式

Jenkins cron定时构建触发器

关于when

when的用法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OGNL表达式

文章目录 一、简介二、快速入门三、详细使用3.1 基本数据类型3.2 对象类型3.3 List集合3.4 Set集合3.5 Map集合3.6 数组3.7 静态调用3.8 算术运算3.9 逻辑运算3.10 同时执行多个表达式3.11 位运算 Ognl使用总结 - 源链接在此 >> 一、简介 OGNL(Object-Graph…

【c 语言 】位操作符详解

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…

【机器学习300问】33、决策树是如何进行特征选择的?

还记得我在【机器学习300问】的第28问里谈到的,看决策树的定义不就是if-else语句吗怎么被称为机器学习模型?其中最重要的两点就是决策树算法要能够自己回答下面两问题: 该选哪些特征 特征选择该选哪个阈值 阈值确定 今天这篇文章承接上文&…

1137. 第N个泰波那契数- 力扣

1. 题目 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 2. 示例 3. 分析 1. 状态表示:dp[i]表示:第i个泰波那契数的值 2. 状态转移…

python疑难杂症(10)---Python函数def的定义分类,包括内置函数、外置函数、匿名函数、闭包函数、生成器函数等

本部分详细讲解Python函数的定义、常见的函数类型,尤其是特色函数包括内置函数、外置函数、匿名函数、闭包函数、生成器函数等以及用法。后续将对这类函数重点讲解使用方法。 函数定义: 函数是大多数编程语言使用的一个概念,函数是一段具有…

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL二、下载BenchmarkSQL三、使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL BenchmarkSQL是一个开源的数据库基准测试工具,可以用来评估数据库系统的性能&…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的草莓成熟度检测系统详解(深度学习模型+UI界面+Python代码+训练数据集)

摘要:本研究介绍了一个使用深度学习技术对草莓成熟度进行检测的系统,它采用了最新的YOLOv8算法,以及YOLOv7、YOLOv6、YOLOv5等前版本的算法,并对它们进行了性能对比。该系统能够在不同媒介上——如图像、视频文件、实时视频流和批…

28 批量归一化【李沐动手学深度学习v2课程笔记】(备注:这一节讲的很迷惑,很乱)

目录 1.批量归一化 1.1训练神经网络时出现的挑战 1.2核心思想 1.3原理 2.批量规范化层 2.1 全连接层 2.2 卷积层 2.3 总结 3. 代码实现 4. 使用批量规范化层的LeNet 5. 简明实现 1.批量归一化 现在主流的卷积神经网络几乎都使用了批量归一化 批量归一化是一种流行且…

Scrapy 爬虫框架

网络爬虫框架scrapy (配置型爬虫) 什么是爬虫框架? 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合爬虫框架是个半成品,帮助用户实现专业网络爬虫 scrapy框架结构("52"结构) spider: 解析downloader返回的响…

【读论文】【精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering

文章目录 1. What:2. Why:3. How:3.1 Real-time rendering3.2 Adaptive Control of Gaussians3.3 Differentiable 3D Gaussian splatting 4. Self-thoughts 1. What: What kind of thing is this article going to do (from the a…

传输层协议介绍(tcp,udp),可靠性和不可靠性

目录 传输层协议 介绍 tcp协议 介绍 面向连接 可靠性 面向字节流 udp协议 介绍 无连接 不可靠 面向数据报 可靠和不可靠 可靠 不可靠 传输层协议 介绍 传输层是计算机网络体系结构中的第四层,它负责在网络中的不同主机之间提供端到端的数据传输 传输…

ARMv8架构特殊寄存器介绍-1

1,ELR寄存器(Exception Link Register ) The Exception Link Register holds the exception return address。 异常链接寄存器保存异常返回地址。最常用也很重要。 2,SPSR(Saved Process Status Register)…

PDF 文件与其他文档格式相比有哪些优势?

PDF文件与其他文档格式相比,具有许多明显的优势。首先,PDF是一种跨平台的文档格式,这意味着无论在哪种操作系统或设备上,用户都可以打开和查看PDF文件,而无需担心格式不兼容的问题。这种跨平台性使得PDF文件在办公、学…

Centos7安装postgresql14步骤

1、进入网址 https://www.postgresql.org/download/ 2、按步骤执行 # Install the repository RPM: sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm# Install PostgreSQL: sudo yum install -y…

基于springboot+vue的线上教育系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 现在大家的生活方式正在被计算机的发展慢慢改变着,学习方式也逐渐由书本走向荧幕,我认为这并不是不能避免的,但说实话,现在的生活方式与以往相比有太大的改变,人们的娱乐方式不仅仅…

PHP立体安全攻击向量:保护应用程序的关键挑战

PHP立体安全攻击向量:保护应用程序的关键挑战 PHP作为一种广泛使用的服务器端脚本语言,拥有庞大的用户群体和丰富的生态系统。然而,随着互联网的发展,网络安全问题也变得愈发严重。本文将深入探讨PHP的立体安全攻击向量&#xff0…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+图像缩放,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS多路视频融合叠加应…

jupyter 修改文件保存位置 步骤

一、找到配置文件位置 打开Anaconda Prompt,输入: jupyter notebook --generate-config 根据得到的路径,以记事本方式打开配置文件 二、修改路径 在文件中输入: c.NotebookApp.notebook_dir E:\\deepLearning\\Jupyter_files…

SQL-2

• What have we achieved so far using SELECT ? — Retrieve data from all the rows and columns (whole table) — Retrieve data from all the rows and select columns — Retrieve data from select rows and columns • Sometimes we want to re-format the output fr…

​扩散模型(Diffusion Model)详解:直观理解、数学原理、PyTorch 实现​

在过去的大半年里,以Stable Diffusion为代表的AI绘画是世界上最为火热的AI方向之一。或许大家会有疑问,Stable Diffusion里的这个"Diffusion"是什么意思?其实,扩散模型(Diffusion Model)正是Stable Diffusion中负责生成…