深入解析 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…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...