120.Jenkins里的Pipeline Script

目录

1. **Declarative Pipeline**

主要部分

 示例

2. **Scripted Pipeline**

主要部分

示例

3. **常用指令和功能**

环境变量

工具管理

文件操作

构建触发器

并行执行

异常处理

用户交互

4.**两种类型的特点**

1. **声明式 Pipeline (Declarative Pipeline)**

 中文解释:

 特点:

2. **脚本式 Pipeline (Scripted Pipeline)**

中文解释:

 特点:

3.**如何选择**

5.**总结**


Jenkins Pipeline 脚本可以包括多种内容,用于定义和控制 CI/CD 流程的各个方面。根据 Jenkins Pipeline 的类型(Declarative 或 Scripted),脚本的内容和结构会有所不同。以下是详细的说明和示例:

1. **Declarative Pipeline**

Declarative Pipeline 是一种结构化、声明式的语法,适合大多数 CI/CD 场景。它使用 `pipeline` 块来定义整个流水线。

主要部分

- **agent**:指定执行构建的环境。
- **stages**:定义多个阶段,每个阶段包含一个或多个步骤。
- **steps**:定义具体的构建步骤。
- **environment**:设置环境变量。
- **tools**:指定需要的工具版本。
- **post**:定义构建完成后的操作(如清理工作空间、发送通知)。
- **triggers**:定义触发构建的方式。
- **parameters**:定义用户输入的参数。
- **options**:设置一些选项,如超时时间、并发控制等。

 示例

pipeline {agent anyenvironment {NPM_CONFIG_REGISTRY = 'https://registry.npmmirror.com'}tools {nodejs 'node-14'}stages {stage('Checkout') {steps {checkout scm}}stage('Install Dependencies') {steps {sh 'npm install'}}stage('Build') {steps {sh 'npm run build'}}stage('Test') {steps {sh 'npm test'}}}post {always {cleanWs()}success {echo 'Build succeeded!'}failure {echo 'Build failed!'}}triggers {cron('H/15 * * * *')}parameters {string(name: 'BRANCH_NAME', defaultValue: 'main', description: 'Branch to build')}options {timeout(time: 1, unit: 'HOURS')disableConcurrentBuilds()}
}


 


2. **Scripted Pipeline**

Scripted Pipeline 使用 Groovy 语法,提供了更大的灵活性,但相对复杂。它以 `node` 块为起点,逐步定义构建逻辑。

主要部分

- **node**:指定执行构建的环境。
- **stage**:定义阶段。
- **steps**:定义具体的构建步骤。
- **environment**:设置环境变量。
- **try-catch-finally**:用于异常处理。
- **parallel**:并行执行多个任务。
- **input**:等待用户输入确认。
- **timeout**:设置超时时间。

示例

node {environment {NPM_CONFIG_REGISTRY = 'https://registry.npmmirror.com'}try {stage('Checkout') {checkout scm}stage('Install Dependencies') {sh 'npm install'}stage('Build') {sh 'npm run build'}stage('Test') {sh 'npm test'}stage('Deploy') {input 'Do you want to deploy?'parallel(deployToDev: {sh 'npm run deploy-dev'},deployToProd: {sh 'npm run deploy-prod'})}} catch (err) {currentBuild.result = 'FAILED'throw err} finally {cleanWs()}
}


 


3. **常用指令和功能**

环境变量

- **内置环境变量**:如 `env.BUILD_ID`, `env.WORKSPACE` 等。
- **自定义环境变量**:通过 `environment` 块或 `withEnv` 指令设置。

工具管理

- **tools**:自动安装和配置所需的工具(如 JDK、Node.js 等)。

文件操作

- **writeFile**:写入文件。
- **readFile**:读取文件。
- **archiveArtifacts**:归档构建产物。
- **stash/unstash**:暂存和恢复文件。

构建触发器

- **cron**:定时触发构建。
- **pollSCM**:定期轮询代码仓库。
- **upstream**:由其他项目触发。

并行执行

- **parallel**:并行执行多个任务。

异常处理

- **try-catch-finally**:捕获异常并进行处理。

用户交互

- **input**:等待用户输入确认。

4.**两种类型的特点**

Jenkins Pipeline 的类型分为两种:**声明式 Pipeline (Declarative Pipeline)** 和 **脚本式 Pipeline (Scripted Pipeline)**。以下是这两种类型的中文解释及其特点:

1. **声明式 Pipeline (Declarative Pipeline)**

 中文解释:


