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

Jenkins-pipeline语法说明

一. 简述:

   Jenkins Pipeline 是一种持续集成和持续交付(CI/CD)工具,它允许用户通过代码定义构建、测试和部署流程。

二. 关于jenkinsfile:

 1. Sections部分:

   Pipeline里的Sections通常包含一个或多个Directives或 Steps:

a). agent:

      指定整个Pipeline或特定阶段将在Jenkins环境中执行的节点位置,具体取决于该agent 部分的配置。该部分必须在pipeline块内的顶层定义 ,但在stage中是可以使用的。

#agent可选项: 1). any:任何可用agent上执行。2). none:不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分3).  label: 使用提供的label标签,在Jenkins环境中可用的代理上执行Pipeline或stage(agent { label 'my-defined-label' })4).  node: agent { node { label 'labelName' } },等同于 agent { label 'labelName' },但node允许其他选项5). docker:执行Pipeline或stage时会动态供应一个docker节点去接受Docker-based的Pipelines。6). dockerfile: 使用从Dockerfile源存储库中包含的容器来构建执行Pipeline或stage eg:pipeline {agent none stages {stage('Example Build') {agent { docker 'maven:3-alpine' } steps {echo 'Hello, Maven'sh 'mvn --version'}}stage('Example Test') {agent { docker 'openjdk:8-jre' } steps {echo 'Hello, JDK'sh 'java -version'}}}
}常用选项: 
#label : 标签,适用于node,dockr anddockerfile时,并且node是必须的 
#customWorkspace: 自定workspace路径
#reuseNode:一个布尔值,默认为false。如果为true,则在同一工作空间中,。只适用于docker和dockerfile,并且仅在 individual stage中使用agent才有效eg:
agent {node {label 'my-defined-label'customWorkspace '/some/other/path'}
}

b).  POST:

     定义将在Pipeline运行或阶段结束时运行的操作。部分 always,changed,failure,success,unstable,和aborted。这些块允许在Pipeline运行或stage结束时执行,具体取决于Pipeline的状态。

#post 可选项:#always:无论Pipeline运行的完成状态如何。
#changed:当前Pipeline运行的状态与先前完成的Pipeline的状态不同时。
#failure:当前Pipeline处于“失败”状态时。
#success:当前Pipeline具有“成功”状态时
#unstable:当前Pipeline具有“不稳定”状态,如由测试失败,代码违例等引起。
#aborted:当前Pipeline处于“中止”状态时,通常是由于Pipeline被手动中止。eg:
pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'}}}post { always { echo 'I will always say Hello again!'}}
}通常情况下,post定义在pipeline的末端。

c). stages :包含一个或多个stage的序列,Pipeline的大部分工作在此执行。建议stages至少包含至少一个stage指令,用于连接各个交付过程,如构建,测试和部署等。

d). steps :

   包含一个或多个在stage块中执行的step序列。

pipeline {agent anystages {stage('Example') {steps { echo 'Hello World'}}}
}

2.  Directives(指令) 部分:

a).  environment:

     指定一系列键值对,这些键值对将被定义为所有step或stage-specific step的环境变量,具体取决于environment指令在Pipeline中的位置。该指令支持一种特殊的方法credentials(),可以通过其在Jenkins环境中的标识符来访问预定义的凭据。

pipeline {agent anyenvironment { CC = 'clang'   # 顶级pipeline中定义的env适用于所有steps}stages {stage('Example') {environment {    #只能适用于该过程的stepsAN_ACCESS_KEY = credentials('my-prefined-secret-text')  #可在jenkins环境中通过其标示访问定义的凭据。}steps {sh 'printenv'}}}
}

b). options :

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

#可用选项:
buildDiscarder:  pipeline保持构建的最大个数。
disableConcurrentBuilds: 不允许并行执行Pipeline,可用于防止同时访问共享资源等。
skipDefaultCheckout: 默认跳过来自源代码控制的代码。
skipStagesAfterUnstable: 一旦构建状态进入了“Unstable”状态,就跳过此stage。
timeout: 设置Pipeline运行的超时时间。
retry: 失败后,重试整个Pipeline的次数。
timestamps: 预定义由Pipeline生成的所有控制台输出时间。 eg:
pipeline {agent anyoptions {timeout(time: 1, unit: 'HOURS')  #指定一个小时的全局执行超时,超出后中止运行}stages {stage('Example') {steps {echo 'Hello World'}}}
}

c). parameters :

     提供用户在触发Pipeline时的参数列表。这些参数值通过该params对象可用于Pipeline步骤。

