Jenkins的Pipeline概念

news2024/12/26 23:15:42

文章目录

  • Pipeline
    • 什么是Jenkins Pipeline
    • 声明式和脚本式Pipeline语法
    • 为何使用Pipeline
    • Pipeline概念
      • Pipeline
      • Node
      • Stage
      • Step
    • Pipeline语法概述
      • 声明式Pipeline
      • 脚本式Pipeline
    • Pipeline示例
  • 参考

Pipeline

什么是Jenkins Pipeline

Jenkins Pipeline是一套插件,它支持实现和集成“continuous delivery (CD) pipeline”到Jenkins。

CD pipeline是流程的自动化表达,用于从版本控制向用户和客户获取软件。 软件的每个变化(在源码控制中提交),在其被发布的过程中,都经历了一个复杂的过程。该过程包括了以一种可靠并可重复的方式来构建软件, 以及通过测试和部署的多阶段来处理构建软件(称为一个build)。

Pipeline提供了一组可扩展的工具,通过“Pipeline domain-specific language (DSL) syntax”对从简单到复杂的交付pipeline“作为代码”来建模。

Jenkins Pipeline的定义写在一个文本文件中(称为 Jenkinsfile ),该文件可以被提交到项目的源码控制仓库。这是“Pipeline-as-code”的基础;将CD pipeline作为应用的一部分,像其它代码一样,可以版本化和审查。

创建 Jenkinsfile 并提交到源码控制,提供了很多立竿见影的好处:

  • 自动为所有branch和PR(Pull Request)创建Pipeline构建流程。
  • 在Pipeline上代码审查/迭代 (以及剩余的源码)。
  • 对Pipeline进行审计追踪。
  • Pipeline只有单一源,可被项目里的多个成员查看和编辑。

定义Pipeline的语法,无论是在web UI还是在 Jenkinsfile 文件中,都是相同的,不过通常认为,在 Jenkinsfile 中定义Pipeline,并纳入源码控制,是最佳实践。

声明式和脚本式Pipeline语法

Jenkinsfile 可用两种语法进行编写:声明式和脚本式。

声明式和脚本式的Pipeline,从根本上是不同的。声明式Pipeline是Jenkins Pipeline新一些的特性:

  • 相比脚本式Pipeline语法,它提供更加丰富的语法特性
  • 是为了使读写Pipeline代码更容易而设计的。

不过, Jenkinsfile 里很多单个的语法组件(或称“步骤”),对于声明式和脚本式Pipeline是通用的。

为何使用Pipeline

Jenkins本质上是一个自动化引擎,它支持许多自动化模式。Pipeline添加了一组强大的工具到Jenkins,支持从简单的CI到复杂的CD Pipeline的用例。通过对一系列的相关任务进行建模,用户可以利用Pipeline的很多特性:

  • 代码:Pipeline是在代码中实现的,通常会纳入源码控制,团队有编辑、审查和迭代其交付Pipeline的能力。
  • 持久:Pipeline可以从Jenkins控制器的计划和非计划的重启中存活下来。
  • 可暂停:Pipeline可以停止并等待人工输入或批准,然后继续运行Pipeline。
  • 多功能:Pipeline支持复杂的现实世界的CD需求,包括fork/join,循环, 并行工作。
  • 可扩展:Pipeline插件支持指定扩展到它的DSL,以及与其它插件集成的多个选项。

尽管Jenkins一直允许将自由式job链接到一起的初级形式来执行串行任务,Pipeline使这个概念成为了Jenkins的头等公民。

构建在可扩展性这个核心Jenkins价值之上,Pipeline也可以扩展,用户可使用Pipeline Shared Libraries,开发人员可使用插件来扩展。

下面的流程图是一个CD场景的示例,在Jenkins Pipeline中很容易建模:

在这里插入图片描述

Pipeline概念

Pipeline

Pipeline是CD pipeline的用户自定义模型。Pipeline代码定义了整个构建流程,通常包含了构建应用、测试和发布阶段。

同时, pipeline 块是声明式Pipeline语法的重要部分。

Node

Node是一个机器,它是Jenkins环境的一部分,能够执行Pipeline。

同时, node 块是脚本式Pipeline语法的重要部分。

Stage

stage 块定义了任务的概念上的不同子集,这些任务在整个Pipeline上被执行(比如:Build、Test和Deploy stage),很多插件用它来可视化或者展示Jenkins Pipeline状态/进度。

Step

