【Linux】Jenkins Pipeline流水线详解及基于Jenkins流水线实现自动更新项目(实战)

在这里插入图片描述

👨‍🎓博主简介

  🏅CSDN博客专家
  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 一、Pipeline 流水线的简介
    • 1.1 什么是Jenkins的流水线?
    • 1.2 Pipeline中几个重要概念:
    • 1.3 Pipeline优势
  • 二、Pipeline流水线 简单的构建
    • 2.1 jenkinsfile 必备的五个组成部分
    • 2.2 Jenkins 上创建一个 Pipeline 流水线任务
      • 2.2.1 Jenkins 上安装Blue Ocean插件
      • 2.2.2 新建一个 Pipeline 任务
      • 2.2.3 编辑流水线
      • 2.2.4 保存并构建流水线
  • 三、Pipeline流水线 声明式语法解析
  • 四、【进阶】基于Pipeline 流水线实现项目的更新
    • 4.1 熟悉项目更新流程
    • 4.2 基于上面创建的Pipeline流水线任务修改(可自行重新创建)
    • 4.3 保存并构建流水线
    • 4.5 查看服务是否正常
  • 五、相关专栏
  • 六、相关文章

  之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。

  Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护的。

所以Pipeline相对自由风格或者其他的项目风格更容易操作。

  pipline是帮助Jenkins实现CI到CD转变的重要角色,是运行在jenkins2.X版本的核心插件,简单来说Pipline就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任务可视化。

一、Pipeline 流水线的简介

1.1 什么是Jenkins的流水线?

Jenkins的流水线(Pipeline)是一套插件,用于实现和集成持续交付流水线到Jenkins。流水线可以自动表达从版本控制向用户和客户获取软件的进程。具体来说,软件的每次变更(在源代码控制中提交)在被释放的路上都会经历一个复杂的过程,这个过程包括以一种可靠且可重复的方式构建软件,并通过多个测试和部署阶段来开发构建好的软件。

对Jenkins流水线的定义被写在一个文本文件中(称为Jenkinsfile),该文件可以被提交到项目的源代码控制仓库,这是“流水线即代码”的基础。将CD流水线作为应用程序的一部分,像其他代码一样进行版本化和审查。 创建 Jenkinsfile并提交它到源代码控制中提供了一些即时的好处:

  • 自动地为所有分支创建流水线构建过程并拉取请求。
  • 在流水线上代码复查/迭代 (以及剩余的源代码)。
  • 对流水线进行审计跟踪。
  • 该流水线的真正的源代码, 可以被项目的多个成员查看和编辑。

While定义流水线的语法, 无论是在 web UI 还是在 Jenkinsfile 中都是相同的, 通常认为在Jenkinsfile 中定义并检查源代码控制是最佳实践。

1.2 Pipeline中几个重要概念:

  • pipeline 流水线是用户定义的一个CD流水线模型 。流水线的代码定义了整个的构建过程, 他通常包括构建, 测试和交付应用程序的阶段 。
    pipeline 块声明式流水线语法的关键部分
  • Stage:阶段,一个pipeline可以划分为若干个stage,每个stage都是一个操作步骤,比如clone代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个node执行。
  • Node:节点,每个node都是一个jenkins节点,可以是jenkins master也可以是jenkins agent,node是执行step的具体服务器。另外, node块是 脚本化流水线语法的关键部分
  • Step:步骤,step是jenkins pipeline最基本的操作单元,从在服务器创建目录到构建容器镜像,由各类Jenkins插件提供实现,一个stage中可以有多个step,例如:sh “make”

1.3 Pipeline优势

  • 可持续性:jenkins的重启或者中断后不影响已经执行的pipeline Job
  • 支持暂停:pipeline可以选择停止并等待人工输入或批准后再继续执行
  • 可扩展:通过groovy的编程更容易的扩展插件
  • 并行执行:通过groovy脚本可以实现step,stage间的并行执行,和更复杂的相互依赖关系。

二、Pipeline流水线 简单的构建

流水线既能作为任务的本身,也能作为Jenkinsfile,其类似于dockerfile(将启动docker的所有命令,打包成一个文件)

Jenkins的web-ui所做的操作,也可以落地到Jenkinsfile里面,与dockerfile类似去开发

使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。

2.1 jenkinsfile 必备的五个组成部分

Jenkinsfile·有5个必备的组成部分

语法解析
pipeline整条流水线
agent指定执行器(也就是你要在哪台服务器上执行)
stages所有阶段(只有一个,下面为stage)
stage某一阶段(可有多个,下面为steps)
steps阶段内的每一步,可执行命令(可执行多条命令)

2.2 Jenkins 上创建一个 Pipeline 流水线任务

2.2.1 Jenkins 上安装Blue Ocean插件

找到插件商场;