#string:  字符串类型
#booleanparam: 布尔参数eg: 
pipeline {agent anyparameters {string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')}stages {stage('Example') {steps {echo "Hello ${params.PERSON}"}}}
}

d). triggers(触发器):

     定义了Pipeline自动化触发的方式。对于与源代码集成的Pipeline,如GitHub或BitBucket,triggers可能不需要基于webhook的集成也已经存在。目前只有三个个可用的触发器:cron,pollSCM,upstream。

cron:接受一个cron风格的字符串来定义Pipeline触发的常规间隔,例如: triggers { cron('H 4/* 0 0 1-5') }
pollSCM:接受一个cron风格的字符串来定义Jenkins检查SCM源更改的常规间隔。如果存在新的更改,则Pipeline将被重新触发。例如:triggers { pollSCM('H 4/* 0 0 1-5') }
upstream: 接受逗号分隔的一系列作业和一个阈值。当字符串中的任何作业以定义的阈值结束时,管道将被重新触发,跨job。eg:
pipeline {agent anytriggers {cron('H */4 * * 1-5')}stages {stage('Example') {steps {echo 'Hello World'}}}
}

e). tools:

   通过tools可自动安装工具,并放置环境变量到PATH。如果agent none,这将被忽略。

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

f). when:

  允许Pipeline根据给定的条件确定是否执行该阶段。该when指令必须至少包含一个条件。如果when指令包含多个条件,则所有子条件必须为stage执行返回true。这与子条件嵌套在一个allOf条件中相同(见下面的例子)。

更复杂的条件结构可使用嵌套条件建:not,allOf或anyOf。嵌套条件可以嵌套到任意深度。

#内置参数:
branch: 当正在构建的分支与给出的分支模式匹配时执行
environment:当指定的环境变量设置为给定值时执行
expression:当指定的Groovy表达式求值为true时执行
not:当嵌套条件为false时执行。必须包含一个条件
allOf:当所有嵌套条件都为真时执行。必须至少包含一个条件
anyOf:当至少一个嵌套条件为真时执行。必须至少包含一个条件eg:
pipeline {agent anystages {stage('Example Build') {steps {echo 'Hello World'}}stage('Example Deploy') {when {branch 'production'}steps {echo 'Deploying'}}}
}

3. Parallel(并行):

 对耗时长,相互不存在依赖的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'}failFast trueparallel {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"}}}}}
}

script:

    需要一个script Pipeline,并在Declarative Pipeline中执行。对于大多数用例,script在Declarative Pipeline中的步骤不是必须的,但它可以提供一个有用的加强(groovy  ?)。

pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'script {def browsers = ['chrome', 'firefox']for (int i = 0; i < browsers.size(); ++i) {echo "Testing the ${browsers[i]} browser"}}}}}
}

相关文章:

Jenkins-pipeline语法说明

一. 简述&#xff1a; Jenkins Pipeline 是一种持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;它允许用户通过代码定义构建、测试和部署流程。 二. 关于jenkinsfile&#xff1a; 1. Sections部分&#xff1a; Pipeline里的Sections通常包含一个或多个Direc…...

小米Vela操作系统开源:AIoT时代的全新引擎

小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统&#xff0c;并将其命名为OpenVela。这一举动在AIoT&#xff08;人工智能物联网&#xff09;领域掀起了不小的波澜&#xff0c;也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…...

NodeJs如何做API接口单元测试? --【elpis全栈项目】

NodeJs API接口单元测试 api单元测试需要用到的 assert&#xff1a;断言库 (还要一些断言库比如:Chai)supertest&#xff1a; 模拟http请求 简单的例子&#xff1a; const express require(express); const supertest require(supertest); const assert require(assert);…...

bundletool来特定设备规范的json安装aab包

1、获取自己设备的设备规范json java -jar ./bundletool.jar get-device-spec --outputj:/device-spec.json 2、根据设备规范生成apks包 java -jar ./bundletool.jar build-apks --device-specj:/device-spec.json --bundleapp-dev-release.aab --output随便的文件名.apks -…...

2024年第十五届蓝桥杯青少组国赛(c++)真题—快速分解质因数

快速分解质因数 完整题目和在线测评可点击下方链接前往&#xff1a; 快速分解质因数_C_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/cpp/show-3781.htmlhttps://www.hixinao.com/tiku/cpp/show-3781.html 若如其他赛事真题可自行前往题库中心查找&#xff0c;题…...

.Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…...

chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确

问题描述 chrome游览器又一款JSON插件叫JSON Formatter&#xff0c;游览器GET请求调用接口时&#xff0c;如果返回的数据是json格式&#xff0c;则会自动格式化展示&#xff0c;类似这样&#xff1a; 但是今天突然发现怎么也格式化不了&#xff0c;打开一个json文件倒是可以格…...

