Jenkins pipeline语法笔记

Jenkins pipeline

  • 简介
    • Jenkins Pipeline 优势
    • DSL 是什么
  • pipeline支持两种语法:
    • 声明式pipeline语法:
      • Pipeline
      • agent
    • Pipeline 声明式语法Declarative
      • environment
      • options
      • parameters
      • triggers
      • tools
      • input
      • when
      • Parallel
    • Pipeline Scripted语法
      • 流程控制
      • Declarative pipeline和Scripted pipeline的比较

简介

  • Jenkins pipeline (流水线)是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。它把持续提交流水线(Continuous Delivery Pipeline)的任务集成到Jenkins中。
  • pipeline 是jenkins2.X 最核心的特性, 帮助jenkins 实现从CI到CD与DevOps的转变。
  • 持续提交流水线(Continuous Delivery Pipeline)会经历一个复杂的过程: 从版本控制、向用户和客户提交软件,软件的每次变更(提交代码到仓库)到软件发布(Release)。这个过程包括以一种可靠并可重复的方式构建软件,以及通过多个测试和部署阶段来开发构建好的软件(称为Build)。

总结:
1.Jenkins Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。
2.持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完
整过程的自动化表现。
3.软件的每一次更改(提交到源代码管理系统)都要经过一个复杂的过程才能被发布。

Jenkins Pipeline 优势

本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。 Pipeline向Jenkins中添加了一组强大的工具, 支持简单的CI到全面的CD pipeline。通过对一系列的相关任务进行建模, 用户可以利用pipeline的很多特性:
1、代码:Pipeline以代码的形式实现,使团队能够编辑,审查和迭代其CD流程。
2、可持续性:Jenkins重启或者中断后都不会影响Pipeline Job。
3、停顿:Pipeline可以选择停止并等待人工输入或批准,然后再继续Pipeline运行。
4、多功能:Pipeline支持现实复杂的CD要求,包括循环和并行执行工作的能力。
5、可扩展:Pipeline插件支持其DSL的自定义扩展以及与其他插件集成的多个选项。

DSL 是什么

DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言(下简称 DSL);
而与 DSL相对的就是GPL,这里的GPL并不是我们知道的开源许可证,而是 General Purpose Language的简称,即通用编程语言,也就是我们非常熟悉的 Objective-C、Java、Python 以及 C 语言等等。

pipeline脚本是由groovy 语言实现的
但无需专门学习 groovy

pipeline支持两种语法:

  • Declarative:声明式
  • Scripted pipeline :脚本式

声明式pipeline语法:

官网:
https://www.jenkins.io/doc/book/pipeline/syntax/

声明式语法包括以下核心流程:
1.pipeline : 声明其内容为一个声明式的pipeline脚本
2.agent: 执行节点(job运行的slave或者master节点)
3.stages: 阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)
4.stage: 阶段,被stages包裹,一个stages可以有多个stage
5.steps: 步骤,为每个阶段的最小执行单元,被stage包裹
6.post: 执行构建后的操作,根据构建结果来执行对应的操作

根据上面流程创建一个简单的pipeline

pipeline{agent anystages{stage("This is first stage"){steps("This is first step"){echo "I am test"}}}post{always{echo "The process is ending"}}
}

Pipeline

Pipeline: 作用域:应用于全局最外层,表明该脚本为声明式pipeline   必写

agent

agent:作用域:可用在全局与stage内, agent表明此pipeline在哪个节点上执行 必写
agent参数:any,none, label, node,docker,dockerfile。

  • agent any 运行在任意的可用节点上
  • agent none 全局不指定运行节点,由各自stage来决定
  • agent { label ‘master’ } 运行在指定标签的机器上,具体标签名称由agent配置决定
  • node{ label ‘master’} 和agent { label ‘master’ }一样,但是node可以扩展节点信息,允许额外的选项 (比如 customWorkspace )。
agent { node {label  'my-defined-label'customWorkspace 'xxxxxxx'} 
}

agent { docker ‘python’ } 使用指定的容器运行流水线
定义此参数时,执行Pipeline或stage时会动态的在具有label 'my-defined-label’标签的node提供docker节点去执行Pipelines。 docker还可以接受一个args,直接传递给docker run调用。

