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

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 any
    environment {
        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.kler.cn/a/471167.html

相关文章:

  • Element-plus表单总结
  • 寒假刷题Day1
  • PyCharm简单调试
  • 高等数学-----极限、函数、连续
  • 深度评测uni-app x:开启跨平台开发新篇章
  • 深入刨析数据结构之排序(上)
  • 【Linux网络编程】第二十一弹---深入解析I/O多路转接技术之poll函数:优势、缺陷与实战代码
  • git①111
  • HDFS架构原理
  • TextMeshPro保存偏移数据
  • React18实现账单管理项目(三):日期分组与图标适配
  • 请求是如何通过k8s service 路由到对应的pod
  • Express 加 sqlite3 写一个简单博客
  • Oracle SQL子查询实例
  • UE4_用户控件_4_Widgets嵌套Widgets构建复杂系统
  • VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略
  • Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0
  • 分布式与集群
  • 基于SpringBoot+Vue的考研百科网站
  • UG NX二次开发(C++)-UFun函数-按照特定方向提取轮廓线
  • el-table拖拽表格
  • 吉客云与金蝶云星空数据集成技术详解
  • 20250107在WIN10下使用无线ADB连接Andorid7.1.2
  • vulnhub whowantstobeking靶机
  • C++中,typename
  • 初学stm32 --- 电源监控