深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制
文章目录
- 前言
- 1. 使用 “Build Trigger”(构建触发器)
- 2. 使用 Jenkins Pipeline 实现任务触发
- 3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件
- 例子1:任务 A 成功后自动执行任务 B
- 例子2:任务 A 成功后自动执行 Pipeline 脚本
- Jenkins Pipeline 常用语法和概念
- 1. Pipeline 结构
- 2. Agent
- 3. Stages 和 Steps
- 4. Post
- 5. Environment
- 6. Script
- 7. Parallel
- 结论
前言
在 Jenkins 中,通常我们会遇到一个需求:某个任务成功执行后,需要自动触发另一个任务的执行。Jenkins 提供了多种方式来实现这种任务依赖。本文将详细讲解三种常见的实现方式,包含具体的操作步骤、工作原理、简单示例及优缺点比较。
后面,还会介绍如何通过 Jenkins Pipeline 根据任务状态来决定是否执行下一个任务,以及展示 Pipeline 常用语法和概念。
1. 使用 “Build Trigger”(构建触发器)
通过 Jenkins 内置的触发器机制,任务 A 构建成功后,将自动触发任务 B 的执行。
操作步骤:
- 打开任务 A 的配置页面,滚动到 “Post-build Actions”(构建后操作)部分。
- 选择 “Build other projects”(构建其他项目)。
- 在弹出的文本框中输入你希望触发的任务 B 的名称。
- 勾选 “Trigger only if build succeeds”(仅当构建成功时触发),确保任务 A 成功后才执行任务 B。
示例:
- 任务 A 是一个定时构建任务,它每天执行,并且生成一些文件。
- 使用构建触发器配置后,当任务 A 成功执行完毕后,任务 B 将自动启动并处理这些生成的文件。
优缺点:
- 优点:非常简单,操作通过图形化界面进行,不需要编写任何脚本。
- 缺点:灵活性较差,不能处理复杂的条件逻辑或多任务并行等场景。
2. 使用 Jenkins Pipeline 实现任务触发
Jenkins Pipeline 是一个基于代码的自动化工具,允许使用 DSL(领域特定语言)来定义整个构建过程。通过 build
函数,你可以在 Pipeline 中触发其他任务的执行,并等待其完成后再执行后续操作。
操作步骤:
- 创建一个新的 Pipeline 作业。
- 在 Pipeline 脚本中,使用
build
函数来触发任务 B。例如:
build job: 'B', wait: true
示例:
pipeline {agent anystages {stage('Build A') {steps {build job: 'A', wait: true // 触发任务A并等待其完成}}stage('Run B if A succeeds') {steps {build job: 'B', wait: true // 任务A成功后触发任务B}}}
}
- 该 Pipeline 脚本会先触发任务 A,等待任务 A 成功后再执行任务 B。
优缺点:
- 优点:非常灵活,适用于复杂场景,比如任务依赖、并行执行、条件逻辑等。
- 缺点:需要编写 Groovy 脚本,对不熟悉 Pipeline 的用户有一定的学习曲线。
3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件
Parameterized Trigger Plugin
插件允许你在任务 A 构建完成后,触发任务 B 的执行,并且可以传递自定义参数。这在任务 B 需要根据任务 A 的结果进行不同的操作时非常有用。
操作步骤:
- 安装 Parameterized Trigger Plugin 插件。
- 在任务 A 的 “Post-build Actions”(构建后操作)部分,选择 “Trigger parameterized build on other projects”。
- 在配置中指定你希望触发的任务 B,并可以选择传递参数到任务 B。
示例:
- 任务 A 生成了若干日志文件,并将其路径传递给任务 B。
- 在任务 B 中可以通过
${LOG_PATH}
获取传递的日志文件路径。
优缺点:
- 优点:可以传递参数,适用于需要任务间传递信息的场景,灵活性更高。
- 缺点:需要额外安装插件,并进行一些配置,相对较复杂。
例子1:任务 A 成功后自动执行任务 B
如果你想在任务 A 成功后才触发任务 B,而在任务 A 失败时不执行任务 B,Jenkins Pipeline 提供了一种非常便捷的方式来处理。
操作步骤:
在 Jenkins Pipeline 中,可以通过 post
块来处理任务执行后的状态。你可以根据任务的结果(如成功、失败等)来控制是否执行后续任务。
示例:
pipeline {agent anystages {stage('Build A') {steps {build job: 'A', wait: true // 触发任务A并等待其完成}}}post {success {build job: 'B' // 仅当任务A成功时触发任务B}failure {echo 'Task A failed, skipping Task B' // 任务A失败时跳过任务B}}
}
- 在这个例子中,
post
块会根据任务 A 的执行结果来决定后续任务的执行。- 如果任务 A 成功,任务 B 会被触发。
- 如果任务 A 失败,系统将输出提示信息并跳过任务 B。
例子2:任务 A 成功后自动执行 Pipeline 脚本
如果你想在任务 A 成功后才触发任务 B Pipeline 上的脚本,而在任务 A 失败时则不执行,Jenkins Pipeline 提供了一种非常便捷的方式来处理。
操作步骤:
在 Jenkins Pipeline 中,可以通过 post
块来处理任务执行后的状态。你可以根据任务的结果(如成功、失败等)来控制是否执行后续任务。
示例:
pipeline {agent anystages {stage('Trigger Job A') {steps {script {def jobA = build job: 'A', wait: true // 触发任务A并等待其完成}}}}post {success {stage('Run chmod command') {agent { label 'node1' } // 在 'node1' 节点上运行steps {script {sh '执行自定义脚本or命令' // 仅当任务A成功时执行命令}}}}failure {echo 'Task A failed.....' // 任务A失败时跳过执行命令}}
}
- 在这个例子中,
post
块会根据任务 A 的执行结果来决定后续任务的执行。- 如果任务 A 成功,系统在
node1
节点上将执行执行自定义脚本or命令
。 - 如果任务 A 失败,系统将输出提示信息,并跳过操作。
- 如果任务 A 成功,系统在
Jenkins Pipeline 常用语法和概念
Jenkins Pipeline 使用了一种基于 Groovy 的 DSL(领域特定语言)来定义构建流程。尽管你可能不太熟悉 Pipeline 语法,了解一些常用的基础语法可以帮助你更好地编写和维护流水线任务。以下是一些常用的 Pipeline 语法和概念:
1. Pipeline 结构
一个简单的 Pipeline 通常包含以下结构:
pipeline {agent any // 指定在哪个节点上运行stages { // 定义阶段stage('Stage Name') { // 阶段名称steps { // 步骤// 执行的具体操作}}}
}
2. Agent
agent 用于指定在哪个节点上执行 Pipeline。可以使用 any 表示在任何可用的代理节点上运行,或使用具体的节点标签。
pipeline {agent { label 'node1' } // 在名为 'node1' 的节点上运行
}
3. Stages 和 Steps
- stages:用于定义构建流程的不同阶段。
- steps:在每个阶段中具体执行的操作,可以包括构建、测试、部署等。
stages {stage('Build') {steps {echo 'Building...'}}stage('Test') {steps {echo 'Testing...'}}
}
4. Post
post
块用于定义在 Pipeline 执行后根据结果(成功或失败)执行的步骤。
post {success {echo 'Pipeline succeeded!'}failure {echo 'Pipeline failed!'}
}
5. Environment
可以在 Pipeline 中定义环境变量,以便在整个 Pipeline 中使用。
pipeline {environment {MY_ENV_VAR = 'some_value'}stages {stage('Use Env Var') {steps {echo "The value of MY_ENV_VAR is: ${MY_ENV_VAR}"}}}
}
6. Script
在需要使用更复杂的 Groovy 逻辑时,可以使用 script
块。它允许你编写 Groovy 代码。
steps {script {def result = someFunction()if (result) {echo 'Success!'} else {error 'Something went wrong!'}}
}
7. Parallel
可以在同一阶段中并行执行多个步骤。
pipeline {stages {stage('Parallel Stage') {parallel {stage('Task 1') {steps {echo 'Running Task 1'}}stage('Task 2') {steps {echo 'Running Task 2'}}}}}
}
结论
通过 Jenkins,您可以选择不同的方式来实现任务依赖的自动化:
- 构建触发器:适合简单任务链,操作简单,但灵活性有限。
- Pipeline:适合复杂任务流程,灵活且功能强大,但需要编写脚本。
- Parameterized Trigger 插件:适合需要传递参数的任务,但需要额外的插件配置。
选择合适的方式取决于你的任务复杂度和使用需求。如果你需要更多的灵活性和控制,Jenkins Pipeline 是首选工具。而对于简单的任务触发,构建触发器是一个非常便捷的选择。
相关文章:
深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制
文章目录 前言1. 使用 “Build Trigger”(构建触发器)2. 使用 Jenkins Pipeline 实现任务触发3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件例子1:任务 A 成功后自动执行任务 B例子2:任务 A 成功后自动执行 Pipeline…...

无人机飞手执照培训为什么需要脱产学习?
无人机飞手执照培训需要脱产学习的原因主要基于以下几个方面: 一、知识体系的系统性与复杂性 无人机飞手培训涵盖的内容广泛且深入,包括无人机基础知识、飞行原理、气象学、法律法规等多个方面。这些知识体系相互关联,需要学员进行系统的学…...

PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程
目录 一、pgcrypto 简介1.1 安装 pgcrypto 扩展1.2 pgcrypto 包含的函数 二、用法①:对称加密(使用 AES、Blowfish 算法)2.1 密钥2.2 密钥偏移量 三、用法②:PGP加解密3.1 什么是PGP算法?3.2 使用 GPG 生成密钥对3.3 列…...
uniapp使用webView打开的网页有缓存如何解决(APP,微信小程序)
1、给webView的url增加时间戳 this.webviewUrl ${url}?t${new Date().getTime()}; // 添加时间戳 2、在nginx服务器上添加响应头,告诉浏览器不可以使用缓存 location / {root /opt/webs/lcdp-client/dist;index index.html index.htm;try_files $uri $uri/ /…...

HarmonyOS 模块化设计
1.HarmonyOS 模块化设计 模块化设计文档 应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,HarmonyOs组件化的使用,有利于模块之间的解…...

解决docker拉取readeck镜像报Error response from daemon: toomanyrequests问题
readeck 是一个内容中心,目前已支持中文翻译 这是本地化部署后的效果: 原命令为: docker run --rm -ti -p 8000:8000 -v readeck-data:/readeck codeberg.org/readeck/readeck:latest Unable to find image codeberg.org/readeck/readeck:la…...

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来
背景:win11,duilib应用,双显示器,两台分辨率相同,分别设置不同的缩放以后,应用运行以后,程序闪一下消失或者程序还在,但是UI显示不出来。 原因 窗口风格设置不合理,所以…...

零代码快速开发智能体 |甘肃旅游通
在互联网信息爆炸的时代,寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天,我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发,集合了丰富的旅游信息和个性化推荐功能&…...

【MATLAB源码-第187期】基于matlab的人工蜂群优化算法(ABC)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 Artificial Bee Colony(ABC)算法是一种模仿蜜蜂觅食行为的优化算法,它通过模拟蜜蜂群体的社会结构和行为来解决数学优化问题。本文将详细介绍ABC算法的基本原理、算法流程、以及在实际应用…...
qt获取本地语言
获取本地语言 #define QSTRING_TO_UTF8(str) std::string(str.toUtf8()) enum LanguageType {kLanguageTypeChinese,kLanguageTypeTradition,kLanguageTypeEnglish };QLocale qlLanguage;QString qstrLangCode qlLanguage.languageToString(qlLanguage.language());LOG(INFO)…...

【Spring篇】Spring中的Bean管理
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯Spring IOC容器 Ὢ…...

UV灯 VS LED灯,LED美甲灯是紫外线灯吗?
美甲灯是使甲油胶固化的重要工具,目前最常用的美甲灯一般是UV灯、LED灯以及CCFL灯。 一、不同的灯之间到底有什么区别呢?这次让我们好好看一下 UV灯: UV灯是紫外线灯管的简称。UV灯属于热阴极荧光灯,发出UVA(长波紫…...

得物App3D博物馆亮相“两博会”,正品保障助力消费体验升级
近日,2024中国体育文化博览会、中国体育旅游博览会(以下简称“两博会”)在苏州国际展览中心盛大开幕。本次展会汇聚了众多国内外体育文化、体育旅游领域的顶尖企业和品牌,共同展示体育产业的发展成果和最新趋势。在C展馆C21展位&a…...

rancher安装并快速部署k8s 管理集群工具
主机准备 准备4台主机 3台用于k8s集群 ,1台用于rancher 每台服务器新增配置文件 vi etc/sysctl.confnet.ipv4.ip_forward 1 刷新生效 sysctl –p 安装docker 安装的时候可以去github上检索rancher看看最新版本适配那个版本的docker,这里安装23.0.1…...

NVR接入录像回放平台EasyCVR视频融合平台语音对讲配置
国标GB28181视频平台EasyCVR视频融合平台可拓展性强、视频能力灵活,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析接入等功能。其中,在语音对讲方面,NVR接入录像回放平台目前…...
八、Linux 系统安全:守护你的数字堡垒
Linux 系统安全:守护你的数字堡垒 在当今数字化时代,Linux 系统因其稳定性、高效性和开源性而被广泛应用于服务器、工作站以及各种嵌入式设备中。然而,随着网络攻击的日益频繁和复杂,确保 Linux 系统的安全变得至关重要。本文将深…...

PTA数据库编程练习合集
10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句, 检索出product表中所有符合40 < Weight < 65的记录。 提示:请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名…...

分布式链路追踪-01初步认识SkyWalking
一 SkyWaling是什么? Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥…...

openpnp - 底部相机视觉识别CvPipeLine的参数bug修正
文章目录 openpnp - 底部相机视觉识别的CvPipeLine的参数bug概述笔记openpnp的视觉识别参数的错误原因备注补充 - 如果要直接改默认的底部视觉要注意END openpnp - 底部相机视觉识别的CvPipeLine的参数bug 概述 底部相机抓起一个SOD323的元件,进行视觉识别。 识别…...
C#从零开始学习(接口,强制转化和is)(7)
有时根据对象能做什么来分组,而不是根据他们继承的类.这就引入了接口 让无关的类做相同的动作 接口定义一个类必须实现的方法和属性 一个类实现一个接口时,必须包含接口中列出的所有方法和属性 向下强制转化 Appliance是CoffeeMaker的基类 Appliance powerConsumer new Co…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...