agent {docker {image 'maven:3-alpine'label 'my-defined-label'args  '-v /tmp:/tmp'}
}
agent {// Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/dockerfile {filename 'Dockerfile.build'dir 'build'label 'my-defined-label'additionalBuildArgs  '--build-arg version=1.0.2'}
}

Pipeline 声明式语法Declarative

environment

  • environment指令指定一系列键值对,这些键值对将被定义为所有step或stage-specific step的环境变量,具体取决于environment指令在Pipeline中的位置。
  • 该指令支持一种特殊的方法credentials(),可以通过其在Jenkins环境中的标识符来访问预定义的凭据。
  • 对于类型为“Secret Text”的凭据,该 credentials()方法将确保指定的环境变量包含Secret Text内容;
  • 对于“标准用户名和密码”类型的凭证,指定的环境变量将被设置为username:password并且将自动定义两个附加的环境变量:MYVARNAME_USR和MYVARNAME_PSW。

在这里插入图片描述

pipeline {agent anyenvironment {  CC = 'clang' }stages {stage('Example') {steps {sh 'printenv'}}}
}

options

options指令允许在Pipeline本身内配置Pipeline专用选项。Pipeline本身提供了许多选项,例如buildDiscarder,但它们也可能由插件提供,例如 timestamps。
在这里插入图片描述
可用选项

  • buildDiscarder: pipeline保持构建的最大个数。用于保存Pipeline最近几次运行的数据,例如:options { buildDiscarder(logRotator(numToKeepStr: ‘1’)) }
  • disableConcurrentBuilds: 不允许并行执行Pipeline,可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }
  • skipDefaultCheckout:跳过默认设置的代码check out。例如:options { skipDefaultCheckout() }
  • skipStagesAfterUnstable: 一旦构建状态进入了“Unstable”状态,就跳过此stage。例如:options { skipStagesAfterUnstable() }
  • timeout: 设置Pipeline运行的超时时间,超过超时时间,job会自动被终止,例如:options { timeout(time: 1, unit: ‘HOURS’) }
  • retry: 失败后,重试整个Pipeline的次数。例如:options { retry(3) }
  • timestamps: 预定义由Pipeline生成的所有控制台输出时间。例如:options { timestamps() }
pipeline {agent anyoptions {timeout(time: 1, unit: 'HOURS') }stages {stage('Example') {steps {echo 'Hello World'}}}
} 

parameters

parameters指令提供用户在触发Pipeline时的参数列表。这些参数值通过该params对象可用于Pipeline stage中,具体用法如下:
在这里插入图片描述

作用域:被最外层pipeline所包裹,并且只能出现一次,参数可被全局使用
好处:使用parameters的好处是能够使参数也变成code,达到pipeline as code,pipeline中设置的参数会自动在job构建的时候生成,形成参数化构建

可用参数

  • string :A parameter of a string type, for example: parameters { string(name: ‘DEPLOY_ENV’, defaultValue: ‘staging’, description: ‘’) }
  • booleanParam :A boolean parameter, for example: parameters { booleanParam(name: ‘DEBUG_BUILD’, defaultValue: true, description: ‘’) }
  • 目前只支持[booleanParam, choice, credentials, file, text, password, run, string]这几种参数类型,其他高级参数化类型还需等待社区支持。
pipeline{agent anyparameters {string(name: 'xianchao', defaultValue: 'my name is xianchao', description: 'My name is xiancaho')booleanParam(name: 'luckylucky421302', defaultValue: true, description: 'This is my wechat')}stages{stage("stage1"){steps{echo "$xianchao"echo "$luckylucky421302"}}}
}

在这里插入图片描述

在这里插入图片描述

triggers

