目录
[1. **Declarative Pipeline**](#1. Declarative Pipeline)
[2. **Scripted Pipeline**](#2. Scripted Pipeline)
[3. **常用指令和功能**](#3. 常用指令和功能)
[1. **声明式 Pipeline (Declarative Pipeline)**](#1. 声明式 Pipeline (Declarative Pipeline))
[2. **脚本式 Pipeline (Scripted Pipeline)**](#2. 脚本式 Pipeline (Scripted Pipeline))
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**:设置一些选项,如超时时间、并发控制等。
示例
Groovy
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**:设置超时时间。
示例
Groovy
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 提供了更大的灵活性。如果你有更多具体的需求或问题,请随时提问!