Jenkins Pipeline应用实践
Jenkins Pipeline是一种可编程的、可扩展的持续交付管道,允许您使用脚本来定义整个软件交付过程。
以下是使用Jenkins Pipeline创建和配置流水线的基本步骤。
Part 01. 创建一个Pipeline Job
在Jenkins中创建一个新的"Pipeline"类型的Job。

以下是在Jenkins中创建一个Pipeline Job的详细步骤:
1.登录到Jenkins系统并转到主页。
2.单击“New Item”菜单,选择“Pipeline”选项并指定Job名称。

3.在新建的Job页面中,在“Pipeline”部分中找到“Definition”选项,选择“Pipeline script”。

4.编辑Pipeline脚本:在“Script”区域输入要使用的Pipeline脚本。您可以手动编写脚本,也可以使用外部存储库或特定的DSL语言编写脚本。
5.配置Pipeline参数(可选):您可以通过单击“Add Parameter”按钮来添加参数,例如字符串、布尔值、文件等。这些参数可以在构建过程中使用,并且利于您编写更灵活的Pipeline脚本。
6.指定“Agent”:在Pipeline脚本中,您需要定义在哪个节点上运行该Pipeline。
您可以使用默认的“Any”节点,也可以使用其他节点,如特定操作系统、Docker容器、云平台等。在Pipeline Job设置页面的“Pipeline”部分中,可以为每个阶段指定不同的代理。
7.保存和运行:单击“Save”按钮以保存Pipeline Job。您可以点击 “Build Now”按钮开始立即构建,或者在后续的Jenkins Job 页面中运行Pipeline Job。
总之,创建Pipeline Job需要编辑Pipeline脚本、指定代理节点、配置参数等。
通过Jenkins Pipeline,您可以轻松创建可扩展、灵活和可重复的软件交付流水线,并以可视化方式实时跟踪整个过程。
Part 02. 编写Pipeline脚本
在Pipeline Job中,选择“Pipeline script”选项卡,并输入Pipeline脚本,该脚本描述了整个软件交付过程。

在 Jenkins Pipeline 中编写 Pipeline 脚本需要完成以下几个步骤:
1.定义 Pipeline 块:Pipeline 块是 Pipeline 脚本的根节点,定义了整个软件交付过程。
例如:pipeline { agent any stages { } }。
2.定义 Agent 块:Agent 块定义了 Pipeline 运行的代理节点。可以使用默认的 “any” 节点或者指定特定节点、操作系统、Docker 容器等。
例如:pipeline { agent { docker { image ‘maven:3-alpine’ args ‘-v /root/.m2:/root/.m2’ } } stages { } }。
3.定义 Stage 块:Stage 块表示 Pipeline 的阶段,每个阶段表示软件交付过程中的一个特定部分。在 Stage 块中可以定义一系列 Step 块。
例如:pipeline { stages { stage(‘Build’) { steps { } } stage(‘Test’) { steps { } } stage(‘Deploy’) { steps { } } } }。
4.定义 Step 块:Step 块表示 Pipeline 中的操作步骤,每个步骤执行一个特定的任务。例如,从代码库中拉取代码、编译代码、运行单元测试、打包应用程序等。可以使用 shell 命令、调用外部脚本等方式来执行具体操作。
例如:pipeline { stages { stage(‘Build’) { steps { sh ‘mvn clean package’ } } stage(‘Test’) { steps { sh ‘mvn test’ } } stage(‘Deploy’) { steps { } } } }。
5.添加变量和条件:Pipeline 脚本还支持添加变量、条件语句等高级功能,以实现更灵活的控制流程。例如,可以定义环境变量、判断分支等。
在编写 Pipeline 脚本时,需要注意以下几点:
1.Pipeline 脚本是基于 Groovy 编写的脚本语言,因此需要了解 Groovy 的语法和特性。
2.Pipeline 脚本应该具有良好的可读性和可维护性,可以使用注释、格式化等方式来提高代码质量。
3.Pipeline 脚本应该尽量避免复杂逻辑和过长的代码块,在必要时可以将代码拆分为多个函数或者引用外部库。
总之,编写 Pipeline 脚本是创建可重复、可读性强、易于管理的软件交付流水线的关键步骤,需要认真设计和测试,以确保软件交付过程的质量和效率。
Part 03. 定义Stage
Pipeline是由多个阶段(Stages)组成的,每个阶段表示软件交付过程中的一个特定部分。例如,构建代码、运行测试、部署到服务器等。
在Pipeline脚本中,可以通过编写stage块来定义这些阶段。