声明式 Pipeline 是一种结构化、声明式的语法,用户通过定义各个部分(如 `agent`、`stages`、`steps` 等)来描述整个构建流程。它提供了更清晰和易读的语法结构,适合大多数 CI/CD 场景。

 特点:


- **结构化**:使用固定的语法结构,包括 `pipeline` 块,使得代码更加规范和易于理解。
- **易于维护**:由于其结构化特性,更容易进行版本控制和团队协作。
- **内置验证**:Jenkins 提供了对声明式 Pipeline 的内置验证工具,帮助发现潜在问题。
- **丰富的内置指令**:支持多种内置指令,如 `environment`、`tools`、`post` 等,简化常见任务的配置。


2. **脚本式 Pipeline (Scripted Pipeline)**

中文解释:


脚本式 Pipeline 使用 Groovy 语法编写,提供更大的灵活性和编程能力。用户可以自由编写逻辑,适合复杂的构建场景或需要高度定制化的流水线。

 特点:


- **灵活性高**:完全基于 Groovy 语言,允许编写任意复杂的逻辑。
- **动态性**:可以根据条件动态生成和修改 Pipeline。
- **复杂逻辑支持**:支持更复杂的控制结构,如 `if-else`、`try-catch`、`loops` 等。
- **学习曲线较陡**:由于使用完整的编程语言,对于不熟悉 Groovy 或编程的新手来说可能较难上手。


3.**如何选择**

- **声明式 Pipeline** 更加结构化和易读,适合大多数 CI/CD 场景,特别是新手用户和团队协作。
- **脚本式 Pipeline** 提供了更大的灵活性和编程能力,适合复杂的构建场景或需要高度定制化的流水线。

选择哪种类型的 Pipeline 取决于你的具体需求和团队的技术水平。如果你有更多具体的问题或需要进一步的帮助,请随时提问!

5.**总结**

Jenkins Pipeline 脚本可以包括以下内容:

- **环境配置**:如环境变量、工具版本。
- **构建阶段**:如检查代码、安装依赖、构建、测试、部署。
- **后置操作**:如清理工作空间、发送通知。
- **触发器**:如定时触发、代码提交触发。
- **用户交互**:如等待用户确认。
- **异常处理**:如捕获和处理错误。

选择 Declarative 或 Scripted Pipeline 取决于你的需求和偏好。Declarative 更加结构化和易读,而 Scripted 提供了更大的灵活性。如果你有更多具体的需求或问题,请随时提问!

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

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

相关文章

Python爬虫基础——XPath表达式

首先说一下这节内容在学习过程中存在的问题吧,在爬取百度网页文字时,出现了问题,就是通过表达式在网页搜索中可以定位,但是通过代码无法定位,请教了一位老师,他说是动态链接,目前这部分内容比较…

C# 对象和类型(结构)

❝ 类和结构的区别 字段、属性和方法 按值和引用传送参数 方法重载 构造函数和静态构造函数 只读字段 Object类,其他类型都从该类派生而来 结构 如何将类保持在堆中,通过这种方式可以在数据的生存期上获得很大的灵活性,但性能会有一定的损失。…

NOVA:AutoRegressive Video Generation Without Vector Quantization——自回归视频生成无需向量量化

这篇文章介绍了一种名为NOVA的新型自回归模型,用于高效的文本到图像和文本到视频生成。以下是文章的主要内容总结: 1. 研究背景与问题 自回归大语言模型(LLMs)在自然语言处理(NLP)中表现出色,但…

eNSP之家——路由器--入门实例详解

eNSP路由器配置:IP、DHCP与DNS详解-CSDN博客 练习1:两个路由器配置ip地址,并用ping命令测试连通性。 打开ensp,拉进来两个路由器AR2220,再用auto连接两个路由器。 选中两个路由器,右键启动,等待半分钟路由…

imageio 图片转mp4 保存mp4

目录 安装: imageio 图片转mp4 numpy 保存mp4 安装: FFMPEG: pip install imageio[ffmpeg] pyav: pip install imageio[pyav] imageio 图片转mp4 import glob import osimport cv2 import imageio from natsort import natsortedfrom PIL import …

Spring 设计模式:经典设计模式

Spring 设计模式:经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用,开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…

HTML课堂之搜索工具箱/讲师duluo

目录: 源码在最后 小提示: 1.养成打卡习惯没日多加练习即可提什能力 2.源码在最后,请先看完代码讲解,在尝试自己写,这样容易掌握 3.请勿复制粘贴,因为你没掌握,即使复制粘贴也学不会 课堂重点笔…

根据docker file 编译镜像

