深入解析 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…...
算法Day-8
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元…...
屏蔽小米电视广告的方法
小米电视那个广告,太多,时间太长,影响观看感受,经过处理,成功屏蔽了小米电视的广告,提升了观影体验。 手动添加AD域名到 hosts 列表 小米(红米)电视关闭开机AD屏蔽hosts方法。 在路由器的hosts中配置。 …...
C#,自动驾驶技术,ASAM OpenDRIVE BS 1.8.0 规范摘要与C# .NET Parser
本文介绍自动驾驶技术的标准之一《ASAM OpenDRIVE》1.8.0 版本的规范摘要,及北京联高软件开发有限公司实现的 C# 版本 xodr 文件(XML) Parser 源代码。 本文档是 ASAM e.V. 的版权财产。 在更改常规许可条款时,ASAM 允许不受限制地…...
玩转PyCharm:常用操作和快捷键
常用操作和快捷键 PyCharm为写Python代码提供了自动补全和高亮语法功能,这也是PyCharm作为集成开发环境(IDE)的基本功能。PyCharm的“File”菜单有一个“Settings”菜单项(macOS上是在“PyCharm”菜单的“Preferences…”菜单项&…...
HeterGCL 论文写作分析
HeterGCL 论文写作分析 这篇文章,由于理论证明较少,因此写作风格了polygcl是两种风格的。polygcl偏向理论的写作风格,而hetergcl就是实践派的风格 首先看标题,其的重点是Graph contrastive learning Framework。其重点是framewo…...
简单的windows java -jar 无法启动jar包解决方法
简单的windows java -jar 无法启动jar包解决方法 1. 问题 我们项目是使用nacos作为注册中心以及配置中心,我们本地使用idea 进行服务配置以及启动发现没有问题,然后我们的服务经过maven install 打包后发布到LINUX服务启动也没有问题,但是我…...
iPhone图片/照片/视频复制到win10系统的简单方法 - 照片导出
效果图 不同方法: 【推荐】爱思助手 一步到位....【不推荐,会错漏很多照片】 1) 开始,打开开始菜单最后一个“照片” 2) 打开外部设备“Apple iPhone” 3) 全选,“添加xx项”,选择本地...
ctfshow-文件上传-151-161
CTFshow文件上传 PHP文件上传:1、代码思路 黑名单是设置不能通过的用户,黑名单以外的用户都能通过。 phtml、pht、php3、php4、php5后缀都会按做php文件执行,且不在黑名单内。 2、绕过 找漏网之鱼:cer、php3、php4、phtml等。 大小写绕…...
【Windows】Microsoft Office 的 .docx .xlsx .pptx 等文件图标消失,变成空白图标
问题描述 在重新安装 Microsoft Office 后,发现 .docx、.xlsx、.pptx 等文件的图标消失,变成一个空白的图标。 原因分析 可能是由于Office组件的快捷方式和图标的注册表损坏所导致的。注册表是Windows操作系统中用来存储系统和应用程序配置信息的一个重…...
场景化运营与定制开发链动 2+1 模式 S2B2C 商城小程序的融合
摘要:本文深入探讨了场景化运营的重要性以及其在商业领域的广泛应用。通过分析电梯广告、视频网站和电商产品的场景化运营方式,引入关键词“定制开发链动 21 模式 S2B2C 商城小程序”,阐述了如何将场景化运营理念融入到该小程序的开发与推广中…...
网站设计培训成都/seo关键词外包
由于网络原因,访问国外的pip源超级慢,因此可将源改为国内源(都是pipy官网的镜像),就能体验到流的飞起的速度了 可临时修改,也可永久修改 临时修改:在后边加个-i参数指定pip源,如下…...
拼多多网站怎么做/企业网站建设推广
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和…...
wordpress分页条数/网站营销软文
需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作在数组里不是很方便。所以想借用DataTable做数据源。 最简单的方法就是手动建一个…...
网站公司说我们做的网站服务器不够用/企拓客软件多少钱
为什么要用HDFS 一台服务器存不下数据,需要多台服务器。多台服务器上的数据需要一个系统来组织和管理。 tip:HDFS、NTFS是不同的文件管理系统 HDFS的定义 HDFS是一个分布式的文件系统,通过目录树来定位文件 HDS的使用场景 一次写入&…...
计算机做网站难吗/东莞seo建站咨询
CtrlShift Enter,语句完成“!”,否定完成,输入表达式时按 “!”键CtrlE,最近的文件CtrlShiftE,最近更改的文件ShiftClick,可以关闭文件Ctrl[ OR ],可以跑到大括号的开头…...
哪个网站做ic外单好/济南今日头条最新消息
点击左上方蓝字关注我们11月7日飞桨领航团杭州站和太原理工大学站顺利进行,开发者们围坐一起,与行业资深专家对话,感受深度学习的魅力,来一起回顾一下~网易云音乐机器学习平台化赋能机器学习平台技术架构包含资源层、调…...