Manage Jenkins --> Plugins --> 点击Available plugins :搜索Blue Ocean --> 点击安装

在这里插入图片描述

在这里插入图片描述

因为我这里已经安装了,就从installed里面截图了。找到Blue Ocean点击安装。

在这里插入图片描述

在这里插入图片描述

等待安装完重启jenkins;重启完之后就可以在首页中的左侧看到打开Blue Ocean了;

在这里插入图片描述

然后我们新建一个流水线任务;

2.2.2 新建一个 Pipeline 任务

点击新建Item – > 选中Pipeline,输入一个任务名称;

在这里插入图片描述

自己定义一下描述即可;

在这里插入图片描述

2.2.3 编辑流水线

鉴于对新手不太友好,我们这里先看看,然后使用Hello World脚本生成;生成Groovy脚本;

在这里插入图片描述

默认会生成一个Hello World脚本,可以看到应用到了上面说的Jenkinsfile必备的五个组成部分;其他的就可以自行添加了,我们先来测试;

2.2.4 保存并构建流水线

  • 直接点击保存 --> 然后build构建

在这里插入图片描述

在这里插入图片描述

点击构建的时候会在左下角的构建历史展示,如果没有刷新一下页面就可以了;直接点击进去再去找Console Output控制台输出或者是直接鼠标停留点击尖角号,再点击Console Output查看控制台输出。

在这里插入图片描述

SUCCESS表示执行完成,没有报错:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们执行完也可以看一下阶段视图

在这里插入图片描述

这样一个简单的流水线就构建成功了,可视化我们可以点击左侧的 打开Blue Ocean,就可以看到刚刚执行的流程;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这样就可以看到可视化执行过程了,当然因为这个是只有一个stage所以看着不是很清晰,后面我们会添加更多的stage,这时候的可视化过程就发挥到了他的作用了。

三、Pipeline流水线 声明式语法解析

可参考:

【Jenkins】Pipeline流水线语法解析全集 – 声明式流水线

【Jenkins】Pipeline流水线语法解析全集 – 脚本式流水线、groovy语法

四、【进阶】基于Pipeline 流水线实现项目的更新

4.1 熟悉项目更新流程

熟悉项目更新流程:就是我们在服务器上是怎么更新的,那么我们在这就先写好更新的流程;

例如:我们更新服务里的某一个文件使用的容器方式,那么步骤就是:

1、复制文件到一个目录下;

2、备份之前的文件;

3、将复制的文件放到服务所需的目录下;

4、重启服务容器;

5、直接在容器外执行指定容器内命令启动服务;

6、测试(可使用脚本进行测试返回一个值,也可以自己再页面测试)

以上就是整体更新的流程了,那么我们可以写5个 – 6个stage:看以下部分:

