jenkins声明式流水线语法详解
最基本的语法包含
- pipeline:所有有效的声明式流水线必须包含在一个 pipeline 块中
- stages:包含一系列一个或多个stage指令
- stage:stage包含在stages中进行,比如某个阶段
- steps:在阶段中具体得执行操作,一个或多个步骤
agent
指定了整个流水线特定的机器,比如多台slave节点,可以被定义在pipeline块顶层也可以根据stage层定义使用
(jenkins提供比较常用的流水线语法生成,输入对应的参数会自动生产)
- any:在任意可用代理上执行流水线阶段。agent any
- label:在配置标签得jenkins环境中可用代理上执行。agent {label ‘my slave’}
- node:agent { node { label ‘labelName’ } } 和 agent { label ‘labelName’ } 一样, 但是 node 允许额外的选项 (比如 customWorkspace )
pipeline定义:
pipeline {agent {label 'test1'}stages {stage('Hello') {steps {echo 'Hello World'}}}
}
stage阶段定义:
pipeline {agent anystages {stage('Hello') {agent {label 'test1'}steps {echo 'Hello World'}}}
}
post
post部分定义一个或多个steps,这些阶段根据流水线完成情况而运行
- always:无论流水线完成状态如何,都继续运行
- changed:当前流水线完成状态与
之前不同
时,运行该步骤 - failure:当前流水线完成状态
失败
时,运行该步骤 - success:当前流水线完成状态
成功
时,运行该步骤 - unstable:当前流水线完成状态
不稳定
时,运行该步骤 - aborted:当前流水线完成状态
中断
时,运行该步骤
pipeline {agent anystages {stage('Hello') {steps {echo 'Hello World'//echox 'hello world' (失败时)}}}post {always {echo "无论如何都运行"}failure {echo "失败后运行"}success {echo "执行成功后运行"}aborted {echo "异常中断运行"}}
}
模拟不同状态
always + success
always + aborted
always + failure
stages
包含一个或多个stage指令,至少包含一个
stage
一个stage标识一个阶段
steps
定义一些列一个或多个步骤操作
pipeline {agent anystages {stage('Hello') {steps {echo 'Hello World'sh 'date'sh 'pwd'}}}
}
environment
定义为所有步骤的环境变量,全局变量/局部变量取决于environment在流水线的那个位置
示例
pipeline {agent anyenvironment {CC = '全局变量'}stages {stage('Hello') {environment {VV = '局部变量'}steps {echo "this is ${CC}"echo "this is ${VV}"}}}
}
结果
options
允许从流水线内部配置特定的选项,比如timestamps
- disableConcurrentBuilds:禁止并发构建
- skipStagesAfterUnstable:构建状态
不稳定
时,跳过 - timeout:运行超时时间
- retry:失败时,重新构建的次数
- timestamps:控制台时间输出
- ansiColor:日志输出中启用ANSI颜色代码的支持
示例
pipeline {agent anyoptions {ansiColor('xterm')disableConcurrentBuilds()retry(3)timeout(time: 30, unit: 'SECONDS')timestamps()skipStagesAfterUnstable()}stages {stage('Hello') {steps {echo "hello world"echo "\033[32mThis text is green\033[0m"}}}
}
结果
parameters
提供用户在触发流水线时应该提供的参数列表,参数化构建
- string:字符串类型参数
- booleanParam:布尔参数
- choice:从预定义选项列表中选择
- password:密码参数
示例
pipeline {agent anyparameters {string (defaultValue: 'master', description: '主分支区分', name: 'BRANCH_NAME')choice (choices: ['dev', 'prod', 'pre'], description: '环境区分', name: 'ENVIRONMENT')}stages {stage('Example') {steps {checkout scmGit(branches: [[name: '${BRANCH_NAME}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ae008f10-597f-4332-b2f7-790c9b01074e', url: 'https://gitee.com/liujiangxu/dubbo-demo-web.git']])}}stage('deploy') {steps {script {echo "Deploying to ${ENVIRONMENT} environment"}}} }
}
结果
triggers
定义流水线被重新触发的自动化方式
- cron:执行间隔,类似任务计划
- pollSCM:在设置间隔中,jenkins会检查新的源代码更新,如果更新,会被触发
- upstream:其他工程构建后触发
cron示例
pipeline {agent anytriggers {cron 'H(29-30) */4 * * * '}stages {stage('Example') {steps {echo 'Hello World'}}}
}
upstream示例
pipeline {agent anytriggers {upstream 'ceshi-pip'}stages {stage('Example') {steps {echo '当ceshi-pip任务执行后,触发我自动执行'}}}
}
pollSCM示例
pipeline {agent anytriggers {pollSCM '* * * * *'}stages {stage('checkout') {steps {checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ae008f10-597f-4332-b2f7-790c9b01074e', url: 'https://gitee.com/liujiangxu/dubbo-demo-web.git']])echo "源代码已更新"}}stage('build') {steps {sh 'mvn clean package -DskipTests=true'}}stage('deploy') {steps {echo "实际部署步骤,如执行脚本部署等操作"}}}
}
tools
定义自动安装和放置PATH的工具一部分,根据全局工具配置选项自定义选择(例如不同业务需要不同的jdk8或者jdk11)如果 agent none 指定,则忽略该操作
- maven:编译环境
- jdk:java环境
示例
pipeline {agent anytools {jdk 'openjdk11.0.18'maven 'maven1'}stages {stage('Example') {steps {sh 'mvn --version'sh 'java -version'}}}
}
when
指令允许流水线根据给定的条件决定是否执行该阶段。when必须包含一个条件,当包含多个条件时,所有子条件必须返回true才会执行
- branch:用于检查当前构建的分支是否与指定的分支模式匹配时执行
- environment:用于检查环境变量是否满足给定的名称和值。如果环境变量存在且值匹配时执行
- not:用于反转另一个条件的结果。如果内部条件不满足(即返回false)时执行
- allOf:用于组合多个条件,只有当所有子条件都满足时(即都返回true)时执行
- anyOf:用于组合多个条件,但与allOf不同,只要至少一个子条件满足(即返回true),就会执行
bracnch示例
pipeline {agent anystages {stage('build on master') {when {branch 'master'}steps {echo '构建为master分支时执行' //跳过执行} } }
}
environment示例
pipeline {agent anystages {stage('deploy to prod') {environment {DEPLOY_X = 'dev'}when {environment name: 'DEPLOY_X', value: 'prod'}steps {echo '当变量参数为prod环境时执行' //跳过执行} } }
}
not示例
pipeline {agent anyenvironment {DEPLOY_X = "dev"}stages {stage('not build on master') {when {not {environment name: 'DEPLOY_X', value: 'prod'}}steps {echo '当变量参数不为prod环境时执行' //会执行} } }
}
allOf 示例
pipeline {agent anyenvironment {DEPLOY_X = "prod"}stages {stage('not build on master') {when {allOf {environment name: 'DEPLOY_X', value: 'prod'not {branch 'master'}}}steps {echo '当环境变量等于prod 和 分支不属于master时执行(即所有条件都满足)'//会执行} } }
}
anyOf 示例
pipeline {agent anyenvironment {DEPLOY_X = "prod"}stages {stage('not build on master') {when {anyOf {branch 'master'environment name: 'DEPLOY_X', value: 'prod'}}steps {echo '当环境变量等于prod 或者 分支属于master时执行(即所有条件满足一项即可)' //会执行} } }
}
相关文章:

jenkins声明式流水线语法详解
最基本的语法包含 pipeline:所有有效的声明式流水线必须包含在一个 pipeline 块中stages:包含一系列一个或多个stage指令stage:stage包含在stages中进行,比如某个阶段steps:在阶段中具体得执行操作,一个或…...

mini-lsm通关笔记Week2Overview
Week 2 Overview: Compaction and Persistence 在上周,您已经实现了LSM存储引擎的所有必要结构,并且您的存储引擎已经支持读写接口。在本周中,我们将深入探讨SST文件的磁盘组织,并研究在系统中实现性能和成本效益的最佳方法。我们…...

基于SpringBoot的在线点餐系统【附源码】
基于SpringBoot的高校社团管理系统(源码L文说明文档) 4 系统设计 4.1 系统概述 网上点餐系统的结构图4-1所示: 图4-1 系统结构 模块包括主界面,首页、个人中心、用户管理、美食店管理、美食分类管理、美食…...

生成式语言模型底层技术面试
在准备生成式语言模型的底层技术面试时,可以关注以下几个关键领域: 1. 模型架构 Transformer架构:了解自注意力机制、编码器-解码器结构,以及如何处理序列数据。预训练与微调:解释预训练和微调的过程,如何…...

HTML开发指南
目录 一、HTML基础1. HTML简介(1)标记语言(2)结构化文档(3)标签与属性(4)注释(5)版本演变 2. HTML文档结构(1)文档类型声明࿰…...

共筑数据安全防线!YashanDB与SPU完成兼容性互认证
近日,深圳计算科学研究院崖山数据库系统YashanDB与深圳市机密计算科技有限公司SPU机密计算协处理器顺利完成兼容性互认证。测试结果表明,双方产品完全兼容,稳定运行,能为用户提供全链路的数据安全管理解决方案,助力央国…...

【FastAPI】使用FastAPI和Redis实现实时通知(SSE)
在当今快速发展的Web应用程序中,实时通知已成为用户体验的重要组成部分。无论是社交媒体更新、消息通知,还是系统状态提醒,实时数据推送可以极大地提升用户互动性。本文将详细介绍如何使用FastAPI和Redis实现Server-Sent Events (SSE) 来推送…...

Keyence_PL_MC_HslCommunication import MelsecMcNet
import tkinter as tk from tkinter import messagebox from datetime import datetime from HslCommunication import MelsecMcNet, OperateResult def 创建_plc_应用程序(): class 应用程序(tk.Tk): def __init__(self): super().__init__() …...

软件架构的演变与趋势(软件架构演变的阶段、综合案例分析:在线电商平台架构演变、开发补充)
随着软件开发技术的不断进步,软件架构从最初的简单结构演变为如今的复杂系统,架构设计不再是简单的代码组合,而是战略性的系统设计,确保系统具备可扩展性、可靠性、安全性和可维护性。 文章目录 1. 软件架构演变的阶段1.1 单体架…...

Shopify独立站运营必知必会:选品与防封技巧
独立站和第三方平台是目前最常见的跨境电商销售模式,相比于第三方平台,独立站的商家可以自己建站,自行决定运营模式和营销手段等策略,尤其是在准入门槛上,难度会更低,这些特点吸引了不少商家选择独立站开店…...

Unity开发绘画板——03.简单的实现绘制功能
从本篇文章开始,将带着大家一起写代码,我不会直接贴出成品代码,而是会把写代码的历程以及遇到的问题、如何解决这些问题都记录在文章里面,当然,同一个问题的解决方案可能会有很多,甚至有更好更高效的方式是…...

R语言的基础知识R语言函数总结
R语言与数据挖掘:公式;数据;方法 R语言特征 对大小写敏感通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母)。不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头&…...

龙年国庆专属姓氏头像
关注▲洋洋科创星球▲一起成长! 2024年,我们迎来了龙年,龙年国庆姓氏头像! 慢慢找! 你的和你朋友的都有。 01赵 02 钱 03 孙 04 李 05 周 06 吴 07 郑 08 王 09 冯 010 陈 011 褚 012 卫 013 蒋 014 沈 015 韩 姓氏…...

基于Es和智普AI实现的语义检索
1、什么是语义检索 语义检索是一种利用自然语言处理(NLP)和人工智能(AI)技术来理解搜索查询的语义,以提供更准确和相关搜索结果的搜索技术,语义检索是一项突破性的技术,旨在通过深入理解单词和…...

URI和URL的区别
1: 将 URI 转换为 URL import java.net.URI; import java.net.URL;public class UriToUrlExample {public static void main(String[] args) {// 创建一个 URI 对象URI uri = new URI("http://example.com/path/to/resource");// 将 URI 转换为 URLtry {URL url = u…...

Java 入门指南:获取对象的内存地址
文章目录 hashCode()应用重写 hashCode() 方法示例 Symstem . indentityHashCode()应用 注意事项 在 Java 开发中,了解对象的内存管理是十分重要的,尽管 Java 的设计初衷是让开发者更专注于业务逻辑而非底层资源管理。但在某些情况下,了解对象…...

【Linux】项目自动化构建工具-make/Makefile 详解
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...

嵌入式开发中学习C++的用处?
这个问题一直有同学在问,其实从我的角度是一定是需要学的,最直接的就是你面试大厂的嵌入式岗位或者相关岗位,最后一定会问c,而很多人是不会的,这就是最大的用处,至于从技术角度考量倒是其次,因为…...

基于SAM大模型的遥感影像分割工具,用于创建交互式标注、识别地物的能力,可利用Flask进行封装作为Web后台服务
如有帮助,支持一下(GitHub - Lvbta/ImageSegmentationTool-SAM: An interactive annotation case developed based on SAM for remote sensing image annotation, which can generate corresponding segmentation results based on point, multi-point, …...

Selenium入门
Selenium 是一个用于自动化 web 应用程序测试的工具,它支持多种浏览器和编程语言。 下载驱动程序:根据你的浏览器类型和版本,下载相应的 WebDriver。例如,Chrome 浏览器需要 ChromeDriver。 安装 Selenium 库 pip install sele…...

USB 3.1 Micro-A 与 Micro-B 插头,Micro-AB 与 Micro-B 插座,及其引脚定义
连接器配对 下表列出 USB 插座可接受的插头: USB 3.1 Micro-B 连接器 USB 3.1 Micro-B 插头和 USB 3.1 Micro-B 插座连接器是为小型手持设备和其他可能使用小尺寸连接器的应用而定义的。其定义使得 USB 3.1 Micro-B 插座既可以接受 USB 3.1 Micro-B 插头ÿ…...

MySQL多版本并发控制MVCC实现原理
MVCC MVCC 是多版本并发控制方法,用来解决读和写之间的冲突,比如脏读、不可重复读问题,MVCC主要针对读操作做限制,保证每次读取到的数据都是本次读取之前的已经提交事务所修改的。 概述 当一个事务要对数据库中的数据进行selec…...

【并查集】[ABC372E] K-th Largest Connected Components 题解
题意 前置阅读:并查集算法介绍 洛谷链接 Atcoder 链接 给定 n ( 1 ≤ n ≤ 2 1 0 5 ) n(1 \leq n \leq 2\times 10^5) n(1≤n≤2105) 个点,初始没有边,您要进行以下操作: 1 a b,表示连接一条 ( a , b ) (a,b) …...

HarmonyOS面试题(持续更新中)
1、用过线程通信吗,线程是怎么进行通信的? emitter 和 eventHub 相同: 都是基于事件总线的 区别是: ① eventHub当前线程内通信 ② emitter是同一进程不同线程或者同一进程和同一线程也可以通信 2、页面和组件的生命周期 …...

QT中QWidget和QObject的区别与联系是什么
在Qt框架中,QWidget和QObject是两个核心类,它们各自扮演着不同的角色,但又紧密相连。以下是关于它们区别与联系的详细解释: 区别 基类和功能定位: QObject是Qt中所有类的基类,包括几乎所有的Qt对象。它提供…...

解决macOS安装redis以后不支持远程链接的问题
参考文档:https://blog.csdn.net/qq_37703224/article/details/142542179?spm1001.2014.3001.5501 安装的时候有个提示, 使用指定配置启动: /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf那么我们可以尝试修改这个配置文件: code /opt/homebrew/…...

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)
文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛(也就是华为杯),也是和本校的两个数学学院的朋友在网上组的队伍。昨天(9.25)通宵干完论文(一条…...

绝了,自从用了它,我每天能多摸鱼2小时!
大家好,我是可乐。 俗话说的好:“摸鱼一时爽,一直摸鱼一直爽”。 作为一个程序员,是否有过调试代码熬到深夜?是否有过找不到解决方案而挠秃头顶? 但现在你即将要解放了,用了这款工具——秘塔…...

C语言指针系列1——初识指针
祛魅:其实指针这块儿并不难,有人说难只是因为基础到进阶没有处理好,大家要好好跟着一步一步学习,今天我们先来认识一下指针 指针定义:指针就是内存地址,指针变量是用来存放内存地址的变量,在同一…...

传神论文中心|第26期人工智能领域论文推荐
在人工智能领域的快速发展中,我们不断看到令人振奋的技术进步和创新。近期,开放传神(OpenCSG)传神社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自…...