当前位置: 首页 > news >正文

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)文档类型声明&#xff0…...

共筑数据安全防线!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…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...