pipeline {agent {label '224'}environment {Container_wai = '/home/lcy/'Container_nei = '/application/'}stages {stage('copy_file') {	// 复制文件到服务器上steps {}}stage('backup_file') {	// 备份要更新的文件steps {}}stage('mv_file') {	// 将新上传的文件复制到项目所需的路径下steps {}}stage('restart_container') {	// 重启容器steps {}}stage('start_service') {	// 启动服务steps {}}}
}

解析:

agent {label '224'
}

在node为224的服务器上执行此操作,224为添加node时自定义的名字,具体如何添加node,可查看:【Jenkins】Pipeline流水线语法解析全集 – 声明式流水线 中的如何创建一个node节点。


environment:为配置的环境变量,这里我们配置的是文件上传的路径的和文件要更新的路径;

下面就是一个大的stages下分别有多个stage,一个stage代表一个操作,便于排查问题;一个stage下有一个steps,steps内可以写具体要执行的操作;

大概流程写完之后,我们就可以在steps中写具体操作了;

4.2 基于上面创建的Pipeline流水线任务修改(可自行重新创建)

这里我们没有项目在git上,所以跳过git那一步,从本机往目标服务器拉取文件;

目标服务器记得做免密,一般在配置node节点的时候就会做免密;

pipeline {agent {label '224'}environment {file_Path = '/home/lcy/'Container_wai = '/home/lcy/V1.0'Container_nei = '/application/'file_Name = 'cs.py'}stages {stage('copy_file') {agent {label 'localhost'}steps {script {def sourcePath = "/root/${file_Name}"def targetNode = '172.11.11.224'sh "scp ${sourcePath} root@${targetNode}:${file_Path}/"sh 'if [ $? -eq 0 ];then echo \'成功\'; else echo \'失败\'; fi'}}}stage('backup_file') {steps {sh "mv ${Container_wai}/${file_Name} ${Container_wai}/${file_Name}-`date +%Y-%m-%d`"echo "备份要更新的文件"}}stage('mv_file') {steps {sh "mv ${file_Path}/${file_Name} ${Container_wai}/ && chmod 775 ${Container_wai}/${file_Name}"echo '将新上传的文件复制到项目所需的路径下'}}stage('restart_container') {steps {sh "docker restart test"echo '重启容器'}}stage('start_service') {steps {sh "docker exec -i test /bin/bash -c 'sh start.sh'"echo '启动服务'}post {always {emailext(to: "********@qq.com",subject: "执行成功通知: " + currentBuild.fullDisplayName,body: """<h2>Build Result: ${currentBuild.result}</h2> <p>Full Display Name: ${currentBuild.fullDisplayName}</p> <p>URL: ${currentBuild.absoluteUrl} </p><p>Change: ${currentBuild.changeSets}</p><p>user: </p>""")}}}}
}

解析:

image-20240312162945962

4.3 保存并构建流水线

image-20240312163333547

  • 跑完也可以查看阶段视图:项目 --> 状态

在这里插入图片描述

4.5 查看服务是否正常

image-20240312163254879

这个是执行完发送的邮件,具体服务是否正常,需要根据自己的服务类型去判断;也可自行添加调用,判别服务是否正常。


自此,流水线自动更新服务就完成了!!!

五、相关专栏

专栏名称专栏地址
《Jenkins》https://blog.csdn.net/liu_chen_yang/category_12493057.html
《自动化运维》https://blog.csdn.net/liu_chen_yang/category_12473478.html
《Linux从入门到精通》https://blog.csdn.net/liu_chen_yang/category_10887074.html

六、相关文章

文章名称文章链接
【Jenkins】Pipeline流水线语法解析全集 – 声明式流水线https://liucy.blog.csdn.net/article/details/136528857
【Jenkins】Pipeline流水线语法解析全集 – 脚本式流水线、groovy语法https://liucy.blog.csdn.net/article/details/136567517
【Linux】Jenkins Pipeline流水线详解及基于Jenkins流水线实现自动更新项目https://liucy.blog.csdn.net/article/details/136656568

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用这个神级提示词插件,能让你的AI绘画工具Stable diffusion提示词直接写中文!

大家好&#xff0c;我是设计师阿威 最近&#xff0c;有同学在使用AI绘画工具 Stable Diffusion的时候和我说&#xff1a;老师&#xff0c;我英文不好&#xff0c;能不能直接让我写中文提示词啊&#xff1f;最好可以直接在SD的输入框就能直接写中文&#xff0c;不用切换网页或者…

Git--Part4--多人协作

theme: nico 在之前的Git博客中&#xff0c;已经把Git本地相关的操作以及远程操作的介绍完了。如下&#xff1a; Git–Part1–基础操作 - 掘金 (juejin.cn)Git–Part2–分支管理 - 掘金 (juejin.cn)Git–Part3–远程操作 & 配置 & 标签管理 - 掘金 (juejin.cn) 这篇文…

vue大作业-端午节主题网站

vue大作业-端午节主题网站介绍 端午节&#xff0c;又称为龙舟节&#xff0c;是中国的传统节日之一&#xff0c;每年农历五月初五庆祝。这个节日不仅是纪念古代爱国诗人屈原的日子&#xff0c;也是家人团聚、共享美食的时刻。今天&#xff0c;我们非常高兴地分享一个以端午节为…

本地运行大语言模型(LLMs)

用例 像PrivateGPT、llama.cpp、Ollama、GPT4All、llamafile 等项目的流行度凸显了本地&#xff08;在您自己的设备上&#xff09;运行大型语言模型&#xff08;LLMs&#xff09;的需求。 这至少有两个重要的好处&#xff1a; 1.隐私&#xff1a;您的数据不会发送给第三方&a…

模拟 IQ 方法的知识

模拟 IQ 调制器&#xff08;用于发射器&#xff09;和 IQ 解调器&#xff08;用于接收器&#xff09;已经使用了数十年&#xff08;[1] 至 [3]&#xff09;。 近推出了新的A/D和D/A转换器&#xff0c;可以直接对1至4 GHz的IF进行采样&#xff1b;在第二、第三和第四奈奎斯特区…

1. zookeeper分布式协调者

zookeeper分布协调者 一、zookeeper介绍1、软件设计架构1.1 单体架构1.2 SOA架构/分布式1.3 微服务架构 二、zookeeper角色1、角色2、选举机制3、znode类型 三、zookeeper集群部署1、环境规划2、安装jdk3、安装配置zookeeper3.1 安装zookeeper3.2 编辑配置文件3.3 创建myid文件…

Navicat for MySQL 11软件下载及安装教程

软件简介&#xff1a; Navicat for SQL Server 是一套专为 SQL Server设计的全面的图形化数据库管理及开发工具&#xff0c;可进行创建、编辑和删除全部数据库对象&#xff0c;例如表、视图、函数、索引和触发器&#xff0c;或运行 SQL查询和脚本&#xff0c;查看或编辑 BLOBs…

彩色图像批处理实例

在数字图像处理过程中&#xff0c;经常需要对一批图像进行处理&#xff0c;下面以自然场景下花背景分割为例&#xff0c;给出其主要处理过程和处理结果。 处理的主要步骤&#xff1a;1. 六张彩色图像存放在flower文件夹中&#xff0c;图像文件名为1.jpg 2.jpg 3.jpg 4.jpg 5.j…

物联网技术-第4章物联网通信技术-4.1计算机网络

目录 1.1计算机网络拓扑与组成 &#xff08;1&#xff09;全连通式网络 &#xff08;2&#xff09;星型网 &#xff08;3&#xff09;环形网 &#xff08;4&#xff09;总线网 &#xff08;5&#xff09;不规则型网 1.2数据交换类型 &#xff08;1&#xff09;电路交换网 &…

supOS数据集成

为解决企业数据孤岛问题&#xff0c;supOS对外提供了天湖能力&#xff0c;APP应用集成到supOS后可以使用supOS的天湖&#xff0c;所有数据归集到天湖&#xff0c;利用supOS的ESB消息总线能力实现各个业务系统的服务注册&#xff0c;对外提供统一消息总线能力&#xff0c;从而解…

GD32调试篇:STLINK驱动下载安装

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 向上代码兼容GD32F450ZGT6中使用 后续项目主要在下面该专栏中发布&#xff1a; https://blog.csdn.net/qq_62316532/category_12608431.html?spm1001.2014.3001.5482 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转…

LabVIEW在SpaceX的应用

结合真实的资料介绍LabVIEW在SpaceX的应用&#xff0c;涵盖自动化测试系统、数据采集与监控、可视化与分析、模块化设计与扩展&#xff0c;以及效率与可靠性的提高。 ​ 自动化测试系统 LabVIEW在SpaceX的自动化测试系统中发挥了关键作用。自动化测试是确保SpaceX火箭及其子系…

Flutter项目,Xcode15, 编译正常,但archive报错

错误提示 PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/目录/Developer/Xcode/DerivedData/Runner-brgnkruocugbipaswyuwsjsnqkzm/Build/Intermediates.noindex/ArchiveIntermediates/Runner/IntermediateBuildFilesPath/Runner.build/Release-iphoneos/Runner…

目标检测数据集 - 手机屏幕表面表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;手机屏幕表面缺陷检测数据集&#xff0c;真实采集高质量手机屏幕表面含缺陷图片数据&#xff0c;数据集含多款不同型号和品牌的手机屏幕表面图片数据&#xff0c;包括苹果手机屏、三星手机屏、华为手机屏等数据。数据标注标签包括 Bubble 气泡/水滴、Scr…

openGauss 6.0高可用测试,系统上线前很关键

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

5-10位工程师如何共享工作站算力和软件

在当今数字化快速发展的时代&#xff0c;算力共享已经成为工程师们提高工作效率、优化资源配置的重要手段。 在数字化和信息化的推动下&#xff0c;共享工作站的算力和软件正逐渐成为机械工程师们提升工作效率、优化资源配置的重要途径。那么5-10位工程师如何共享工作站算力和…

等保一体机:多种防护机制,让等保合规简单高效!

自1994年国务院颁布《中华人民共和国计算机信息系统安全保护条例》规定计算机信息系统实行安全等级保护以来&#xff0c;等级保护工作经过了近25年的发展历程&#xff0c;成为了我国网络安全保护的重要举措之一。 2019年12月1日等保2.0正式开始实施&#xff0c;我国网络安全行业…

低压电器航空插座端子

低压电器航空插座的定义和功能 低压电器航空插座通常指在交流电压1200V或直流电压1500V以下工作的电器&#xff0c;其主要功能是连接或断开电路&#xff0c;以实现对电路或非电对象的切换、控制、保护、检测、变换和调节。航空插座具有多种芯数和配置&#xff0c;例如2芯、3芯…

2288. 价格减免

题目 给定一个字符串列表 sentence&#xff0c;表示一个句子&#xff0c;其中每个单词可以包含数字、小写字母和美元符号 $。如果单词的形式为美元符号后跟着一个非负实数&#xff0c;那么这个单词就表示一个价格。我们需要在价格的基础上减免给定的 discount%&#xff0c;并更…

原生APP开发的技术难点

原生APP开发是一项复杂的技术工作&#xff0c;需要掌握多种编程语言和技术。原生APP开发的技术难点主要体现在以下几个方面&#xff0c;原生APP开发是一项技术难度较高的工作&#xff0c;需要开发者具备扎实的编程基础和丰富的开发经验。北京木奇移动技术有限公司&#xff0c;专…