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

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.mrgr.cn/news/83030.html

相关文章:

  • 00000007_C语言设计模式
  • vulnhub靶场【DC系列】之7
  • DeepSeek-V3与GPT-4o的对比详解
  • 企业三要素如何用PHP实现调用
  • SQL使用视图
  • 【物联网原理与运用】知识点总结(上)
  • PyCharm简单调试
  • 左神算法基础巩固--3
  • SpringBootWeb案例-1(day10)
  • jenkins入门13--pipeline
  • 2020 年 12 月青少年软编等考 C 语言五级真题解析
  • moviepy 将mp4视频文件提取音频mp3 - python 实现
  • Linux初识——基本指令
  • Requests-数据解析bs4+xpath
  • 【0385】Postgres内核 OS 磁盘上创建 slot ( 3 - 1 )
  • STM32-笔记38-I2C-oled实验
  • STM32-DMA数据转运
  • R语言装环境Gcc报错以及scater包的安装
  • (七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络
  • 用Python实现简单的任务自动化
  • SQL从入门到实战
  • 【WPF】使用BitmapImage给Image的Source赋值,并释放原占用资源,避免删除原文件时导致程序崩溃
  • Vue 组件开发:构建高效可复用的 UI 构建块
  • 数据库语句学习
  • 51c大模型~合集102
  • 121 买入股票的最佳时机