Jenkins的Pipeline概念

文章目录

  • 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 anystages {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 anyoptions {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.hqwc.cn/news/506281.html

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

相关文章

ElasticSearch相关知识点

ElasticSearch相关知识点 1.了解ES ES的作用:ES是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 ELK技术栈:ES结合kibana、Logstash、Beasts,也就是 elastic stack 。…

远程服务器Ubuntu 18.04安装VNC远程桌面

一、安装vnc 1.安装图形化界面工具 # 安装过程中会弹窗让选择配置,选lightdm sudo apt install ubuntu-desktop sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal 2.安装vnc sudo apt-get install x11vnc3.安装LightD…

政务信息化项目可行性研究报

第四章 总体建设方案 1 建设原则 本项目将在借鉴国内相关项目建设成功经验的基础上,充分利用现有先进、 成熟技术,并考虑长远发展需求,予以统一规划、统一布局、统一设计、规范标 准、突出重点、分步实施。 (1)标准…

【python报错】Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.

python报错&#xff1a; Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.在切换旧版numpy版本的时候&#xff0c;出现了这个报错&#xff0c;表现就是将numpy切换到<1.24的版本的时候&#xff0c;只要import numpy就弹出以上报错。 尝试了网上的各种方法…

面试经典150题——简化路径

"A goal is a dream with a deadline." - Napoleon Hill 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目开始看起来并不太容易知道该怎么写代码&#xff0c;所以不知道什么思路那就先模拟人的行为&#xff0c;比如对于如下测试用例&#xff1a; 首先 /代表根…

动态规划(算法竞赛、蓝桥杯)--树形DP树形背包

1、B站视频链接&#xff1a;E18 树形DP 树形背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int n,V,p,root; int v[N],w[N]; int h[N],to[N],ne[N],tot; //邻接表 int f[N][N];void add(int a,int b){to[tot]b;ne[tot]h[a];h[a…

【嵌入式实践】【芝麻】【设计篇-2】从0到1给电动车添加指纹锁:项目可行性分析

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

Topaz DeNoise AI:一键让照片重获清晰 mac/win版

Topaz DeNoise AI是一款革命性的图片降噪软件&#xff0c;它利用先进的人工智能算法&#xff0c;帮助用户轻松去除照片中的噪点&#xff0c;恢复图像的清晰度和细节。无论是专业摄影师还是摄影爱好者&#xff0c;Topaz DeNoise AI都能成为他们处理图片时的得力助手。 Topaz De…

CVE-2016-5195 复现记录

文章目录 poc前置知识页表与缺页异常/proc/self/mem的写入流程madvise 漏洞点修复 Dirty COW脏牛漏洞是一个非常有名的Linux竞争条件漏洞&#xff0c;虽然早在2016年就已经被修复&#xff0c;但它依然影响着众多古老版本的Linux发行版&#xff0c;如果需要了解Linux的COW&#…

安装Realtek Audio Driver失败[Error Code:-0001]

安装Realtek Audio Driver失败[Error Code&#xff1a;-0001] 首先来看一下我们遇到的问题GPT4的推荐解决方法&#xff08;流水账&#xff09;笔者自己真实有效的解决办法 首先来看一下我们遇到的问题 描述&#xff1a;在笔记本更新完电脑之后&#xff0c;没有自带声音驱动。然…

GVIM常见命令

一、模式之间的切换 二、退出保存 &#xff1a;q 不保存就退出vim &#xff1a;w 保存但不退出vim &#xff1a;wq 保存并退出vim 三、打开侧边栏 如下所示&#xff1a; 在命令模式下输入vt打开侧边栏目录&#xff0c;输入r更新目录 四、光标的移动 不仅是括号&#xff0c;b…

嵌入式烧录报错:板端IP与PC的IP相同

报错&#xff1a; 配置 实际上我配置并没有错。 服务器IP&#xff08;就是本机&#xff09;、板端IP、网关。此处网关必须与板子IP配套&#xff08;可以不存在&#xff09;。 解决 我网卡配置了多个IP。一番删除添加还是报错。 于是点击服务器IP&#xff0c;换成别的&#x…