[Qt]系统相关-网络编程-TCP、UDP、HTTP协议

目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…...

docker 安装 nginx 详解

在平常的开发工作中&#xff0c;我们经常会用到 nginx&#xff0c;那么在 docker 中 如何安装 nginx呢&#xff1f;又有哪些需要注意的事项呢&#xff1f;简单来说&#xff0c;第一步&#xff1a;拉取 nginx 镜像&#xff1b;第二步&#xff1a;创建 挂载目录并设置 nginx.conf…...

2025年大模型气象预测架构与商业化影响

随着人工智能技术,尤其是大模型(如深度学习、大规模神经网络)的飞速发展,气象预测的传统方法正在经历深刻变革。2025年,气象预测将借助大模型技术进入一个新的阶段。本文将从架构角度详细探讨2025年大模型在气象预测中的应用,并分析其对商业化的潜在影响。 一、2025年大模…...

基于51单片机和ESP8266(01S)、八位数码管、独立按键的WiFi定时器时钟

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、延时函数2、定时器03、串口4、数码管扫描5、独立按键扫描 四、主函数总结 系列文章目录 前言 有三个版本&#xff1a; ①普中开发板版本1&#xff1a;28800bps11.0592MHz&#xff0c;12T ②普中开发板版本2&am…...

Androidstudio 中,project下的.gitignore和module下的.gitignore有什么区别,生效优先级是什么

在 Android Studio 项目中&#xff0c;project 根目录下的 .gitignore 文件和 module 目录下的 .gitignore 文件作用和生效优先级是不同的&#xff0c;理解它们之间的区别非常重要&#xff0c;可以避免不必要的提交和冲突。 1. project 根目录下的 .gitignore&#xff1a; 作…...

python学习笔记3-字符串常用的方法

一、判断&#xff08;9个&#xff09;&#xff1a; 二、查找和替换&#xff08;8个&#xff09; 三、⼤⼩写转换&#xff08;5个&#xff09; 四、⽂本对⻬&#xff08;3个&#xff09; 五、去除空⽩字符&#xff08;3个&#xff09; 六、拆分和连接 &#xff08;6个&#xff0…...

提示词工程(Prompt Engineering)

1. Prompt 是什么&#xff1f; Prompt&#xff1a;提示词&#xff0c;是描述 AI 需要执行的任务的自然语言文本。 如上图所示&#xff0c;Prompt就是用户的提问。其实我们大家都用过Prompt&#xff0c;比如我们使用的ChatGPT、文心一言、豆包等AI产品时的提问就是Prompt&…...

后端开发Web

Maven Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具 Maven的作用 依赖管理 方便快捷的管理项目依赖的资源&#xff08;jar包&#xff09;&#xff0c;避免版本冲突问题 统一项目结构 提供标准、统一的项目结构 项目构建 标准跨平台(…...

set和map(二)详解

文章目录 mapoperator[ ]的底层operator[ ]使用的实例 multimapequal_range 两道题目题目解析算法原理代码题目解析算法原理代码 map map和set大部分都相似&#xff0c;只有insert插入键值对不同&#xff0c;insert要插入pair,pair中有key和value。erase和find只与key有关&…...

第4章:Python TDD消除重复与降低依赖实践

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

【语言处理和机器学习】概述篇(基础小白入门篇)

前言 自学笔记&#xff0c;分享给语言学/语言教育学方向的&#xff0c;但对语言数据处理感兴趣但是尚未入门&#xff0c;却需要在论文中用到的小伙伴&#xff0c;欢迎大佬们补充或绕道。ps&#xff1a;本文不涉及公式讲解&#xff08;文科生小白友好体质&#xff09;&#xff…...

vue3+uniapp开发鸿蒙初体验

去年7月20号&#xff0c;uniapp官网就已经开始支持鸿蒙应用开发了&#xff0c;话不多说&#xff0c;按照现有规则进行配置实现一下鸿蒙开发效果&#xff1b; 本文基于macOS Monterey 版本 12.6.5实现 开发鸿蒙的前置准备 这里就直接说我的版本&#xff1a; DevEco Studio 5.…...

Android四种方式刷新View

Android四种方式刷新View 1.前言&#xff1a; 最近在切换主题时有个TextView是Gone的状态&#xff0c;切换主题后内容没有显示&#xff0c;于是排查代码&#xff0c;刚开始以为是textView没有设置内容&#xff0c;但是打印日志和排查发现有setText. 2.View.VISIBLE与View.GO…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...