比如给到一个Dockerfile 第一步编译镜像 cd /path/to/Dockerfiledocker build -t <DOCKER_IMAGE_NAME> . build 命令编译镜像 -t 镜像名字 . 指dockerfile 所在目录 如果遇到报错 [] Building 0.3s (3/3) FINISHED …

【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch)

【HarmonyOS NEXT】鸿蒙应用点9图的处理&#xff08;draw9patch&#xff09; 一、前言&#xff1a; 首先在鸿蒙中是不支持安卓 .9图的图片直接使用。只有类似拉伸的处理方案&#xff0c;鸿蒙提供的Image组件有与点九图相同功能的API设置。 可以通过设置resizable属性来设置R…

STM32-笔记39-SPI-W25Q128

一、什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且 在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为…

pytest和unittest的区别

pytest 和 unittest 是 Python 中常用的两个测试框架。以下是对 pytest 和 unittest 的详细对比和说明&#xff1a; 目录 1. 简洁性和易用性 2. 灵活性和特性 3. 断言机制 4. 插件和扩展 5. 参数化测试 1. 简洁性和易用性 unittest 风格&#xff1a;unittest 是基于 x…

【微服务】8、分布式事务 ( XA 和 AT )

文章目录 利用Seata解决分布式事务问题&#xff08;XA模式&#xff09;AT模式1. AT模式原理引入2. AT模式执行流程与XA模式对比3. AT模式性能优势及潜在问题4. AT模式数据一致性解决方案5. AT模式一阶段操作总结6. AT模式二阶段操作分析7. AT模式整体特点8. AT模式与XA模式对比…

CTF知识点总结(三)

空格绕过方式&#xff1a; $IFS ${IFS} $IFS$数字 < <> 三种绕过方式&#xff1a; 1.sh /?ip127.0.0.1;echo$IFS$2Y2F0IGZsYWcucGhw|base64$IFS$2-d|sh 2.变量拼接 /?ip127.0.0.1;ag;cat$IFS$2fla$a.php 3.内联注释(将反引号命令的结果作为输入来执行命令) /?i…

《Spring Framework实战》5:Spring Framework 概述

欢迎观看《Spring Framework实战》视频教程 Spring 使创建 Java 企业应用程序变得容易。它为您提供一切 需要在企业环境中采用 Java 语言&#xff0c;并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言&#xff0c;并且可以灵活地创建许多 类型的架构。从 Spring Framework 6.0 开…

解决npm报错:sill idealTree buildDeps

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 报错信息 使用 npm 安装依赖时报错&#xff1a;sill idealTree buildDeps 解决方案 请按照以下步骤进行相关操作&#xff1a; 1、删除 C:\Users{账户}\ 文件夹中的 .npm…

【什么是MVCC?】

MVCC&#xff08;Multi - Version Concurrency Control&#xff09;即多版本并发控制。 一、背景和概念 在数据库系统中&#xff0c;并发控制是非常重要的。当多个事务同时访问和修改数据时&#xff0c;需要一种机制来确保数据的一致性和正确性。MVCC 是一种并发控制的技术&a…

递归构建树菜单节点

一、获取所有分类上下级信息 /*** 获取所有分类上下级信息*/ public R<List<ResearchTypeTreeVO>> getTypeTreeList(){//获取所有分类数据List<ResearchTypeVO> list ibResearchTypeService.getSuperList(null);List<ResearchTypeTreeVO> researchTy…

PHP语言的正则表达式

PHP语言中的正则表达式详解 引言 在编程中&#xff0c;字符串处理是一个非常常见的问题&#xff0c;而正则表达式&#xff08;Regular Expressions&#xff0c;简称Regex&#xff09;则是高效处理字符串的强大工具。PHP作为一种广泛应用的服务器端编程语言&#xff0c;也提供…

键盘过滤驱动

概述 irp请求会从io管理器中传递到设备栈中依次向下发送&#xff0c;当到达底层真实设备处理完成后&#xff0c;会依次返回&#xff0c;这时如果在设备栈中有我们自己注册的设备&#xff0c;就可以起到一个过滤的功能。键盘过滤驱动就是如此&#xff0c;通过附加到原本存在的设…

Ubuntu上安装Apache Spark

在Ubuntu上安装Apache Spark的步骤如下&#xff1a; 1. 安装Java Spark是用Scala编写的&#xff0c;并且依赖Java。因此&#xff0c;首先需要安装Java。 安装OpenJDK 8&#xff08;或更高版本&#xff09; 执行以下命令安装OpenJDK&#xff1a; sudo apt update sudo apt …