单个任务。本质上,step告诉Jenkins在一个特定的时间点上做什么(或者叫流程里的一步)。比如,要执行shell命令 make ,使用 sh step: sh 'make' 。当插件扩展Pipeline DSL,通常意味着检查实现了一个新的step。

Pipeline语法概述

声明式Pipeline

在声明式Pipeline语法中, pipeline 块定义了整个Pipeline要做的工作。

Jenkinsfile(声明式Pipeline):

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                //
            }
        }
        stage('Test') {
            steps {
                //
            }
        }
        stage('Deploy') {
            steps {
                //
            }
        }
    }
}

脚本式Pipeline

在脚本式Pipeline语法中,一个或多个 node 块在整个Pipeline中做核心工作。尽管这不是脚本式Pipeline语法的强制需求,把Pipeline的工作限制在 node 块中,做了两件事:

  1. 通过向Jenkins队列中添加一项,安排块中包含的step运行。一旦node上的执行器空闲,该step就会运行。
  2. 创建workspace(某个Pipeline所特有的目录),在此处工作在从源码控制检出的文件上。
    注意:取决于Jenkins配置,一些workspace在一段时间静止(inactivity)后,可能不会自动清理。

Jenkinsfile(脚本式Pipeline):

node {
    stage('Build') {
        //
    }
    stage('Test') {
        //
    }
    stage('Deploy') {
        //
    }
}

Pipeline示例

Jenkinsfile(声明式Pipeline):

