深入解析 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…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