triggers指令定义了Pipeline自动化触发的方式。目前有三个可用的触发器:cron和pollSCM和upstream。
在这里插入图片描述
用域:被pipeline包裹,在符合条件下自动触发pipeline

  • cron:接受一个cron风格的字符串来定义Pipeline触发的时间间隔,例如: triggers { cron(‘H 4/* 0 0 1-5’) }
  • pollSCM:接受一个cron风格的字符串来定义Jenkins检查SCM源更改的常规间隔。如果存在新的更改,则Pipeline将被重新触发。例如:triggers { pollSCM(‘H 4/* 0 0 1-5’) }
pipeline {agent anytriggers {cron('H 4/* 0 0 1-5')}stages {stage('Example') {steps {echo 'Hello World'}}}
}

tools

通过tools可自动安装工具,并放置环境变量到PATH。如果agent none,这将被忽略。
在这里插入图片描述
Supported Tools(Global Tool Configuration)

  • maven
  • jdk
  • gradle
pipeline {agent anytools {#工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。maven 'apache-maven-3.0.1'}stages {stage('Example') {steps {sh 'mvn --version'}}}
}

工具名称必须在Jenkins中的Manage Jenkins→Global tool Configuration下预先配置

input

stage 的 input 指令允许你使用 input step提示输入。 在应用了 options 后,进入 stage 的 agent 或评估 when 条件前,stage 将暂停。 如果 input 被批准, stage 将会继续。 作为 input 提交的一部分的任何参数都将在环境中用于其他 stage

配置项:

  • message:必需的。 这将在用户提交 input 时呈现给用户。
  • id:input 的可选标识符, 默认为 stage 名称。
  • ok:input表单上的"ok" 按钮的可选文本。
  • submitter:可选的以逗号分隔的用户列表或允许提交 input 的外部组名。默认允许任何用户。
  • submitterParameter:环境变量的可选名称。如果存在,用 submitter 名称设置。
  • parameters:提示提交者提供的一个可选的参数列表。
pipeline {agent anystages {stage('Example') {input {message "Should we continue?"ok "Yes, we should."submitter "xianchao,lucky"parameters {string(name: 'PERSON', defaultValue: 'xianchao', description: 'Who should I say hello to?')}}steps {echo "Hello, ${PERSON}, nice to meet you."}}}
}

在这里插入图片描述
在这里插入图片描述

when

when指令允许Pipeline根据给定的条件确定是否执行该阶段。该when指令必须至少包含一个条件。如果when指令包含多个条件,则所有子条件必须为stage执行返回true。这与子条件嵌套在一个allOf条件中相同(见下面的例子)。
更复杂的条件结构可使用嵌套条件建:not,allOf或anyOf。嵌套条件可以嵌套到任意深度。
在这里插入图片描述
内置条件

  • branch:当正在构建的分支与给出的分支模式匹配时执行,例如:when { branch ‘master’ }。请注意,这仅适用于多分支Pipeline。
  • environment:当指定的环境变量设置为给定值时执行,例如: when { environment name: ‘DEPLOY_TO’, value: ‘production’ }
  • expression: 当指定的Groovy表达式求值为true时执行,例如: when { expression { return params.DEBUG_BUILD } }
  • not:当嵌套条件为false时执行。必须包含一个条件。例如:when { not { branch ‘master’ } }
  • allOf:当所有嵌套条件都为真时执行。必须至少包含一个条件。例如:when { allOf { branch ‘master’; environment name: ‘DEPLOY_TO’, value: ‘production’ } }
  • anyOf:当至少一个嵌套条件为真时执行。必须至少包含一个条件。例如:when { anyOf { branch ‘master’; branch ‘staging’ } }
pipeline {agent anystages {stage('Example Build') {steps {echo 'Hello World'}}stage('Example Deploy') {when {allOf {branch 'production'environment name: 'DEPLOY_TO', value: 'production'}}steps {echo 'Deploying'}}}
}

Parallel

Declarative Pipeline近期新增了对并行嵌套stage的支持,对耗时长,相互不存在依赖的stage可以使用此方式提升运行效率。除了parallel stage,单个parallel里的多个step也可以使用并行的方式运行。

pipeline {agent anystages {stage('Non-Parallel Stage') {steps {echo 'This stage will be executed first.'}}stage('Parallel Stage') {when {branch 'master'}parallel {stage('Branch A') {agent {label "for-branch-a"}steps {echo "On Branch A"}}stage('Branch B') {agent {label "for-branch-b"}steps {echo "On Branch B"}}}}}
}

Pipeline Scripted语法

Groovy脚本不一定适合所有使用者,因此jenkins创建了Declarative pipeline,为编写Jenkins管道提供了一种更简单、更有主见的语法。
但是由于脚本化的pipeline是基于groovy的一种DSL语言,所以与Declarative pipeline相比为jenkins用户提供了更巨大的灵活性和可扩展性。

流程控制

pipeline脚本同其它脚本语言一样,从上至下顺序执行,它的流程控制取决于Groovy表达式,如if/else条件语句,举例如下:

node {stage('Example') {if (env.BRANCH_NAME == 'master') {echo 'I only execute on the master branch'} else {echo 'I execute elsewhere'}}
}

Declarative pipeline和Scripted pipeline的比较

  • 共同点:两者都是pipeline代码的持久实现,都能够使用pipeline内置的插件或者插件提供的stage,两者都可以利用共享库扩展。
  • 区别:两者不同之处在于语法和灵活性。Declarative pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。但是Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。

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

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

相关文章

罗永浩力荐格行随身WiFi,背后原因竟是...你绝对想不到!

一、罗永浩的“严选”哲学 虽然罗永浩做的是直播带货,但是他的形象与其他头部主播之间有着明显的不同。那些头部主播,都可以统称为“电商主播”,他们与那些淘宝店、京东店里直播的商家本质是一样的,只有流量和名气大小不同罢了。…

SpringBoot开发部署(热部署+常规部署+Docker部署)

开发热部署 SpringBoot模板引擎的页面默认是开启缓存的,如果修改了页面,则刷新页面是得不到修改后的页面的 在application.properties中关闭模板引擎缓存 Thymeleaf spring.thymeleaf.cachefalseFreeMarker spring.freemarker.cachefalseGroovy spring…

拓扑排序与入度为0的结点算法解析及实现

拓扑排序与入度为0的结点算法解析及实现 算法思想时间复杂度分析伪代码C语言实现环路检测结论拓扑排序是一种用于有向无环图(DAG, Directed Acyclic Graph)的重要操作,它可以对图中的结点进行排序,使得对于每一条有向边 (u, v),顶点 u 在排序中都出现在顶点 v 之前。本文介…

PVC刻字膜高精度模切应用

PVC刻字膜是一种由聚氯乙烯(PVC)为主要成分制成的薄膜材料,具有耐磨、耐刮、耐水、耐油以及良好的化学稳定性等特点。这种薄膜在多个行业中得到广泛应用,特别是在服装、鞋业、箱包、汽车内饰等领域,用于制作各种标识、…

C语言 | 第十四章 | 指针运算 指针数组 多重指针

P 131 断点调试应用案例&#xff08;2&#xff09;2023/2/3 一、应用案例 案例一&#xff1a;用调试查看数组越界异常。 #include<stdio.h> void main(){int arr[] {1,2,3,4,5};int i 0;int len sizeof(arr) / sizeof(int);for(i 0; i < len; i) { // 这里不…

代码随想录训练营Day29 | 93.复原IP地址 | 78.子集 | 90.子集II

学习文档&#xff1a;代码随想录 (programmercarl.com) 学习视频&#xff1a;代码随想录算法公开课 | 最强算法公开课 | 代码随想录 (programmercarl.com) Leetcode 93. 复原 IP 地址 题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&…

6. PH47 代码框架硬件开发环境搭建

概述 PH47代码框架的硬件开发环境搭建同样简单&#xff0c; 建立基本的 PH47 框架学习或二次开发的硬件开发环境所需设备如下&#xff1a; BBP 飞控板及相关软硬件: BBP飞控板&#xff0c;或者至少一块Stm32F411核心板&#xff08;WeAct Studio&#xff09;Stm32程序烧录工具…

【Vue3 + TS + Vite】从0到1搭建项目框架

前言 没搭建过Vue3的项目&#xff0c;从0开始搭建一下&#xff0c;记录一下自己的步骤。 技术栈&#xff1a; vue3 ts scss pinia vite 我尽量写的详细一些&#xff0c;后续也会记录我在项目过程中&#xff0c;遇到的一些问题。 文章目录 前言环境搭建一、创建项目1. 使用…

Java->排序

目录 一、排序 1.概念 2.常见的排序算法 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量法) 1.3直接插入排序和希尔排序的耗时比较 2.选择排序 2.1直接选择排序 2.2堆排序 2.3直接选择排序与堆排序的耗时比较 3.交换排序 3.1冒泡排序…

【WEB应用安全测试指南–蓝队安全测试2】--超详细-可直接进行实战!!!亲测-可进行安全及渗透测试

安全基础理论入门知识参考上一篇《WEB应用安全测试指南蓝队安全测试1》 WEB应用安全测试指南2 一、文件 I/O 类1.1、任意文件上传1.2、任意文件下载1.3、文件包含 二、接口安全类2.1、短信炸弹2.2、邮件炸弹2.3、短信内容可控2.4、邮件内容可控 三、逻辑流程类3.1、越权3.2、未…

变阻器的未来发展趋势和前景如何?是否有替代品出现?

变阻器是一种用于调节电路中电阻值的电子元件&#xff0c;广泛应用于各种电子设备和系统中。随着科技的不断进步和应用领域的扩展&#xff0c;变阻器的未来发展趋势和前景备受关注。 未来变阻器将趋向于智能化和多功能化&#xff0c;随着物联网、人工智能等技术的快速发展&…

其他:python语言绘制案例

文章目录 介绍导入python包图1图2 介绍 python语言的科研绘图合集&#xff0c;数据来源Hydrogen-diffusion-and-water-rock-reaction 导入python包 import pandas as pd import glob import proplot as pplt import seaborn as sns import numpy as np import matplotlib.py…

java时间复杂度与空间复杂度的排序

怎么理解时间复杂度和空间复杂度 时间复杂度和空间复杂度一般是针对算法而言&#xff0c;是衡量一个算法是否高效的重要标准。先纠正一个误区&#xff0c;时间复杂度并不是算法执行的时间&#xff0c;再纠正一个误区&#xff0c;算法不单单指冒泡排序之类的&#xff0c;一个循…

小程序智能视频制作SDK解决方案,云端智能视频制作

无论是个人分享生活的点滴&#xff0c;还是企业展示品牌故事&#xff0c;一段精心制作的视频总能迅速抓住观众的眼球&#xff0c;传递无限价值。专业视频制作往往门槛较高&#xff0c;不仅需要专业的技能和设备&#xff0c;还耗费大量时间和精力。面对这一挑战&#xff0c;美摄…

决策树(descision tree)

一&#xff1a;决策树的基础介绍 决策树(descision tree)是一种基本的分类与回归的方法。决策树是一种对实例进行预测的树型结构。 下面是一个完整的二叉决策树&#xff0c;根据西瓜的几个特征判断西瓜的好坏。 纹理<1.5代表第一个判断条件&#xff0c;根据纹理<1.5是…

PPT技巧:保护PPT文件的方法有哪些?

PPT文件制作好之后保证文件不出错应该是很重要的&#xff0c;毕竟是要拿出去展示的&#xff0c;今天分享PPT加密方法给大家。希望能够帮助大家保护好自己的PPT文件。 打开密码 如果想要其他人需要输入正确的密码才能够打开文件查看并编辑&#xff0c;我们可以给PPT文件设置打…

Android -- [SelfView] 自定义多色渐变背景板

Android – 自定义多色渐变背景板 前言&#xff1a; Android 自带的 xml 文件内 gradient 设置渐变最多只有三种颜色&#xff0c;使用方便但范围受限&#xff0c;不能很好满足各种需求&#xff1b; 本款多色渐变背景板应运而生&#xff1a;* 1. 支持圆角模式&#xff0c;矩形模…

二、IOC容器

文章目录 1. IOC的底层原理1.1 什么是IOC1.2 IOC 底层原理1.3 画图讲解 IOC 底层原理 2. IOC接口&#xff08;BeanFactory&#xff09;3. IOC 操作 Bean 管理&#xff08;概念&#xff09;3.1 什么是Bean管理3.2 Bean管理操作的两种方式 4. IOC操作 Bean 管理&#xff08;基于 …

【Redis】Set类型常用命令

目录 一. Set集合类型简介.二. 增加元素相关命令2.1 向集合中添加元素(sadd)2.2 从集合中移动元素( smove ) 三. 查询元素相关操作.3.1 查询集合中存在的所有元素.( smembers )3.2 查询集合中是否存在member( sismember ) 四. 随机获取集合中的元素4.1 随机获取集合中的n个元素…

基于单片机的穿戴式泳池遇险紧急呼救系统的设计

本计基于单片机的穿戴式泳池遇险紧急呼救系统装置。该装置采用STC12C5A60S2单片机与心率检测模块MAX30102的一体化脉冲血氧分析仪和心率监测器&#xff0c;对人体的心跳进行了实时检测。该装置由发送端和接收端两部分组成&#xff0c;中间由LORA无线通信模块进行数据传输&#…