Jenkins插件Parameterized Scheduler用法

news2024/11/15 8:38:23

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.coloradmin.cn/o/1510438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

需要准备材料:Origin、PL Decay数据txt文件 首先打开Origin画图软件 导入数据,按照下图箭头操作直接导入 双击你要导入的PL Decay的txt数据文件,然后点OK 继续点OK 数据导入后首先删除最大光子数之前的无效数据,分析的时候用…

react中的useEffect的使用

目录 React的useEffect深度解析与实战应用 一、useEffect的基本使用 二、useEffect的依赖项数组 三、避免无限循环 四、使用清空函数进行清理 React的useEffect深度解析与实战应用 React Hooks 是 React 16.8 版本引入的新特性,它允许我们在不编写 class 的情况…

AHU 汇编 实验二

一、实验名称:实验二 不同寻址方式的灵活运用 二、实验内容:定义数组a[6],用多种寻址方式访问对应元素,实现(a[0]a[1])*(a[2]-a[3])/a[4],将结果保存在内存a[5]中,用debug查询结果。 实验过程&a…

盘点 gma 中为 栅格数据 设计的切片操作

数据切片是 Python 中非常实用的方法,Numpy、Pandas 等第三方库的切片操作为数据处理提供了不少便利。如果能对栅格/矢量数据进行切片,那会使地理数据处理也变得方便和快捷。 基于此,自 gma 2.0.6.10 开始,gma 针对 打开的栅格数据…

【使用postman测试python接口】

打开python服务 设置postman如下,并发送: postman新建请求设置请求方式为post设置地址、raw、json方式、内容如下 结果: python如下: from flask import Flask, request, jsonifyapp Flask(__name__) # 实例化对象app.route…

酷开科技智慧AI助力酷开系统千屏千面

每台智能电视都有一个专属的操作系统,而酷开系统作为一款基于人工智能技术的智能电视操作系统,深受大众喜爱,其最大的特点就是“千屏千面”。这意味着每一位消费者在使用酷开系统时,通过酷开科技的智慧AI,都能根据自己…

SpringSecurity原理简述

文章目录 0. 简介1. 快速入门1.1 准备工作1.2 引入SpringSecurity 2. 认证2.1 登陆校验流程2.2 原理初探2.2.1 SpringSecurity完整流程2.2.2 认证流程详解 2.3 解决问题2.3.1 思路分析2.3.2 准备工作2.3.3 实现2.3.3.1 数据库校验用户准备工作核心代码实现 2.3.3.2 密码加密存储…

Java this 关键字

**1.上节课学习了Java对象的定义和使用,我们知道了对象是存在堆内存中的,Java要求程序员不能直接操作堆内存,因此出现了引用的概念。引用的实质是一个存放对象地址的局部变量。 定义一个对象的语法: **Student s1 new Student();…

1.Spring核心功能梳理

概述 本篇旨在整体的梳理一下Spring的核心功能,让我们对Spring的整体印象更加具体深刻,为接下来的Spring学习打下基础。 本片主体内容如下: Bean的生命周期依赖注入的实现Bean初始化原理推断构造方法原理AOP的实现这里要说明一下,我们这里说到的Spring,一般指的是Spring F…

Mac M1:通过docker安装RocketMQ、RocketMQ-Dashboard

0. 引言 最近本地启动以前docker安装的rocketmq发现报错了,因为是从老mac迁移过来的,发现支持的芯片还是amd的,于是重新在docker下安装rocketmq,并记录下步骤,方便大家后续参考。 1. 步骤 1、先下载项目源码 git c…

3.基础算法之搜索与图论

1.深度优先搜索 深度优先搜索(DFS,Depth First Search)是一种用于遍历或搜索树或图的算法。它将当前状态按照一定的规则顺序,先拓展一步得到一个新状态,再对这个新状态递归拓展下去。如果无法拓展,则退回…

【手撸IM】消息ID设计与实现

【手撸IM】专题由来:之前利用业余空闲时间写一个Java版Akka-Rpc,并且基于它写了一个分布式高性能文件服务,从反馈上来看,还是得到了一定的关注,甚至部分同学真的基于此直接抄作业和二开了。因此有了再进一步去手撸一个…

收益率16.6%!超越ChatGPT的股票预测模型来了,还能给出合理解释

股市变换莫测,任何一点风吹草动都可能影响股票的走势,面对这种不确定性,投资者们常常感到无所适从。 于是研究者们盯上了如今大火的大模型技术,试图通过高效地处理和分析海量的股市数据,挖掘出其中的隐藏规律和趋势&am…

使用ffmpeg提取视频中的音频并保存为单声道wav

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 $ ffmpeg -i C0439.MP4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable…

华为OD机试 - 垃圾信息拦截(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…

网络安全之渗透实战学习

前言 本次渗透以SMB共享之SCF文件攻击为突破点,利用burp编码爆破Basic Authorization认证、smb连接的多种方法、windows用户的NTLM值破解方法、evil-winrm的运用、windows主机信息收集工具、msf运行powershell脚本、远程运行powershell脚本、PrintNightmare漏洞提权…

内存抖动导致shared pool资源征用分析

业务hang住,后台查看事件都是“latch: shared pool” 根据堵塞的blocking_session检查sid为1873的会话 发现都是MMAN进程堵塞,我们都知道Oracle的MMAN进程(Memory Manager Process,内存管理进程)会根据系统负载的变化和…

2024.3.11 C++作业

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {char str[20];cout << "please enter the str:";gets(str);in…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题⑤

2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题⑤ 模块一 私有云&#xff08;50 分&#xff09;任务 1 私有云服务搭建&#xff08;10 分&#xff09;任务 2 私有云服务运维&#xff08;25 分&#xff09;任务 3 私有云运维开发&#xf…

基于云效构建部署NodeJS项目到ACK

准备工作 01、编写Dockerfile文件可以根据不同的环境&#xff0c;新建不同的Dockerfile文件&#xff0c;比如Dockerfile-PROD # Deliver the dist folder with NginxFROM nginx:stable-alpine ENV LANGC.UTF-8 ENV TZAsia/ShanghaiCOPY dist/ /usr/share/nginx/html COPY ngi…