掌握这个Jenkins插件,离测试开发又近一步!

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 块的语法如下:

  1. stage('Stage Name') {

  2. steps {

  3. // Steps to be executed in this stage

  4. }

  5. }

其中,'Stage Name' 是该阶段的名称,可以任意指定。steps 块中包含了一系列要执行的任务步骤,可以使用 shell 命令、调用外部脚本等方式来执行具体操作。

3.例如,在以下 Pipeline 脚本中,定义了三个阶段:'Build'、'Test' 和 'Deploy',分别表示编译代码、运行测试和部署应用程序:

  1. pipeline {

  2. agent any

  3. stages {

  4. stage('Build') {

  5. steps {

  6. sh 'mvn clean package'

  7. }

  8. }

  9. stage('Test') {

  10. steps {

  11. sh 'mvn test'

  12. }

  13. }

  14. stage('Deploy') {

  15. steps {

  16. sh 'deploy.sh'

  17. }

  18. }

  19. }

  20. }

在这个例子中,每个阶段都包含了一个 steps 块,用于执行相应的任务。

例如,在 'Build' 阶段中,执行了 'mvn clean package' 命令来编译代码和打包应用程序;在 'Test' 阶段中,执行了 'mvn test' 命令来运行单元测试和集成测试;在 'Deploy' 阶段中,执行了一个名为 'deploy.sh' 的外部脚本用于部署应用程序。

4.通过定义多个 stage 块,可以将软件交付过程分解为多个阶段,并对每个阶段进行精细化管理和控制。同时,在 Jenkins UI 中也可以清晰地看到每个阶段的执行情况和状态,便于用户查看和排查问题。

Part 04.

配置Agent

在Pipeline脚本中,可以通过编写agent块来定义要在哪个节点上执行该Pipeline。例如,在一个具有Docker容器的代理节点上执行Pipeline。

通过以下示例配置Agent:

  1. agent {

  2. docker {

  3. image 'dockerimage'

  4. args '--name myname'

  5. }

  6. }

这里,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,您可以编写可重复、可读性强、易于管理的软件交付流水线,并以可视化的方式跟踪整个流程,从而提高交付质量和效率。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

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


http://www.ppmy.cn/ops/40604.html

相关文章

网络工程师练习题

网络工程师练习题 POP3服务器默认使用TCP协议的110端口。当客户端收到多个DHCP服务器的响应时,客户端会选择最先到达的地址作为自己的IP地址。ISP分配给某公司的地址块为199.34.76.64/28,则该公司得到的IP地址数是16。下面是路由表的4个表项,与地址220.112.179.92匹配的表项…

计算机网络 3.3OSI参考模型

第三节 OSI参考模型 一、认识OSI/RM 1.描述:定义了一个连接异种计算机的标准主体结构,给网络设计者提供了一个参考规范。 2.组织:国际标准化组织. 3.发展:1979年研究并提出了该国际标准。 4.分层原则: ①层次的划…

Stable Diffusion WebUI 绘画

配置环境介绍​ 目前平台集成了 Stable Diffusion WebUI 的官方镜像,该镜像中整合如下资源: GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本:v1.7.0 Python版本:3.1…

Ubuntu(Linux)Windows 网络连接问题

需求:实现Ubuntu和Windows系统间以太网连接。 Windows端口以太网配置选择IPv4,配置自己的IP,子网掩码不需要填,系统自动补全,默认网关不需要填。 Ubuntu系统为22.04,如果使用网络设置完成IPv4地址设置&…

代码随想录算法训练营第四十六天|139.单词拆分,多重背包,背包问题总结

目录 139.单词拆分思路代码 多重背包思路代码 背包问题总结 139.单词拆分 题目链接:704. 二分查找 文档讲解:代码随想录 视频讲解:动态规划之完全背包,你的背包如何装满?| LeetCode:139.单词拆分 思路 dp数…

SQLZOO:Self join

数据表:stops-route stops: id,name route: num,company,pos,stop Q1 How many stops are in the database. SELECT COUNT(id) FROM stops Q2 Find the id value for the stop Craiglockhart SELECT id FROM stops WHERE nameCraiglockhart Q3 Give the i…

【npm】解决npm包突然消失MODULE_NOT_FOUND

今天折腾新特性时需要升级nodejs,安装新版后npm离奇消失了。C:\Users\**用户名\AppData\Roaming\npm\node_modules下只有cnpm,没有npm的目录。重装nodejs也不好使。 机智如我,试了下cnpm -v是正常的,而且能看到nodejs,…

