Jenkinsfile 声明式流水线
以 Jenkinsfile 定义流水线:pipeline 顶层包含 agent、stages、post,配置随代码评审与版本管理,替代界面里的手工配置,让流水线定义可追溯、可回滚。声明式提供固定骨架、可读性好、评审有共同语言;复杂逻辑用共享库或脚本文件封装,而不是全部塞进 Jenkinsfile。
基本信息
| 结构 | pipeline 块包含 agent、stages、post |
|---|---|
| 阶段 | stage 加 steps 描述步骤 |
| 后置 | post 支持 always、success、failure |
| 存放 | 仓库根目录 Jenkinsfile,随代码评审 |
| 扩展 | 复杂逻辑抽到共享库或脚本文件 |
典型使用场景
- 标准化骨架:团队阅读成本一致,评审有共同语言。
- 多分支流水线:每个分支共用同一份 Jenkinsfile。
- 共享库调用:通用步骤封装成库函数复用。
- 并行执行:parallel 块让独立阶段同时运行。
- 条件触发:when 控制阶段在特定分支或标签执行。
声明式流水线
声明式流水线
pipeline {
agent any
stages {
stage('build') {
steps { sh 'make build' }
}
stage('test') {
steps { sh 'make test' }
}
}
post {
always { junit 'reports/*.xml' }
}
}顶层结构
| 块 | 作用 |
|---|---|
| agent | 指定执行节点或标签 |
| stages | 阶段与步骤序列 |
| post | always、success、failure 收尾动作 |
| environment | 环境变量与凭据绑定 |
声明式骨架清晰但表达力有限:复杂逻辑封装成共享库或脚本文件,而不是继续堆在文件里。
凭据用绑定方式注入:不要硬编码进脚本,日志里也不会被打印出来。
界面里临时改动的配置不落库:改动要回到 Jenkinsfile 提交,版本才可追溯。
何时用脚本式:需要循环、异常捕获与动态阶段时,脚本式或共享库更顺手,两种风格可以混用。
when 与 input 是声明式常用能力:按分支、标签、变更范围控制执行,关键环境接人工确认。
并行与矩阵:声明式支持 parallel 与 matrix 指令,多平台任务不必复制阶段定义。
失败排查可从界面重放脚本辅助定位,但修复结果仍要回到文件提交,保证版本一致。
构建留档:junit 与 archiveArtifacts 等步骤在 post 里统一收尾,报告与产物不随构建机清理丢失。