Jenkins的pipeline Script的 每个组件的详细讲解
在Jenkins的Pipeline脚本中,各个组件的配置和Groovy的一些常用函数起到了决定性的作用,帮助开发人员控制自动化流程的执行。以下是对Jenkins Pipeline的主要组件和Groovy常用函数的详细讲解:
1. Jenkins Pipeline主要组件
1.1 agent
- 功能:定义在哪台节点上执行Pipeline任务。
- 语法:
- agent any:表示可以在任何可用节点上执行。
- agent none:表示不在任何节点上执行,适合在 stages 中单独指定 agent。
- agent { label ‘label_name’ }:在特定标签的节点上执行。
- agent { docker { image ‘image_name’ } }:使用特定的Docker镜像来执行Pipeline。
1.2 environment
- 功能:设置环境变量,可以在整个Pipeline中使用。
- 语法:
environment {ENV_VAR = 'value'PATH = "/usr/bin:/usr/local/bin:${PATH}"
}
1.3 options
-
功能:配置Pipeline的高级选项,比如超时设置、丢弃旧的构建等。
-
常见配置:
- timeout(time: 1, unit: ‘HOURS’):将Pipeline的执行限制在1小时内。
- disableConcurrentBuilds():防止并发构建。
- buildDiscarder(logRotator(numToKeepStr: ‘5’)):只保留5个构建记录。
-
实例
options {timestamps()timeout(time: 4, unit: 'HOURS')buildDiscarder(logRotator(artifactDaysToKeepStr: '100', artifactNumToKeepStr: '100', daysToKeepStr: '200', numToKeepStr: '200'))copyArtifactPermission('/DS_BFFD/FFGFGGDY/ssffgd_ddfddf-MT');} 1. timestamps() 功能:在构建日志中添加时间戳。 作用:每条日志消息前都会显示时间戳,方便用户查看构建过程中的时间信息。 2. timeout(time: 4, unit: 'HOURS') 功能:设置构建的超时时间。 参数: time: 4:表示超时时间为 4。 unit: 'HOURS':表示时间单位为小时。 作用:如果构建在 4 小时内没有完成,Jenkins 将自动终止该构建。这有助于防止构建长时间挂起。 3. buildDiscarder(logRotator(...)) 功能:设置构建的保留策略。参数:logRotator 是一个用于控制构建日志和工件保留的类,具体参数如下:artifactDaysToKeepStr: '100':保留构建工件的天数,设置为 100 天。artifactNumToKeepStr: '100':保留的构建工件数量,设置为 100 个。daysToKeepStr: '200':保留构建日志的天数,设置为 200 天。numToKeepStr: '200':保留的构建日志数量,设置为 200 个。 作用:如果构建在 4 小时内没有完成,Jenkins 将自动终止该构建。这有助于防止构建长时间挂起。 4. buildDiscarder(logRotator(...)) 功能:设置构建的保留策略。 参数:logRotator 是一个用于控制构建日志和工件保留的类,具体参数如下:artifactDaysToKeepStr: '100':保留构建工件的天数,设置为 100 天。artifactNumToKeepStr: '100':保留的构建工件数量,设置为 100 个。daysToKeepStr: '200':保留构建日志的天数,设置为 200 天。numToKeepStr: '200':保留的构建日志数量,设置为 200 个。 作用:这个选项帮助管理 Jenkins 中的构建历史,确保不会无限制地保留构建日志和工件,从而节省存储空间。 5. copyArtifactPermission('/DS_BFFD/FFGFGGDY/ssffgd_ddfddf-MT') 功能:设置对特定路径的复制工件的权限。 参数:'/DS_BFFD/FFGFGGDY/ssffgd_ddfddf-MT' 是一个路径,表示允许从该路径复制工件。 作用:这个选项确保在构建过程中可以从指定的路径复制工件,通常用于多项目构建或需要共享工件的场景。```
-
总结
- options 块用于设置构建的全局选项,包括时间戳、超时、构建日志和工件的保留策略,以及复制工件的权限。
- buildDiscarder(logRotator(…)) 选项帮助管理构建历史,确保不会占用过多的存储空间。
- copyArtifactPermission 选项确保在构建过程中可以从指定路径复制工件。
这些选项的设置有助于提高 Jenkins 构建的可管理性和可维护性。
1.4 parameters
- 功能:定义构建时用户可以输入的参数。
- 常见配置:
- string(name: ‘ENV’, defaultValue: ‘dev’, description: ‘Environment to deploy’):文本输入。
- booleanParam(name: ‘DEPLOY’, defaultValue: true, description: ‘是否部署’):布尔值输入。
- choice(name: ‘BRANCH’, choices: [‘dev’, ‘qa’, ‘prod’], description: ‘分支选择’):选择输入。
1.5 tools
- 功能:指定运行Pipeline时需要的工具(如JDK、Maven)。
- 常见配置:
tools {jdk 'JDK8'maven 'Maven 3.6.3'}
1.6 triggers
- 功能:定义触发Pipeline的条件,比如定时执行或代码变更。
- 常见配置:
- cron(‘H 4/* 0 0 1-5’):按照特定时间执行。
- pollSCM(‘H/5 * * * *’):每5分钟检查SCM是否有代码变更。
- upstream(upstreamProjects: ‘project-name’, threshold: hudson.model.Result.SUCCESS):当指定的上游项目成功时触发。
1.7 stages
- 功能:包含具体的构建步骤,通常分成若干 stage。
- 语法:
stages {stage('Build') {steps {echo 'Building...'}}stage('Test') {steps {echo 'Testing...'}}
}
1.8 post
- 功能:定义在构建结束时执行的操作,如清理资源、通知等。
- 常见选项:
- always:无论成功或失败都执行。
- success:构建成功时执行。
- failure:构建失败时执行。
- unstable:构建结果不稳定时执行。
- 语法:
post {always {echo 'Cleaning up...'}success {echo 'Success!'}failure {echo 'Build failed!'}
}
2. Groovy常用函数
2.1 发送邮件的实现
Jenkins提供了 emailext 插件,用于发送构建通知邮件。可以自定义 body 内容,格式为HTML或纯文本。以下是一个带HTML格式的邮件发送示例:
post {failure {emailext (subject: "构建失败通知 - ${env.JOB_NAME} #${env.BUILD_NUMBER}",body: """<h3>构建失败通知</h3><p>项目名称: ${env.JOB_NAME}</p><p>构建编号: ${env.BUILD_NUMBER}</p><p>触发原因: ${currentBuild.description}</p><p>详情请查看 <a href="${env.BUILD_URL}">构建日志</a></p>""",recipientProviders: [[$class: 'DevelopersRecipientProvider']])}
}
2.2 sh 和 bat 执行系统命令
在不同操作系统中执行Shell或Batch命令。
Linux/macOS:
sh 'echo "Hello from Linux"'
Windows:
bat 'echo Hello from Windows'
2.3 catchError
用于在步骤中捕获错误并继续执行,以确保流程不中断。
catchError(buildResult: 'UNSTABLE') {sh 'exit 1' // 即使失败,也将当前构建标记为UNSTABLE而不是FAILED
}
2.4 archiveArtifacts
用于归档构建生成的文件,便于后续的访问。
archiveArtifacts artifacts: '**/target/*.jar', allowEmptyArchive: true
2.5 readFile 和 writeFile
用于在Pipeline中读取或写入文件内容。
def content = readFile 'myfile.txt'
writeFile file: 'output.txt', text: content
总结
Jenkins Pipeline脚本的灵活性体现在各个组件的组合使用上,如通过 agent 指定执行节点,parameters 实现构建参数化,post 中加入错误通知等。而Groovy的丰富函数扩展,如 emailext、archiveArtifacts 等,使得Pipeline的配置更加灵活和便捷。通过这些配置和Groovy函数的掌握,能更好地构建、监控和管理CI/CD流程。
相关文章:
Jenkins的pipeline Script的 每个组件的详细讲解
在Jenkins的Pipeline脚本中,各个组件的配置和Groovy的一些常用函数起到了决定性的作用,帮助开发人员控制自动化流程的执行。以下是对Jenkins Pipeline的主要组件和Groovy常用函数的详细讲解: 1. Jenkins Pipeline主要组件 1.1 agent 功能&…...
Tomcat 和 Netty 的区别及应用场景分析
在 Java Web 开发中,Tomcat 和 Netty 都是常见的网络框架,它们各自有着不同的设计理念和适用场景。本文将通过详细的对比和实际场景示例,帮助你理解 Tomcat 和 Netty 在功能、性能、架构等方面的差异,帮助你在实际开发中做出更合理…...

6.C操作符详解,深入探索操作符与字符串处理
C操作符详解,深入探索操作符与字符串处理 C语言往期系列文章目录 往期回顾: C语言是什么?编程界的‘常青树’,它的辉煌你不可不知VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦C语言入门:解锁基础…...

生数科技发布 Vidu 1.5 新版本,引领视频大模型新潮流
在国内视频大模型领域,生数科技一直以创新和突破而备受瞩目。近日,生数科技再度发力,发布了 Vidu 1.5 新版本,为视频创作带来了全新的变革与机遇。 Vidu 1.5 新版本在多个方面展现出了卓越的性能和创新的特点。首先,它…...
CentOS 7 aarch64停止更新后安装gcc8 —— 筑梦之路
CentOS 7.9非X86架构系统生命周期结束后(2024-6-30)配置在线可用yum源 —— 筑梦之路_centos7.9 arm-CSDN博客 以前的做法 sudo yum install centos-release-scl-rh sudo yum install devtoolset-8-buildsudo yum install devtoolset-8-gdb sudo yum i…...

WPF下 DataGrid加入序号列
先上代码: <DataGrid Name"DGV" AutoGenerateColumns"False" Grid.Row"0" Grid.Column"0" HorizontalGridLinesBrush"RoyalBlue" VerticalGridLinesBrush"Tomato" CanUserAddRows"False&qu…...
iOS UI 自动化 手势右滑退出当前页面
1、TouchAction from appium.webdriver.common.touch_action import TouchAction# 获取屏幕的宽度和高度 screen_width driver.get_window_size()["width"] screen_height driver.get_window_size()["height"]# 定义滑动的起点和终点坐标 start_x 0 en…...
《MySQL 实战教程:从零开始到高手进阶》
当然可以。下面是一篇关于MySQL的学习指南,它适合初学者到中级用户,涵盖了MySQL的基础知识、安装步骤、基本命令以及一些高级功能。 MySQL 学习指南 1. 了解 MySQL MySQL 是一个关系型数据库管理系统(RDBMS),由瑞典…...

第27天 安全开发-PHP应用TP 框架路由访问对象操作内置过滤绕过核心漏洞
时间轴 演示案例 TP 框架-开发-配置架构&路由&MVC 模型 TP 框架-安全-不安全写法&版本过滤绕过 TP 框架-开发-配置架构&路由&MVC 模型 参考: https://www.kancloud.cn/manual/thinkphp5_1 1、配置架构-导入使用 去thinkphp官网可以看到&…...

应用系统开发(12) Zync中实现数字相敏检波
在 Xilinx Zynq 系列(如 Zynq-7000 或 Zynq UltraScale+)中实现数字相敏检波(DSP,Digital Synchronous Detection)可以通过硬件(PL部分,FPGA逻辑)和软件(PS部分,ARM Cortex-A 处理器)的协同工作来实现。以下是一个详细的设计方法,包括基本原理和 Zynq 的实现步骤。…...

栈Stack和队列Queue
目录 一、栈 (1)用数组实现 (2)用单链表实现 (3)用标注尾结点的单链表实现 (4)用双向链表实现 2、栈的实际应用 (1)改变元素的序列 (2&am…...

uniapp 微信小程序地图标记点、聚合点/根据缩放重合点,根据缩放登记显示气泡marik标点
如图,如果要实现上方的效果: 上方两个效果根据经纬度标记点缩放后有重复点会添加数量 用到的文档地址https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addMarkers.htmlMapContext.addMarkers(Object object) 添加标记点Ma…...

Percona XtraBackup备份docker版本mysql 5.7
my.cnf配置文件 [client] default_character_setutf8[mysqld] # 数据存储目录(必须手动指定) datadir/var/lib/mysql/data# 字符集 collation_server utf8_general_ci character_set_server utf8 # 二进制日志 server-id1 log_bin/var/log/mysql/binl…...
C++:关联式容器的介绍及map与set的使用
我们之前已经学习过string,vector,list,queue,priority_queue等容器,这些容器我们统称为序列式容器,因为它们的数据的逻辑结构呈线性。因为这些容器中存储的数据即便二者之间发生交换,也不会对原有的容器结构造成太大影响。 但上篇文章我们介…...
一文说清:Linux下C++静态库的封装和调用
一 引言 《一文说清:windows下C静态库的封装和调用》中说了: 静态库允许开发者在多个项目中复用代码,减少重复劳动,并增强程序的可维护性。并讲述了windows环境下创建、封装以及调用C静态库的过程。 本文则描述了,如…...

【Java 学习】数据类型、变量、运算符、条件控制语句
Java基础语法 1. 打印 Hello World !2. 变量类和数据类型2.1 什么是变量?什么是数据类型?2.2 常用的数据类型2.3 使用变量2.4 String 类数据类型2.4.1 String 类基本概念2.4.2 String 类的使用 3. 运算符3.1 算数运算符3.2 关系运算符3.3 逻辑运算符3.4 …...
【软考】系统架构设计师-数据库设计基础
数据库核心考点 三级模式-两级映射 外模式--视图 概念模式--表(模式、基本表) 内模式--物理文件 数据库设计 概念结构设计:属性冲突、命名冲突、结构冲突 逻辑结构设计:关系模式(层次模型、网络模型)…...
【Jmeter相关】
Jmeter 可以作为接口测试问题,也会涉及到性能相关的问题 一、JMeter中用户定义的变量(User Defined Variables)和用户参 数(User Parameters)的区别是什么? 在JMeter中都是用于定义和存储测试数据的方法,但它们有一…...
拍立淘按图搜索API接口系列,返回示例图参考
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解…...

OSG开发笔记(三十二):深入理解相机视口、制作支持与主视图同步变换旋转的相机HUD
若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/143852695 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 长沙红胖子Qt…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...