Jenkins自动化部署之流水线模式部署

文章目录

    • 任务类型
    • Pipeline流水线项目
      • 声明式的Pipeline
      • 脚本式Pipeline
    • 示例脚本
      • 生成Tools配置示例
    • 高级
      • Pipeline Script from SCM

任务类型

在Jenkins中,有不同类型的任务(项目)适用于不同的构建需求。以下是一些常见的Jenkins任务类型:

自由风格项目(FreeStyle Project):

  • 自由风格项目是Jenkins中最灵活的项目类型。
  • 允许通过简单的构建步骤配置来构建软件项目,支持Shell脚本、Windows批处理脚本等。
  • 适用于简单的构建需求,例如编译、打包、测试和部署

Maven项目:

  • Maven项目是专为使用Maven构建工具的项目设计的。
  • 允许配置Maven构建步骤,自动下载依赖、执行生命周期阶段等。
  • 适用于Java项目,特别是使用Maven构建工具的项目

Pipeline流水线项目:

  • Pipeline项目使用Jenkins Pipeline语法,允许以代码形式定义整个CI/CD流水线。
  • 支持复杂的构建、测试、部署和其他自动化流程,有更强大的灵活性。
  • 可以在Jenkinsfile中定义Pipeline,并将Pipeline存储在源代码仓库中。
  • 支持从版本控制系统中读取Jenkinsfile,以代码的方式定义整个流水线
  • 适用于复杂的CI/CD流程,需要定义多个阶段和任务的项目

实际企业项目中大多数使用Pipeline流水线项目类型。

Pipeline流水线项目

Pipeline(流水线)是Jenkins中的一种工作流插件,允许你以代码的形式定义整个CI/CD过程

实现单个任务难以完成的复杂流程编排和可视化的工作

可编程性: 使用Groovy脚本语言编写Pipeline脚本,这意味着你可以通过代码控制流水线的每个步骤。

可视化: 提供了可视化的流水线编辑器,帮助你直观地了解和修改整个流程。

可重用性: Pipeline的脚本可以存储在版本控制系统中(如Git),从而提供了可重用的、版本化的构建配置。

持久化: 支持将Pipeline的定义保存为代码(Jenkinsfile),从而可以将流水线的配置与代码一起存储。

Pipeline支持两种语法声明式(Declarative)和脚本式(Scripted Pipeline)语法。

声明式的Pipeline

stages:代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。

stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码、编译构建、部署等阶段。

steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码、ssh远程发布等任意内容。

pipeline {agent anystages {stage('拉取代码') {steps {echo '拉取代码'}}stage('编译构建') {steps {echo '编译构建'}}stage('项目部署') {steps {echo '项目部署'}}}
}

运行完阶段视图如下

日志如下