1.在 Pipeline 脚本中,通过编写 stage 块来定义每个阶段。每个 stage 块可以包含一个或多个步骤(Steps),用于执行特定的任务。
例如,在构建代码阶段,需要执行编译、静态检查等操作;在测试阶段,需要运行单元测试、集成测试等。在 Pipeline 脚本中,可以使用 stage 块对这些任务进行组织和管理。
2.stage 块的语法如下:
stage('Stage Name') {steps {// Steps to be executed in this stage}
}
其中,‘Stage Name’ 是该阶段的名称,可以任意指定。steps 块中包含了一系列要执行的任务步骤,可以使用 shell 命令、调用外部脚本等方式来执行具体操作。
3.例如,在以下 Pipeline 脚本中,定义了三个阶段:‘Build’、‘Test’ 和 ‘Deploy’,分别表示编译代码、运行测试和部署应用程序:
pipeline {agent anystages {stage('Build') {steps {sh 'mvn clean package'}}stage('Test') {steps {sh 'mvn test'}}stage('Deploy') {steps {sh 'deploy.sh'}}}
}
在这个例子中,每个阶段都包含了一个 steps 块,用于执行相应的任务。
例如,在 ‘Build’ 阶段中,执行了 ‘mvn clean package’ 命令来编译代码和打包应用程序;在 ‘Test’ 阶段中,执行了 ‘mvn test’ 命令来运行单元测试和集成测试;在 ‘Deploy’ 阶段中,执行了一个名为 ‘deploy.sh’ 的外部脚本用于部署应用程序。
4.通过定义多个 stage 块,可以将软件交付过程分解为多个阶段,并对每个阶段进行精细化管理和控制。同时,在 Jenkins UI 中也可以清晰地看到每个阶段的执行情况和状态,便于用户查看和排查问题。
Part 04. 配置Agent
在Pipeline脚本中,可以通过编写agent块来定义要在哪个节点上执行该Pipeline。例如,在一个具有Docker容器的代理节点上执行Pipeline。
通过以下示例配置Agent:
agent {docker {image 'dockerimage'args '--name myname'}
}
这里,agent代表Jenkins代理,而docker代表这个代理中启动的容器,image代表要使用的docker镜像,args代表创建容器实例时所使用的参数(如-指定容器的名称)。
编写完成后,我们就可以在这个节点上运行这个Pipeline了。
Part 05. 添加Step
在每个Stage中,需要定义一系列步骤(Steps),每个步骤执行一个特定的任务。
例如,从代码库中拉取代码、编译代码、运行单元测试、打包应用程序等。在Pipeline脚本中,可以通过编写step块来定义这些步骤。
Step块定义步骤,语法如下:step {引用名称}: {插件类型}:{插件动作}。其中,引用名称是可选的,用于在步骤中引用此步骤的ID。
插件类型定义步骤使用的Jenkins插件,而插件动作定义步骤要执行的操作。
示例:step(‘build’) { sh ‘mvn clean package’ } 上述示例定义了一个名为“build”的步骤,用于清理和打包Maven项目。

Part 06. 运行Pipeline
保存Pipeline Job并开始构建,Jenkins会按照Pipeline脚本中定义的步骤和阶段顺序执行软件交付过程。

1.打开Jenkins控制台,在主UI的“新建项目”下,选择“构建一个自由格式的Pipeline”。
2.输入项目名称和描述,点击“保存”按钮。
3.选择“管道脚本从SCM”,显示SCM配置页面,添加脚本提取源,如Github等,以便Jenkins能够获取Pipeline脚本。

4.选择Pipeline语言,用于编写脚本。几种常用的Pipeline语言是Groovy、Python和Shell。
5.测试脚本,通过系统输出或日志追踪调试Pipeline脚本,检查它的行为是否与预期相符合。
6.完成Pipeline脚本的编写,保存Pipeline Job,点击“Build Now”按钮,开始构建。

7.Jenkins会列出每个步骤和工作,并在控制台中显示输出。此外,用户可以在控制台日志中搜索字符串,检查步骤是否成功执行,如果失败,用户可以编辑脚本并重新构建,以纠正失败的节点。
8.构建完成后,可以检查构建状态以查看每个步骤的成功和失败。检查步骤输出可以确保Pipeline Job可以被正确的执行。
Part 08.查看Pipeline输出
在Jenkins UI中,您可以查看Pipeine Job的构建历史记录和每个构建的输出日志。
这些输出包括每个阶段和步骤的状态、持续时间、错误信息等等。
您还可以使用CLI来查看Pipeine的输出日志,使用以下命令:
列出所有构建:jb jobs -w
显示构建详情:jb job# -b
您也可以使用REST API获取构建详细信息:GET /job///api/json
您使用此API可以获得每个阶段和步骤的构建日志以及它们的状态信息。
另外,您还可以使用Jenkins UI上的Blue Ocean功能,允许您查看每个阶段及其产生的输出和可视化报告。

总之,使用Jenkins Pipeline,您可以编写可重复、可读性强、易于管理的软件交付流水线,并以可视化的方式跟踪整个流程,从而提高交付质量和效率。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
Jenkins Pipeline应用实践
Jenkins Pipeline是一种可编程的、可扩展的持续交付管道,允许您使用脚本来定义整个软件交付过程。 以下是使用Jenkins Pipeline创建和配置流水线的基本步骤。 Part 01. 创建一个Pipeline Job 在Jenkins中创建一个新的"Pipeline"类型的Job。 以下是在Je…...
给经销商开发信怎么写?做商务邮件的技巧?
如何写给经销商的开发信?代理商的外贸开发信模板? 一封令人信服的经销商开发信能够在商业世界中起到至关重要的作用。蜂邮EDM将为您介绍如何撰写一封引人注目且有说服力的经销商开发信,确保您的合作伙伴对您的业务充满信心。 经销商开发信&…...
测试架构师必备技能-Nginx安装部署实战
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的免费开源Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。在高并发访问的情况下,Nginx是Apache服务器不错的替代品。官网数据显示每秒TPS高达50W左右。本文为读者朋…...
linux 账号管理实例一,stdin,passwd复习
需求 账号名称全名次要用户组是否可登录主机密码 myuser1 1st usermygroup1yespasswordmyuser22st usermygroup1yespasswordmyuser33st user无nopassword 第一:用户,和用户组创建,并分配有效用户组(初始用户组是passwd里…...
Spring-jdbcTemplate-配置数据库连接池,配置文件方式beans.xml
1、jdbc.properties jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql:///studb jdbc.userroot jdbc.pwd123456 2、beans.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&…...
ElasticSearch之cat component templates API
命令样例如下: curl -X GET "https://localhost:9200/_cat/component_templates?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下: name …...
FLASK博客系列7——我要插入数据库
我们来继续上次的内容,实现将数据插入数据库。 我们先更改下models.py,由于上次笔误,把外键关联写错了。在这里给大家说声抱歉。不过竟然没有小伙伴发现。 models.py from app import dbclass User(db.Model): # 表名将会是 user࿰…...
HarmonyOS应用开发者高级认证(题库)
判断题 每一个自定义组件都有自己的生命周期 正确Worker线程不支持UI操作 正确首选项preferences是以key-value形式存储数据,其中key是可以重复的。 错误HarmonyOS应用可以兼容OpenHarmony生态 正确使用端云一体化开发,无需自己搭建服务器 正确只要…...
软件建模与文档:架构师怎样绘制系统架构蓝图?
Java全能学习面试指南:https://javaxiaobear 首先,请你设想这样一个场景:如果公司安排你做架构师,要你在项目开发前期进行软件架构设计,你该如何开展你的工作?如何输出你的工作成果?如何确定你的…...
ChatGLM2-6B微调过程说明文档
参考文档: ChatGLM2-6B 微调(初体验) - 知乎 环境配置 下载anaconda,版本是Anaconda3-2023.03-0-Linux-x86_64.sh,其对应的python版本是3.10,试过3.7和3.11版本的在运行时都报错。 执行下面的命令安装anaconda sh Anaconda3-202…...
Django之中间件
引入 1、Django自带7个中间件,每个中间件都有各自的功能 2、django能够自定义中间件 3、使用场景: 1. 全局身份校验 2. 全局用户权限校验 3. 全局访问频率的校验 ...... 【1】什么是中间件 Django中间件是一个轻量级、可重用的组件,用于处理…...
sql中的left join, right join 和inner join,union 与union all的用法
left join, right join 和inner join:这些都是SQL中用来连接两个或多个表的操作。 union,union all:用于合并两个或多个 SELECT 语句的结果。 但是有时候,对于Select出来的结果集不是很清楚。 假设我们有两张表。pers…...
Linux:strace 简介
文章目录 1. 前言2. 什么是 strace ?3. 使用 strace3.1 追踪指定进程3.1.1 通过程序名追踪进程3.1.2 通过 进程 ID (PID) 追踪程序3.1.3 追踪 子进程 或 线程 3.2 系统调用情况统计3.3 追踪过滤3.3.1 追踪指定的系统调用集合3.3.2 追踪对指定文件句柄集合操作的系统调用3.3.3 …...
【深度学习】神经网络训练过程中不收敛或者训练失败的原因
在面对模型不收敛的时候,首先要保证训练的次数够多。在训练过程中,loss并不是一直在下降,准确率一直在提升的,会有一些震荡存在。只要总体趋势是在收敛就行。若训练次数够多(一般上千次,上万次,…...
el-table修改表格每行的高度包含表头
需求: 需要修改el-table表格每行的高度为54px,并且包含表头。 .el-table {tr {height: 54px;td {padding: 0;}th {padding: 0;}} }如果样式没有生效,可能.el-table需要加上样式穿透...
常用数据存储格式介绍:Excel、CSV、JSON、XML
在现代数字时代,数据经过提炼后可以推动创新、简化运营并支持决策流程。然而,在提取数据之后,并将其加载到数据库或数据仓库之前,需要将数据转化为可用的数据存储格式。本文将介绍开发者常用的4种数据存储格式,包括 Ex…...
kafka 集群 KRaft 模式搭建
Apache Kafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序 Kafka 官网:https://kafka.apache.org/ Kafka 在2.8版本之后,移除了对Zookeeper的依赖,将依赖于ZooKeeper的控制器…...
如何进行有效的移动应用测试?
1、识别关键功能: 对于移动应用测试,首先要了解应用的需求和功能规格,确定哪些功能是最关键的。 关键功能通常是用户最常用的功能,对应用的成功和用户体验至关重要。 2、设定测试目标和用例: 针对每个关键功能,设置具体的测试目…...
飞翔的鸟小游戏
第一步是创建项目 项目名自拟 第二步创建个包名 来规范class 再创建一个包 来存储照片 如下 package game; import java.awt.*; import javax.swing.*; import javax.imageio.ImageIO;public class Bird {Image image;int x,y;int width,height;int size;double g;double t;…...
吴恩达《机器学习》10-1-10-3:决定下一步做什么、评估一个假设、模型选择和交叉验证集
一、决定下一步做什么 在机器学习的学习过程中,我们已经接触了许多不同的学习算法,逐渐深入了解了先进的机器学习技术。然而,即使在了解了这些算法的情况下,仍然存在一些差距,有些人能够高效而有力地运用这些算法&…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