pipeline {
    agent any
    options {
        skipStagesAfterUnstable()
    }
    stages {
        stage('Build') {
            steps {
                sh 'make'
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml'
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

Jenkinsfile(脚本式Pipeline):

node {
    stage('Build') {
        sh 'make'
    }
    stage('Test') {
        sh 'make check'
        junit 'reports/**/*.xml'
    }
    if (currentBuild.currentResult == 'SUCCESS') {
        stage('Deploy') {
            sh 'make publish'
        }
    }
}

参考

  • https://www.jenkins.io/doc/book/pipeline
  • https://www.jenkins.io/zh/doc/book/pipeline (中文文档)

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

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

相关文章

YOLOv9有效改进|使用空间和通道重建卷积SCConv改进RepNCSPELAN4

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、改进点介绍 SCConv是一种即插即用的空间和通道重建卷积。 RepNCSPELAN4是YOLOv9中的特征提取模块,类似YOLOv5和v8中的C2f与C3模块。 …

国内chatgpt写作软件,chatgpt国内使用

随着人工智能技术的不断发展,国内涌现出了一些基于ChatGPT模型的写作软件,这些软件不仅能够实现智能化的文章写作,还支持批量生成各种类型的文章。本文将深入探讨国内ChatGPT写作软件,以及它们在批量文章创作方面的应用与优势。 C…

STM32作为SPI slave与主机异步通信

背景 最近被测试提了个BUG,说某款产品在用户按下前面板的按键后,对应的按键灯没有亮起来。前面板跟主机是通过SPI口通信,前面板是从机,从机想要主动发送消息,需要通过GPIO中断来通知主机: 上图前面板是ST…

php源码 单色bmp图片取模工具 按任意方式取模 生成字节数组 自由编辑点阵

http://2.wjsou.com/BMP/index.html 想试试chatGPT4生成,还是要手工改 php 写一个网页界面上可以选择一张bmp图片,界面上就显示这张bmp图片, 点生成取模按钮,在图片下方会显示这张bmp图片的取模数据。 取模规则是按界面设置的&a…

蓝桥ACM培训-搜索

前言: 今老师讲了了dfs,虽然我自己之前也自学了一点点,但我还是感觉做题并不是很顺,尤其是今天最后一题,我调试了一下午都没过,还需要积累经验呀。 正文: Problem:A 白与黑-搜索: #include &l…

DbSchema导出HTML/PDF版表结构

一、连接数据库 登录成功默认显示当前用户的所有资源(表、视图、序列、方法、触发器等),如果不操作将导出此用户的全部信息。 至此连接数据库完成 二、表结构导出 本次不想给用户全部导出,只给导出几张,选择需要…

IPO观察丨“闷头做手机”的龙旗科技,如何拓宽价值边界?

提到手机代工,许多人会想起依靠iPhone订单发家的富士康。但近年来,随着国内智能手机供应链愈发成熟,龙旗科技、闻泰科技和华勤技术等一批国产手机代工厂快速崛起,业绩强劲增长之余,还迈进了二级市场。 比如&#xff0…

吴恩达deeplearning.ai:通过偏差与方差进行诊断

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 文章目录 偏差与方差高偏差高方差合适的模型理解偏差与方差 总结 当你构建神经网络的时候,几乎没有人能够在一开始就将神经系统构建得十分完美。因此构建神经网络最重要的是直到…

BUGKU 头等舱

头等舱 打开环境,什么都没有,使用BP抓包,发送到重发器里,看响应得到flag

LeetCode 热题 100 | 图论(二)

目录 1 基础知识 1.1 什么是拓扑排序 1.2 如何进行拓扑排序 1.3 拓扑排序举例 2 207. 课程表 3 210. 课程表 II 菜鸟做题,语言是 C 1 基础知识 1.1 什么是拓扑排序 含义:根据节点之间的依赖关系来生成一个有序的序列。 应用&#xff1a…

详细了解C++中的namespace命名空间

键盘敲烂,月薪过万,同学们,加油呀! 目录 键盘敲烂,月薪过万,同学们,加油呀! 一、命名空间的理解 二、::作用域运算符 三、命名空间(namespace&…

勒索病毒最新变种.helper勒索病毒来袭,如何恢复受感染的数据?

尊敬的读者: 在数字时代,我们享受着科技带来的便利,但与此同时,网络安全威胁也在不断演变。其中,勒索病毒是一种极具破坏力的威胁,而.helper勒索病毒更是最新的变种之一。当你的文件被.helper勒索病毒加密…

SparkStreaming在实时处理的两个场景示例

简介 Spark Streaming是Apache Spark生态系统中的一个组件,用于实时流式数据处理。它提供了类似于Spark的API,使开发者可以使用相似的编程模型来处理实时数据流。 Spark Streaming的工作原理是将连续的数据流划分成小的批次,并将每个批次作…

redis04 发布与订阅

一种消息通信模式:发布者(pub)发布消息,订阅者(sub)接收消 息。 redis客户端可以订阅任意数量的频道。 发布订阅流程图 发布和订阅实现 打开两个窗口订阅channel1频道,再打开一个窗口向chan…

ssh连接github报错:ssh_exchange_identification: Connection closed by remote host

报错截图:ssh_exchange_identification: Connection closed by remote host 配置步骤: 生成新的 SSH 密钥并将其添加到 ssh-agent - GitHub 文档 这个报错是我在寒武纪MLU270的dcoker环境中遇到的,但是在windows系统中可以通过SSH的方式git…

Excel 按奇数偶数列处理数据

目录 一. 需求背景1.1 获取偶数列的数据1.2 奇偶列数据互换 二. 解决方式2.1 为列添加奇偶辅助列2.2 通过公式将奇偶列互换 一. 需求背景 1.1 获取偶数列的数据 ⏹ 最近在整理歌单,发现部分歌曲没有歌词,于是打算自己制作一份。 从网上找到了歌词&…

从下一代车规MCU厘清存储器的发展(1)

目录 1.车规MCU制程工艺朝28nm进发 2.MCU存储器概述 3.MCU大厂的选择 3.1 瑞萨自研STT-MRAM 3.2 ST专注PCM 3.3 英飞凌和台积电联手RRAM 3.4 NXP如何计划eNVM 4.小结 1.车规MCU制程工艺朝28nm进发 随着英飞凌发布了关于AURIX TC4xx系列即将量产的新闻,国际…

RS编码的FPGA实现

RS编码,即Reed-solomon codes,是一类纠错能力很强的特殊的非二进制BCH码(BCH码是一种有限域中的线性分组码,具有纠正多个随机错误的能力)。对于任选正整数S可构造一个相应的码长为nqS-1的 q进制BCH码,而q作…

机器学习,数学统计常用数学符号

通用字体,符号规则 x x x 标量 x \boldsymbol{x} x 向量 X \boldsymbol{X} X 随机向量、矩阵 χ \chi \quad χ 集合 x ^ \hat{x} x^ 估计或近似值 x ∗ x^* x∗ 最优值 x ˉ \bar{x} xˉ 平均值 常见的数学符号 ∀ \forall \quad ∀ 对任意 ∃ \exists ∃ 存在 ∝…

青少年CTF擂台挑战赛 2024 #Round 1 Web方向题解 WP 全

EasyMD5 题目描述:php没有难题 考点总结:脑洞题目,不如我出(狗头 只允许两个都上传pdf文件。 文件还不能太大了。burp多次发包发现要求两个pdf内容不一样 不一样时候,提示我们MD5碰撞。 科学计数法绕过 PHP的后门 …