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

news2024/11/16 1:49:03

文章目录

    • 任务类型
    • 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 any
 stages {
   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 mvnHome
   stage('Preparation') {
       echo '拉取代码'
   }
   stage('Build') {
       echo '编译构建'
   }
   stage('Results') {
       echo '项目部署'
   }
}

示例脚本

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

生成Tools配置示例

示例脚本

pipeline {
    // 在任何代理节点运行
    agent any

    tools {
        // maven3.6.0 要在 jenkins全局工具配置中提前配置好
        maven 'maven3.6.0'
    }

    stages {
        stage('构建') {
            steps {
                // 从Gitee仓库获取代码
                git 'https://gitee.com/lakernote/easy-admin.git'

                // 运行Maven
                sh "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.coloradmin.cn/o/1479932.html

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

相关文章

(vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)

(vue)el-checkbox 实现展示区分 label 和 value&#xff08;展示值与选中获取值需不同&#xff09; 后端数据 解决方法 在 el-checkbox 标签中间传入要展示的文本即可&#xff0c;代码如下&#xff1a; <el-checkbox-groupv-model"formInline.processFieldList"…

章鱼网络 Community Call #18|Omnity 将首先支持 Runes 协议资产跨链

香港时间2024年2月8日12点&#xff0c;章鱼网络举行第18期 Community Call。 2024年&#xff0c;我们打开一个良好的局面&#xff1a;$NEAR Restaking 已经完成第三方审计&#xff0c;并且经过几次迭代&#xff0c;进入了正式稳定运行的阶段。更重要的是&#xff0c;我们宣布了…

基于移动端的食堂助餐在线点餐配送系统 uniapp微信小程序

本文从管理员、老人、配送员、食堂商家的功能要求出发&#xff0c;养老助餐管理系统小程序中的功能模块主要是实现老人、配送员、食堂商家、食堂大厅、预约选座、餐号信息、美食信息、美食订单、订单信息、订单配送、订单评价、老人食堂、下单信息、饮食分析。经过认真细致的研…

免费下载《金融行业数据安全交换解决方案白皮书》

金融行业包括商业银行业务、证券业务、保险业务、基金业务、信托业务等&#xff0c;因此数据类型多种多样&#xff0c;并且数据涉及主体众多&#xff0c;应用场景上较为多样复杂&#xff0c;在数据交换上存在安全、合规、可控、可靠、高效等需求。 金融行业会面临哪些数据安全…

【FPGA/IC】RAM-Based Shift Register Xilinx IP核的使用

前言 一般来讲&#xff0c;如果要实现移位寄存器的话&#xff0c;通常都是写RTL用reg来构造&#xff0c;比如1bit变量移位一个时钟周期就用1个reg&#xff0c;也就是一个寄存器FF资源&#xff0c;而移位16个时钟周期就需要16个FF&#xff0c;这种方法无疑非常浪费资源。 Xili…

Goose:Golang中的数据库迁移工具

Goose&#xff1a;Golang中的数据库迁移工具 在Golang开发中&#xff0c;数据库迁移是一个常见的任务&#xff0c;用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具&#xff0c;专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

C++基础知识(八:STL标准库(Vectors和list))

C STL (Standard Template Library标准模板库) 是通用类模板和算法的集合&#xff0c;它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发&#xff0c;同时我们应该也需要知道他们的底层…

Vue——携带参数跳转路由

Vue学习之——跳转路由 前情回顾 当我们进行点击修改时&#xff0c;会进行跳转到修改页面&#xff0c;为了完成回显数据&#xff08;根据对应id查找&#xff09;&#xff0c;我们需要携带对应选择中的id跳转到修改页面&#xff0c;让其进行查找回显 学习useRoute和useRoute…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(6.详解Set和ZSet数据结构)

本文是深入理解 Redis 常用数据类型源码及底层实现系列的第6篇&#xff5e;前5篇可移步(&#xffe3;∇&#xffe3;)/ 【Redis】深入理解 Redis 常用数据类型源码及底层实现&#xff08;1.结构与源码概述&#xff09;-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底…

CCDP.01.寄主机SSH连接虚拟机的QA

V0.0 初始版本-2024.2.29 检查VM的网卡配置 如上图&#xff0c;如果enp0s3网卡没有出现形如10.0.0.??/24的ip配置&#xff0c;说明该网卡配置存在错误&#xff0c;或者没有“使能”该网卡。在RockyLinux8.X中可检查“ifcfg-enp0s&#xff1f;” vi /etc/sysconfig/network-…

51-n皇后(回溯算法)

题目 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一…

C# Post数据或文件到指定的服务器进行接收

目录 应用场景 实现原理 实现代码 PostAnyWhere类 ashx文件部署 小结 应用场景 不同的接口服务器处理不同的应用&#xff0c;我们会在实际应用中将A服务器的数据提交给B服务器进行数据接收并处理业务。 比如我们想要处理一个OFFICE文件&#xff0c;由用户上传到A服务器…

【CesiumJS-3】加载倾斜模型数据(3DTilest)以及修改位置

引入倾斜模型数据 // 加载3DTiles数据let tileset;try {tileset await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");viewer.value.scene.primitives.add(tileset); // 倾斜模型添加到场景中viewer.value.zoomTo(tileset); // 视角定位到倾…

外汇天眼:2月客诉TOP10榜单公布,快来看看你用的平台有没有上榜!

作为外汇投资者了解每个月登上客诉榜单的交易平台很重要&#xff0c;只有这样才能有效的预防自己遭遇外汇黑平台&#xff0c;也能警觉的提前发现平台的异常&#xff0c;对于自己的外汇交易道路只有利无弊&#xff01; 快来看看有哪些平台上榜&#xff0c;你所使用的平台是否在…

3 局域网基础(1)

1.局域网 早期的局域网主要是令牌环网。20世纪80年代&#xff0c;局域网领域出现 Ethernet与Token Bus、Token Ring三足鼎立的局面&#xff0c;并且各自都形成了相应的国际标准。21 世纪&#xff0c;Ethernet 已成为局域网领域的主流技术。介质访问控制&#xff08;MAC&#xf…

破局数据分析滞后难题,赋能企业高速增长的指标管理解决方案

指标是什么&#xff1f; 业务发展过程中&#xff0c;企业内外部都会产生很多的业务数据&#xff0c;对这些数据进行采集、计算、落库、分析后&#xff0c;形成的统计结果称为指标。简单来说&#xff0c;指标是业务被拆解、量化后形成的数量特征&#xff0c;企业利用数据指标对…

如何使用Portainer创建Nginx容器并搭建web网站发布至公网可访问【内网穿透】

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

【PyTorch][chapter 18][李宏毅深度学习]【无监督学习][ VAE]

前言: VAE——Variational Auto-Encoder&#xff0c;变分自编码器&#xff0c;是由 Kingma 等人于 2014 年提出的基于变分贝叶斯&#xff08;Variational Bayes&#xff0c;VB&#xff09;推断的生成式网络结构。与传统的自编码器通过数值的方式描述潜在空间不同&#xff0c;它…

用JavaScript动态提取视频中的文字

现阶段整个社会短视频&#xff0c;中视频为王&#xff0c;文字传播虽然被弱化&#xff0c;但在业务中还是有一定的传播价值&#xff0c;今天就来讲一讲如何使用js动态提取视频中的字幕。 先来看看效果&#xff1a; 屏幕录制2024-02-29 15.40.18 一&#xff0c;tesseract.js介…