Started by user laker
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /root/.jenkins/workspace/ppp
[Pipeline] {
[Pipeline] stage
[Pipeline] { (拉取代码)
[Pipeline] echo
拉取代码
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (编译构建)
[Pipeline] echo
编译构建
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (项目部署)
[Pipeline] echo
项目部署
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

脚本式Pipeline

Node :节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境。

Stage :阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如:Build、Test、Deploy,Stage 是一个逻辑分组的概念。

Step :步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令一样。

node {def mvnHomestage('Preparation') {echo '拉取代码'}stage('Build') {echo '编译构建'}stage('Results') {echo '项目部署'}
}

示例脚本

可以参考看图中的示例代码在线可视化的流水线语法

生成Tools配置示例

示例脚本

pipeline {// 在任何代理节点运行agent anytools {// maven3.6.0 要在 jenkins全局工具配置中提前配置好maven 'maven3.6.0'}stages {stage('构建') {steps {// 从Gitee仓库获取代码git 'https://gitee.com/lakernote/easy-admin.git'// 运行Mavensh "mvn -Dmaven.test.failure.ignore=true clean package"}post {// 如果Maven能够运行测试,即使有一些测试失败,也记录测试结果并归档jar文件。success {junit '**/target/surefire-reports/TEST-*.xml'// 会把target/*.jar文件归档到Jenkins的工作目录中的 archive 目录下archiveArtifacts 'target/*.jar'}}}stage('部署') {steps {// TODO: 在这里添加部署步骤,将构建生成的文件部署到服务器或其他目标。// 示例:可以使用SCP、SSH或其他部署工具sh "echo 'Add your deployment steps here'"}}}post {// 构建后的操作always {// TODO: 在这里添加任何构建后操作,例如清理、通知等。sh "echo 'Add your post-build steps here'"}}
}

高级

Pipeline Script from SCM

上面是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,建议把Pipeline脚本放在项目中(一起进行版本控制)。

第一步 在项目根目录建立Jenkinsfile文件,把内容复制到该文件中,然后提交到Git。

第二步 配置流水线

执行结果

错误不用管,只是演示这个过程。

Downloaded from aliyun-public: https://maven.aliyun.com/repository/public/org/codehaus/plexus/plexus-io/3.0.0/plexus-io-3.0.0.jar (74 kB at 191 kB/s)
[[1;34mINFO[m] Reading assembly descriptor: assembly/assembly.xml
[[1;34mINFO[m] Building zip: /root/.jenkins/workspace/ppp/target/easyAdmin-local-1.0.0.zip
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] [1;32mBUILD SUCCESS[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] Total time:  01:50 min
[[1;34mINFO[m] Finished at: 2024-02-29T15:21:24+08:00
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
Post stage
[Pipeline] junit
Recording test results
No test report files were found. Configuration error?
Error when executing success post condition:
Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 92192139-d4ce-4bf3-8572-6c7c73bf5d32
hudson.AbortException: No test report files were found. Configuration error?at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:193)at hudson.FilePath.act(FilePath.java:1232)at hudson.FilePath.act(FilePath.java:1215)at hudson.tasks.junit.JUnitParser.parseResult(JUnitParser.java:125)at hudson.tasks.junit.JUnitResultArchiver.parse(JUnitResultArchiver.java:160)at hudson.tasks.junit.JUnitResultArchiver.parseAndSummarize(JUnitResultArchiver.java:254)at hudson.tasks.junit.pipeline.JUnitResultsStepExecution.run(JUnitResultsStepExecution.java:63)at hudson.tasks.junit.pipeline.JUnitResultsStepExecution.run(JUnitResultsStepExecution.java:29)at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)at java.base/java.lang.Thread.run(Thread.java:829)[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (部署)
Stage "部署" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] sh
+ echo Add your post-build steps here
Add your post-build steps here
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: No test report files were found. Configuration error?
Finished: FAILURE

阶段视图

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

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

相关文章

Vue.js 案例

Vue.js 是一个构建数据驱动的 web 界面的渐进式框架。它是目前前端开发领域非常热门的技术之一,因为它易于上手,功能强大,且与其他库或已有项目整合度高。 下面是一个简单的 Vue 项目实战步骤,帮助你了解如何使用 Vue.js 来创建一…

MYSQL03高级_新增用户、授予权限、授权底层表结构、角色理解

文章目录 ①. 登录服务器操作②. 用户的增删改③. 修改用户密码④. MySQL8密码管理⑤. 权限列表及原则⑥. 授予查看回收权限⑦. 底层权限表操作⑧. 角色的理解 ①. 登录服务器操作 ①. 启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下: mysql –h hostname|hos…

32单片机基础:TIM输出比较

这个输出比较功能是非常重要的,它主要是用来输出PWM波形,PWM波形又是驱动电机的必要条件,所以你如果想用STM32做一些有电机的项目,比如智能车,机器人等。 IC: Input Capture 输入捕获 CC:Capture/Compare一般表示输入捕获和输出…

【学习心得】浏览器开发者工具中出现的VM开头的JS文件是什么?

一、现象描述 在Chrome的开发者工具中,你可能会看到一些以“VM”开头的JavaScript文件(如“VM111.js”)。 二、VM文件到底是什么? “VM”表示的是Virtual Machine(虚拟机),这些文件通常表示由浏…

利用Unity和OpenXR实现眼动追踪的基础指南

在虚拟现实(VR)领域,眼动追踪技术正逐渐成为增强用户交互体验的关键工具。本文将引导你通过Unity和OpenXR实现眼动追踪功能,特别是针对HTC Vive Focus 3这样的设备。我们将从配置环境开始,一直到编写获取眼动数据的脚本。 环境配置 安装Uni…

2-29算法习题总结

贪心问题 小A的糖果 题目描述 小 A 有 n n n 个糖果盒,第 i i i 个盒中有 a i a_i ai​ 颗糖果。 小 A 每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中糖的个数之和都不大于 x x x,至少得吃掉几颗糖…

网站文章被百度快速收录的工具

百度是中国最主要的搜索引擎之一,对于网站管理员来说,网站文章被百度快速收录是至关重要的,因为这直接影响着文章的曝光和网站的流量。然而,许多网站管理员都会问一个常见的问题:文章百度收录需要几天?在这…

C语言基础17 判断

断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。 下面是…

MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范

文章目录 ①. MySQL - linux版安装②. 字符集的相关操作③. 各级别的字符集④. 字符集与比较规则(了解)⑤. SQL大小写规范⑥. sql_mode的合理设置 ①. MySQL - linux版安装 ①. 进入mysql官网,找到安装文件 ②. 将抽取出来的文件放在linux下的opt下 MySQL Community Serv…

WebSocket介绍与应用

介绍 WebSocket 是基于TCP的一种的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短连接WebSocket是长连接…

Vue3 + MybatisPlus实现批量删除功能

目录 一、后端 1.1 编写后端接口 1.2 编写service和其实现类 二、前端 2.1 组件加多选样式 2.2 实现多选调用的方法 2.3 编写批量删除的按钮 2.4 执行批量删除请求代码 一、后端 1.1 编写后端接口 PostMapping("/batchDelete") public CommonResult<Boo…

Python中简单正则获取百度新闻页面所有超链接示例

一、示例代码&#xff1a; import re import requestsheaders {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/""85.0.4183.83 Safari/537.36"} resp requests.get(http://news.…

自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

文章目录 前言一、Harbor的安装第一步&#xff1a;安装docker第二步&#xff1a;安装docker-compose第三步&#xff1a;安装Harbor 二、Harbor登录三、Harbor项目管理第一步&#xff1a;创建项目第二步&#xff1a;推送镜像 四、Harbor权限控制五、Harbor自动清理多余的镜像手动…

centos(redhat)离线安装英伟达(nvidia)docker运行环境

安装docker环境 可自行百度 下载 在有网的linux环境下载 yumdownloader libnvidia-container1 \ libnvidia-container-tools \ nvidia-container-toolkit-base \ nvidia-container-toolkit安装 有依赖关系最好按照顺序安装 yum install libnvidia-container1-1.13.5-1.x8…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+图像缩放,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI纯verilog图像缩放视频拼接应用本方案的SDI HLS图像缩放视频拼接应用本方案的SDI视频编码动态字符叠加输出应用本方案的SDI视频编码多路视频融合视频叠加应用FPGA的SDI…

Python实现向量自回归移动平均模型(VARMA算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 向量自回归移动平均模型&#xff08;Vector Autoregressive Moving Average, VARMA&#xff09;是一种…

XGB-15:调参注意事项

参数调优是机器学习中的一门黑艺术&#xff0c;一个模型的最优参数可能取决于许多情境。因此&#xff0c;要为此提供全面的指南是不可能的。 了解偏差-方差权衡Bias-Variance Tradeoff 当能允许模型变得更加复杂&#xff08;例如更深&#xff09;&#xff0c;模型具有更好的拟…

nginx 实战- 性能优化

在Web服务器的世界里&#xff0c;性能是一个永恒的话题。Nginx已经是一个非常高效的服务器了&#xff0c;但是通过一些优化措施&#xff0c;你可以让它运行得更快、处理更多的请求&#xff0c;同时使用更少的资源。本章将探讨一些提升Nginx性能的策略。 Nginx性能调优基础 优…

《商用密码应用安全性评估管理办法》解读

根据《中华人民共和国密码法》&#xff08;以下简称《密码法》&#xff09;、《商用密码管理条例》&#xff08;以下简称《条例》&#xff09;等法律法规&#xff0c;国家密码管理局研究制定了《商用密码应用安全性评估管理办法》&#xff08;国家密码管理局令第3号&#xff09…

基于springboot实现旅游路线规划系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游路线规划系统演示 摘要 随着互联网的飞速发展以及旅游产业的逐渐升温&#xff0c;越来越多人通过互联网获取更多的旅游信息&#xff0c;包括参考旅游文纪等内容。通过参考旅游博主推荐的旅游景点和规划线路&#xff0c;参考计划着自己的旅行&#xff0c…