120.Jenkins里的Pipeline Script

embedded/2025/1/11 9:24:42/

目录

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.ppmy.cn/embedded/152968.html

相关文章

【前端】【HTML】入门基础知识

参考视频&#xff1a;【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>&#xff1a;一级标题&#xff0c;通常用于页面的主标题&#xff0c;字体较大且醒目。 <h2>&#xff1a;二级标题&#xff0c;用于副标题或主要章节标…

1. npm 常用命令详解

npm 常用命令详解 npm&#xff08;Node Package Manager&#xff09;是 Node.js 的包管理工具&#xff0c;用于安装和管理 Node.js 应用中的依赖库。下面是 npm 的一些常用命令及其详细解释和示例代码。 镜像源 # 查询当前使用的镜像源 npm get registry# 设置为淘宝镜像源 …

Java一个简单的反弹动画练习

文章目录 说明代码详解创建窗体代码创建绘图板创建线程 运行结果完整代码 说明 做了一个小球和星型做反弹动画的窗体作为练习&#xff0c;分享给大家&#xff0c;为了方便和我一样的小白可以看的比较明白&#xff0c;所以尽量详细的标注了注释&#xff0c;希望能帮到同样在学习…

OpenCV计算机视觉 06 图像轮廓检测(轮廓的查找、绘制、特征、近似及轮廓的最小外接圆外接矩形)

目录 图像轮廓检测 轮廓的查找 轮廓的绘制 轮廓的特征 面积 周长 根据面积显示特定轮廓 轮廓的近似 给定轮廓的最小外接圆、外接矩形 外接圆 外接矩形 图像轮廓检测 轮廓的查找 API函数 image, contours, hierarchy cv2.findContours(img, mode, method) 代入参…

深度学习张量的秩、轴和形状

深度学习张量的秩、轴和形状 秩、轴和形状是在深度学习中我们最关心的张量属性。 秩轴形状 秩、轴和形状是在深度学习中开始使用张量时我们最关心的三个属性。这些概念相互建立&#xff0c;从秩开始&#xff0c;然后是轴&#xff0c;最后构建到形状&#xff0c;所以请注意这…

儿童玩具加拿大SOR/2011-17测试安全标准

加拿大儿童玩具都有什么标准&#xff1f; SOR/2011-17&#xff08;玩具法规&#xff09;SOR/2016-188&#xff08;邻苯二甲酸盐法规&#xff09;SOR/2016-193&#xff08;表面涂层材料法规&#xff09;SOR/2018-83&#xff08;含铅消费品法规&#xff09; 加拿大的技术法规通常…

深入理解 pytest_runtest_makereport:如何在 pytest 中自定义测试报告

pytest_runtest_makereport 是 pytest 系统中的一个钩子函数&#xff0c;它允许我们在测试执行时获取测试的报告信息。通过这个钩子&#xff0c;我们可以在测试运行时&#xff08;无论是成功、失败还是跳过&#xff09;对测试结果进一步处理&#xff0c;比如记录日志、添加自定…

HTML5 加载动画(Loading Animation)

加载动画&#xff08;Loading Animation&#xff09;详解 概述 加载动画是指在数据加载过程中&#xff0c;向用户展示的一种视觉效果&#xff0c;旨在提升用户体验&#xff0c;告知用户系统正在处理请求。它可以减少用户的等待焦虑感&#xff0c;提高界面的互动性。 常见的加…