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 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.mfbz.cn/a/418569.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

供应链投毒预警 | 恶意NPM包利用Windows反向shell后门攻击开发者

概述 本周(2024年02月19号),悬镜供应链安全情报中心在NPM官方仓库(https://npmjs.com)中发现多起NPM组件包投毒事件。攻击者利用包名错误拼写方式 (typo-squatting)在NPM仓库中连续发布9个不同版本的恶意包&#xff0…

ubuntu20.04 ROS-Noetic 配置qtcreator的ROS环境

文章目录 1 安装qtcreator1.1 下载安装Qt1.2 配置命令启动qtcreator2 配置ROS2.1 直接安装qtcreator-ros2.2 在qtcreator上安装ros_qtc_plugin插件3 注意3.1 构建套件3.2 更新、删除qt4 参考链接1 安装qtcreator QT官网:Qt Downloads 下载包链接:qt5.12.12 Qt5.12.12默认qtc…

SpringBoot使用classfinal-maven-plugin插件加密Jar包

jar包加密 1、在启动类的pom.xml中加入classfinal-maven-plugin插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><…

官网万词霸屏推广+关键词排名优化源码系统 带完整的安装代码包以及搭建教程

随着搜索引擎算法的不断更新和市场竞争的加剧&#xff0c;传统的SEO方法已经难以满足企业对于快速、高效推广的需求。罗峰结合多年的互联网营销经验和最新的搜索引擎优化技术&#xff0c;给大家推荐一款集网站搭建、关键词优化、数据分析于一体的源码系统。 以下是部分代码示例…

Linux信号【产生-保存-处理】

目录 前言&#xff1a; 1、进程信号基本概念 1.1、什么是信号&#xff1f; 1.2、信号的作用 2、键盘键入 2.1、ctrlc 终止前台进程 2.1.1、signal 注册执行动作 3、系统调用 3.1、kill 函数 3.2、模拟实现 myKill 3.3、raise 函数 3.4、abort 函数 4、软件条件信号…

时间序列分析实战(十一):ECM误差修正模型

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

服务器数据恢复-服务器RAID5上层XFS文件系统分区数据恢复案例

服务器数据恢复环境&#xff1a; MD1200磁盘柜中的磁盘通过RAID卡创建了一组RAID5阵列&#xff0c;分配了一个LUN。在Linux操作系统层面对该LUN进行了分区&#xff0c;划分sdc1和sdc2两个分区&#xff0c;通过LVM扩容的方式将sdc1分区加入到了root_lv中&#xff1b;sdc2分区格式…

代码随想录第46天|139.单词拆分 多重背包理论基础 背包总结

文章目录 单词拆分思路&#xff1a;代码 多重背包≈0-1背包题目代码 背包总结 单词拆分 3 思路&#xff1a; 代码 class Solution {public boolean wordBreak(String s, List<String> wordDict) {HashSet<String> set new HashSet<>(wordDict);boolean[]…

视频记录仪_基于联发科MT6762的智能4G记录仪方案

智能记录仪采用联发科强劲八核处理器&#xff0c;12nm制程工艺的记录仪具便是满足这些需求的理想选择。搭载4GB32GB内存&#xff0c;并运行Android 11.0操作系统&#xff0c;这款记录仪具展现出强劲的性能表现。 首先&#xff0c;这款记录仪具具备优秀的视频录制功能。它能完整…

综合练习(一)

目录 列出薪金高于部门 30 的所有员工薪金的员工姓名和薪金、部门名称、部门人数 列出与 ALLEN从事相同工作的所有员工及他们的部门名称、部门人数、领导姓名 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 列出薪金高于部门 30 的所…

【音视频处理】使用ffmpeg实现多个视频合成一个视频(按宫格视图)

先上结果 环境 硬件&#xff1a;通用PC 系统&#xff1a;Windows 测试有效 软件&#xff1a;ffmpeg 解决 0、命令 ffmpeg.exe -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v]scaleiw/2:ih/2,pad2*iw:2*ih[a]; [1:v]scaleiw/2:ih/2…

人脸2D和3D道具SDK解决方案提供商

人脸识别和增强现实技术成为了许多企业和开发者关注的焦点&#xff0c;为了满足市场对高质量、易于集成的人脸识别SDK的需求&#xff0c;美摄科技推出了一系列领先的人脸2D/3D道具SDK解决方案。 一、产品特点 高精度识别&#xff1a;美摄科技的人脸识别技术采用深度学习算法&…

【OCR识别】使用OCR技术还原加密字体文字

文章目录 1. 写在前面2. 页面分析3. 字符知识4. 加密分析 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

VirtualBox虚拟机安装 Linux 系统

要想学习各种计算机技术&#xff0c;自然离不开Linux系统。并且目前大多数生产系统都是安装在Linux系统上。常用的Linux系统有 Redhat&#xff0c;Centos&#xff0c;OracleLinux 三种。 三者的区别简单说明如下&#xff1a; Red Hat Enterprise Linux (RHEL): RHEL 是由美国…

微信小程序构建npm失败解决方式

安装完所需要的依赖后&#xff0c;在微信开发者工具菜单栏中选择&#xff1a;“工具” -> “构建 npm”&#xff0c;但是失败。 解决方法&#xff1a;修改 project.config.json 开发者工具创建的项目&#xff0c;miniprogramRoot 默认为 miniprogram&#xff0c;package.js…

Vue3自定义文件列表页面(含上传、搜索、复制链接)

文章目录 一、代码展示二、代码解读三、结果展示 一、代码展示 <template><div class"container"><h1>文件列表</h1><div class"header-actions"><a-input placeholder"输入关键词搜索" v-model:value"…

element-ui附件上传及在线查看详细总结,后续赋源码

一、附件上传 1、在element-ui上面复制相应代码 a、accept"image/*,.pdf,.docx,.xlsx,.doc,.xls" 是规定上传文件的类型&#xff0c;若是不限制&#xff0c;可以直接将accept‘all即可&#xff1b; b、:action"action" 这个属性就是你的上传附件的地址&am…

spring boot集成Elasticsearch 7.16.3

环境&#xff1a;Elasticsearch 版本 7.16.3 Elasticsearch for windows下载地址 windows 若依 spring boot版本 2.6.0 pom文件添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch<…

细数Android开发者的艰辛历程,android零基础

首先我们来看一下组件化项目和传统项目的区别: 在传统的项目里 我们通常情况下会有一个commonLib的Libary模块和一个app的application模块&#xff0c;业务中的逻辑都写在app中各个功能模块放到不同的包下。这样做有以下几个主要的缺点&#xff1a; 1.无论分包做的再好&…

LLM@本地语言大模型@Gemma的安装与使用@dockerDesktop的安装和启动

文章目录 准备refsollama安装过程2b模型的效果小结&#x1f47a; ollama的进一步使用帮助文档查看ollama安装了哪些模型使用皮肤来使聊天更易用 使用Chatbot UI皮肤安装docker&#x1f47a;启动docker载入和退出dockerchatbot 网页版皮肤 使用命令行聊天小结&#x1f47a; 准备…
最新文章