目录
[1. pipeline(顶层区块)](#1. pipeline(顶层区块))
[2. agent(执行节点)](#2. agent(执行节点))
[3. stages(阶段集合)](#3. stages(阶段集合))
[4. stage(单个阶段)](#4. stage(单个阶段))
[5. steps(具体步骤)](#5. steps(具体步骤))
[6. post(后置处理)](#6. post(后置处理))
[7. environment(环境变量)](#7. environment(环境变量))
[8. parameters(参数化构建)](#8. parameters(参数化构建))
[9. options(Pipeline 配置选项)](#9. options(Pipeline 配置选项))
[10. triggers(触发条件)](#10. triggers(触发条件))
[11. tools(工具路径配置)](#11. tools(工具路径配置))
[12. input(用户交互)](#12. input(用户交互))
[13. when(条件执行)](#13. when(条件执行))
[14. parallel(并行执行)](#14. parallel(并行执行))
[■其它 === 1.cleanWs是jenkins的内置命令吗,如何使用](#■其它 === 1.cleanWs是jenkins的内置命令吗,如何使用)
[1. 安装 Workspace Cleanup Plugin](#1. 安装 Workspace Cleanup Plugin)
[2. cleanWs 的核心用法](#2. cleanWs 的核心用法)
[(1) 简单清理(清空所有文件)](#(1) 简单清理(清空所有文件))
[(2) 排除指定文件/目录](#(2) 排除指定文件/目录)
[(3) 仅在构建失败时清理](#(3) 仅在构建失败时清理)
[3. 在 Pipeline 中的使用](#3. 在 Pipeline 中的使用)
[声明式 Pipeline](#声明式 Pipeline)
[脚本式 Pipeline](#脚本式 Pipeline)
[4. cleanWs vs deleteDir()](#4. cleanWs vs deleteDir())
[5. 注意事项](#5. 注意事项)
[■其它 === 2.如何查看jenkins中已经定义的节点](#■其它 === 2.如何查看jenkins中已经定义的节点)
[1. 通过 Web 界面查看](#1. 通过 Web 界面查看)
[(1) 进入节点管理页面](#(1) 进入节点管理页面)
[(2) 查看节点列表](#(2) 查看节点列表)
[(3) 查看节点详情](#(3) 查看节点详情)
[2. 通过命令行查看(需管理员权限)](#2. 通过命令行查看(需管理员权限))
[(1) 使用 Jenkins CLI](#(1) 使用 Jenkins CLI)
[(2) 使用 Groovy 脚本](#(2) 使用 Groovy 脚本)
[3. 通过 API 查看](#3. 通过 API 查看)
[■其它 === 3.jenkins pipeline 中的post是什么](#■其它 === 3.jenkins pipeline 中的post是什么)
[post 的核心特性](#post 的核心特性)
[post 的条件关键字](#post 的条件关键字)
[post 的语法示例(声明式 Pipeline)](#post 的语法示例(声明式 Pipeline))
[post 的常见用途](#post 的常见用途)
[脚本式 Pipeline 的替代方案](#脚本式 Pipeline 的替代方案)
===
■模板
Groovy
pipeline {
agent any
options { ... }
parameters { ... }
environment { ... }
triggers { ... }
tools { ... }
stages {
stage('Stage 1') {
when { ... }
agent { ... }
environment { ... }
steps { ... }
}
stage('Stage 2') {
parallel { ... }
}
}
post { ... }
}
===
■Jenkins的Pipline中有哪些区块
在 Jenkins 声明式 Pipeline 中,核心结构由多个**区块(Section)**组成,每个区块负责不同的功能。以下是完整的区块分类及其作用:
1. pipeline
(顶层区块)
-
作用 :定义整个 Pipeline 的入口,所有其他区块必须包含在
pipeline
内。 -
示例:
Groovypipeline { // 其他区块在此定义... }
2. agent
(执行节点)
-
作用:指定 Pipeline 在哪个 Jenkins 节点(或容器)上运行。
-
常见选项:
-
any
: 任意可用节点。 -
none
: 不全局指定节点(需在每个stage
中单独定义)。 -
label 'linux'
: 在标签为linux
的节点上运行。 -
docker
: 在 Docker 容器中运行(需指定镜像)。
-
-
示例:
Groovyagent { docker { image 'maven:3.8.4' // 使用 Maven 容器 args '-v /tmp:/tmp' // 挂载目录 } }
3. stages
(阶段集合)
-
作用 :包裹所有具体的阶段(
stage
),是 Pipeline 的核心逻辑部分。 -
示例:
Groovystages { stage('Build') { ... } stage('Test') { ... } stage('Deploy') { ... } }
4. stage
(单个阶段)
-
作用:定义 Pipeline 中的一个逻辑步骤(如构建、测试、部署)。
-
必须包含 :至少一个
steps
或parallel
区块。 -
示例:
Groovystage('Build') { steps { sh 'mvn clean package' } }
5. steps
(具体步骤)
-
作用 :在
stage
中定义具体的操作(如执行 Shell 命令、调用插件)。 -
常用命令:
-
sh
: 执行 Linux Shell 命令。 -
bat
: 执行 Windows Batch 命令。 -
script
: 嵌入 Groovy 脚本(用于复杂逻辑)。
-
-
示例:
Groovysteps { sh 'echo "Hello Jenkins!"' script { def version = '1.0.0' echo "Building version: ${version}" } }
6. post
(后置处理)
-
作用:根据 Pipeline 的执行结果(成功、失败等)触发后置操作。
-
条件块:
-
always
: 始终执行。 -
success
: 仅成功时执行。 -
failure
: 仅失败时执行。 -
aborted
: 被中止时执行。
-
-
示例:
Groovypost { always { cleanWs() // 清理工作区 } failure { slackSend message: '构建失败!' } }
7. environment
(环境变量)
-
作用:定义全局或阶段级的环境变量(如密钥、路径)。
-
示例:
Groovyenvironment { // 直接定义变量 APP_VERSION = '1.0.0' // 引用 Jenkins 凭据 AWS_ACCESS_KEY = credentials('aws-access-key') }
8. parameters
(参数化构建)
-
作用:定义用户输入的参数(如字符串、选项、文件)。
-
常见类型:
-
string
: 字符串参数。 -
choice
: 下拉选项。 -
booleanParam
: 布尔值。 -
file
: 文件上传。
-
-
示例:
Groovyparameters { string(name: 'DEPLOY_ENV', defaultValue: 'dev', description: '部署环境') choice(name: 'REGION', choices: ['us-east', 'eu-central'], description: 'AWS 区域') }
9. options
(Pipeline 配置选项)
-
作用:配置 Pipeline 的全局行为(如超时时间、重试策略)。
-
常用选项:
-
timeout(time: 30, unit: 'MINUTES')
: 设置超时时间。 -
retry(3)
: 失败时重试 3 次。 -
disableConcurrentBuilds()
: 禁止并行执行。
-
-
示例:
Groovyoptions { timeout(time: 1, unit: 'HOURS') disableConcurrentBuilds() }
10. triggers
(触发条件)
-
作用:定义 Pipeline 的触发方式(如定时触发、SCM 变更触发)。
-
常见触发器:
-
cron('H */4 * * *')
: 定时触发(每 4 小时)。 -
pollSCM('H */5 * * *')
: 轮询 SCM 变更。 -
upstream(upstreamProjects: 'job1,job2')
: 上游任务触发。
-
-
示例:
Groovytriggers { cron('H 2 * * *') // 每天凌晨 2 点触发 }
11. tools
(工具路径配置)
-
作用:指定构建工具(如 JDK、Maven)的路径(需提前在 Jenkins 全局配置中定义)。
-
示例:
Groovytools { maven 'Maven-3.8.4' // 使用全局配置的 Maven 工具 jdk 'JDK-11' }
12. input
(用户交互)
-
作用:暂停 Pipeline 并等待用户输入(如确认部署)。
-
示例:
Groovystage('Deploy to Prod') { steps { input(message: '确认部署到生产环境?', ok: '确认') } }
13. when
(条件执行)
-
作用 :控制某个
stage
是否执行(基于条件判断)。 -
常见条件:
-
branch 'master'
: 仅在master
分支执行。 -
expression { return params.DEPLOY_ENV == 'prod' }
: 根据参数值判断。
-
-
示例:
Groovystage('Deploy') { when { branch 'master' expression { params.DEPLOY_ENV == 'prod' } } steps { ... } }
14. parallel
(并行执行)
-
作用 :并行运行多个
stage
(加速构建)。 -
示例:
Groovystage('Test') { parallel { stage('Unit Test') { steps { sh 'mvn test' } } stage('Integration Test') { steps { sh 'mvn verify' } } } }
■其它 === 1.cleanWs是jenkins的内置命令吗,如何使用
cleanWs
不是 Jenkins 的内置命令 ,它是由 Workspace Cleanup Plugin(工作区清理插件)提供的功能。该插件需要单独安装,但因其强大的灵活性(如按条件清理、排除文件等),在 Jenkins 实践中被广泛使用。
1. 安装 Workspace Cleanup Plugin
-
步骤 :
进入 Jenkins 控制台 → Manage Jenkins → Plugins → Available plugins → 搜索
Workspace Cleanup
→ 安装并重启 Jenkins。
2. cleanWs
的核心用法
基本语法
Groovy
cleanWs(
deleteDirs: Boolean, // 是否删除子目录(默认 true)
patterns: [[pattern: String, type: String]], // 排除或包含的文件模式
cleanWhenSuccess: Boolean, // 构建成功时清理(默认 true)
cleanWhenAborted: Boolean, // 构建中止时清理(默认 true)
cleanWhenFailure: Boolean, // 构建失败时清理(默认 true)
cleanWhenUnstable: Boolean // 构建不稳定时清理(默认 true)
)
常用场景示例
(1) 简单清理(清空所有文件)
Groovy
steps {
cleanWs() // 清空工作区所有内容
}
(2) 排除指定文件/目录
Groovy
steps {
cleanWs(
patterns: [
[pattern: 'logs/**', type: 'EXCLUDE'], // 保留 logs 目录
[pattern: '*.config', type: 'EXCLUDE'] // 保留所有 .config 文件
]
)
}
(3) 仅在构建失败时清理
Groovy
steps {
cleanWs(
cleanWhenSuccess: false, // 成功时不清理
cleanWhenFailure: true // 仅失败时清理
)
}
3. 在 Pipeline 中的使用
声明式 Pipeline
groovy
复制
下载
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
post {
always {
cleanWs(
patterns: [
[pattern: 'target/*.jar', type: 'EXCLUDE'] // 保留构建产物
]
)
}
}
}
脚本式 Pipeline
Groovy
node {
try {
stage('Build') {
sh 'mvn clean package'
}
} finally {
cleanWs() // 无论结果如何,清理工作区
}
}
4. cleanWs
vs deleteDir()
特性 | cleanWs |
deleteDir() |
---|---|---|
来源 | Workspace Cleanup 插件 | Jenkins 内置 |
灵活性 | 支持按条件清理、排除文件 | 只能删除整个目录 |
适用场景 | 需要精细控制清理内容的场景 | 快速清空目录 |
依赖 | 需安装插件 | 无需插件 |
5. 注意事项
-
路径问题 :
cleanWs
默认清理当前工作目录(WORKSPACE
),确保操作目录正确。 -
权限问题 :
Jenkins 进程需要有工作目录的读写权限。
-
文件占用 :
若文件被其他进程锁定(如正在运行的 JAR 文件),可能导致清理失败。
-
插件兼容性 :
确保插件版本与 Jenkins 兼容(插件文档会注明支持的版本)。
总结
-
需要灵活清理工作区时 :优先使用
cleanWs
,通过patterns
参数控制保留或删除的文件。 -
简单快速清理时 :直接使用内置的
deleteDir()
。 -
关键场景 :建议在
post { always { ... } }
中清理工作区,避免残留文件占用磁盘空间。
■其它 === 2.如何查看jenkins中已经定义的节点
1. 通过 Web 界面查看
(1) 进入节点管理页面
-
打开 Jenkins 主页 → 点击左侧菜单的
Manage Jenkins
(管理 Jenkins)。 -
在管理页面中找到
Nodes
(节点)或Manage Nodes and Clouds
(管理节点和云),点击进入。
(2) 查看节点列表
-
页面会列出所有已定义的节点,包括:
-
Built-In Node
(主节点,即 Jenkins 控制器)。 -
其他代理节点(如
linux-agent
、windows-agent
等)。
-
(3) 查看节点详情
-
点击节点名称(如
linux-agent
)→ 进入节点详情页,可查看:-
节点状态(在线/离线)。
-
标签(Labels)。
-
工作目录路径(Remote root directory)。
-
启动方式(Launch method)。
-
系统信息(如操作系统、Java 版本)。
-
2. 通过命令行查看(需管理员权限)
(1) 使用 Jenkins CLI
Jenkins 提供了命令行工具(CLI),可通过以下命令列出所有节点:
Groovy
java -jar jenkins-cli.jar -s http://your-jenkins-url list-nodes
(2) 使用 Groovy 脚本
在 Jenkins 的 Script Console
(脚本控制台)中执行以下脚本:
Groovy
Jenkins.instance.nodes.each { node ->
println "节点名称: ${node.displayName}"
println "标签: ${node.labelString}"
println "工作目录: ${node.remoteFS}"
println "状态: ${node.toComputer().online ? '在线' : '离线'}"
println "------"
}
3. 通过 API 查看
调用 Jenkins REST API 获取节点列表(需权限):
Groovy
curl -u username:api-token http://your-jenkins-url/computer/api/json
返回的 JSON 数据中会包含所有节点的详细信息。
关键信息说明
字段 | 说明 |
---|---|
节点名称 | 节点的唯一标识符(如 linux-agent )。 |
标签 | 节点的分类标记(如 linux 、docker ),用于任务调度。 |
工作目录 | 节点的工作路径(如 /var/jenkins/workspace )。 |
执行器数量 | 节点可同时运行的任务数(默认为 1)。 |
状态 | 节点是否在线(Online/Offline)。 |
■其它 === 3.jenkins pipeline 中的post是什么
post
的核心特性
-
条件触发 :通过预定义的条件关键字 (如
always
、success
、failure
),指定不同执行结果下需要运行的步骤。 -
执行顺序 :
post
中的操作会在所有stages
执行完毕后运行。 -
灵活性:可以同时定义多个条件块,每个块内的步骤独立执行。
post
的条件关键字
以下是常用的条件类型:
条件关键字 | 触发条件 |
---|---|
always |
无论 Pipeline 结果如何,始终执行(最常用,例如清理工作目录) |
success |
仅当 Pipeline 全部阶段成功完成时执行(例如发送成功通知) |
failure |
仅当 Pipeline 任何阶段失败时执行(例如发送失败报警或记录日志) |
aborted |
当 Pipeline 被手动中止时执行(例如通知构建被取消) |
unstable |
当 Pipeline 标记为 unstable 时执行(例如测试通过但覆盖率不足) |
changed |
当 Pipeline 状态与上一次不同时执行(例如从失败恢复为成功时通知) |
post
的语法示例(声明式 Pipeline)
Groovy
pipeline {
agent any
stages {
// 主要构建阶段...
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
// 后置操作
post {
// 无论结果如何,始终清理工作目录
always {
deleteDir()
}
// 构建成功时发送通知
success {
slackSend channel: '#builds', message: '构建成功!'
}
// 构建失败时发送邮件
failure {
mail to: '[email protected]', subject: '构建失败', body: '请检查日志!'
}
// 构建被中止时记录日志
aborted {
echo 'Pipeline 被用户中止'
}
}
}
post
的常见用途
-
清理工作目录
Groovypost { always { deleteDir() // 清空工作区 } }
-
发送通知
Groovypost { failure { slackSend channel: '#alerts', message: '构建失败: ${BUILD_URL}' } }
-
归档构建产物
Groovypost { success { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true } }
-
生成测试报告
Groovypost { always { junit 'target/surefire-reports/*.xml' // 记录单元测试结果 } }
注意事项
-
仅适用于声明式 Pipeline
post
是声明式 Pipeline 的语法特性,脚本式 Pipeline 需通过try-catch-finally
实现类似逻辑。 -
条件块的执行顺序
Jenkins 会按
post
中定义的顺序执行条件块,但每个条件块是否执行仍取决于其触发条件。 -
灵活组合条件
可以通过嵌套逻辑实现更复杂的条件判断(例如:仅在失败且不是中止时触发)。
脚本式 Pipeline 的替代方案
脚本式 Pipeline 中没有原生 post
块,但可通过 try-catch-finally
模拟类似行为:
Groovy
node {
try {
stage('Build') {
// 构建步骤...
}
} catch (err) {
// 失败处理
echo "构建失败: ${err}"
} finally {
// 始终执行的清理操作(类似 post { always })
deleteDir()
}
}
总结
post
是 Jenkins Pipeline 中管理后置操作的核心机制,能帮助你在不同构建结果下自动执行关键任务(如清理、通知、归档)。掌握它的用法可以让你的 Pipeline 更健壮、更易维护!
==