zabbix“专家坐诊”第238期问答

问题一 Q:请问一下 zabbix 如何监控服务器端口的出和入流量?就类似iftop这样的。 A:可以用snmp去监控。 问题二 Q:各位有什么工具能导出zabbix主机列表成execl格式吗? A:进mysql,到hostid,然…

分布式链路追踪:TracingFilter 改造增强设计

在分布式系统中,随着系统规模的扩大和复杂度的增加,排查和解决问题变得愈发困难。分布式链路追踪技术应运而生,它能够帮助开发者跟踪分布式系统中的请求调用链路,定位问题和优化性能。 在本文中,我们将深入探讨如何对…

APP在起步阶段可以对接广告平台,开展商业化广告变现吗?

广告变现已经成了APP开展商业化最快捷的方式之一,吸引了大批开发者进入,期望把流量转化成收益。 APP在起步阶段适合对接广告平台开展广告变现吗?AdSet结合丰富的变现经验,为开发者提供实用的商业化发展计划。 APP起步阶段的体量…

二进制转为HEX数组小工具

在使用RA8889时,JPG的解码只能从FLASH的DMA通道获取,那么如果要从远端、或者SD卡等处读取JPG图片出来显示怎么办? RA8889支持JPG图片硬解码,但数据流是从FLASH进行DMA读取的,然后再进行解码。因此这种情况下&#xff…

智能BI产品设计

BI概念 目录 BI概念 一:与BI相关的几个重要概念 二:数据仓库 VS 数据库 BI架构 一:数据分析通用流程 二:BI平台基本架构 可视化图形 一:如何选择可视化图形 二:数据展示形式 三:数据…

栈和队列的基础知识,C语言实现及经典OJ题

基础知识 一.栈 1.栈的概念 定义:堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。 压栈:向一个栈插入新…

深度学习之视觉特征提取器——AlexNet

AlexNet 参考资料: (1)ImageNet十年历任霸主之AlexNet - 知乎 (zhihu.com) (2)AlexNet - Wikipedia 引入 AlexNet在2012年以第一名在Top-1分类精度霸榜ImageNet,并超过第二名近10个百分点,…

Linux——MySQL5.7编译安装、RPM安装、yum安装

文章目录 Linux——MySQL5.7编译安装、RPM安装、yum安装一、编译安装二、RPM安装三、yum安装 Linux——MySQL5.7编译安装、RPM安装、yum安装 卸载mysql # 查看是否安装了mysql [rootcsq ~]# rpm -qa |grep mysql mysql-community-server-5.7.36-1.el7.x86_64 mysql-community-c…

工器具管理(基于若依)

文章目录 前言一、工器具管理项目总览 二、入库功能1. 前端1.1 界面展示1.2 具体操作实现1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具入库 三、领用功能1. 前端1.1 界面展示1.2 具体实现操作1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具领用 遇到的问题1. 同一页面展示…

HEVC/H.265视频编解码学习笔记–框架及块划分关系

前言 由于本人在学习视频的过程中,觉得分块单元太多搞不清楚其关系,因此本文着重记录这些分块单元的概念以及关联。 一、框架 视频为一帧一帧的图像,其编码的主要核心是压缩空间以及时间上的冗余。因此,视频编码有帧内预测和帧间…

新增柱线组合图、象限图,新增钉钉、飞书、企业微信客户端免密登录,DataEase开源数据可视化分析工具v2.6.0发布

2024年5月13日,人人可用的开源数据可视化分析工具DataEase正式发布v2.6.0版本。 这一版本的功能升级包括:图表方面,新增了柱线组合图、象限图;仪表板方面,支持批量拖拽字段,外部参数新增支持配置过滤组件&…

求四个整数中的最大值(函数)(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int a, b, c, d, max;//获取用户输入的数据&#xff1b;printf("请输入4个整数&#x…

【Python-爬虫】

Python-爬虫 ■ 爬虫分类■ 1. 通用网络爬虫&#xff1a;&#xff08;搜索引擎使用&#xff0c;遵守robots协议&#xff09;■ robots协议&#xff08;君子协议&#xff09; ■ 2. 聚集网络爬虫&#xff1a;自己写的爬虫程序 ■ urllib.request&#xff08;要导入的模块&#x…