post 干什么
Jenkins 流水线或阶段结束后的收尾段:按结果条件分派——always、success、failure、unstable、changed、cleanup 各自在对应场景执行。典型用途是归档测试报告、失败时收集诊断、按结果发通知与清理临时资源。Declarative 流水线里阶段级与流水线级都可以写 post,作用域越小触发越多。
基本信息
| always | 无论成败都执行 |
|---|---|
| success | 仅成功时执行 |
| failure | 失败时收集诊断与通知 |
| unstable | 结果不稳定时执行 |
| changed | 状态与上次不同时执行 |
| cleanup | 所有条件之后最后执行 |
| 作用域 | 阶段级与流水线级都可用 |
典型使用场景
- 报告归档:always 里跑 junit 与 archiveArtifacts
- 失败诊断:failure 里收集日志与现场
- 通知分级:failure 与 changed 推送告警,成功默认静默
- 清理收尾:cleanup 删临时资源,保证最后执行
- 状态变化提醒:changed 捕捉从红转绿的恢复信号
- 阶段级收尾:每个阶段独立归档自己的产物
失败收集与清理
失败收集与清理
post {
always {
junit 'reports/*.xml', allowEmptyResults: true # 归档测试报告
}
failure {
sh 'collect-diagnostics.sh || true' # 收集现场,失败不影响主流程
}
changed {
echo '构建状态发生变化' # 常用于恢复通知
}
cleanup {
deleteDir() # 最后执行,清理工作区
}
}条件触发时机
| 条件 | 何时执行 | 典型用途 |
|---|---|---|
| always | 无论成败 | 归档、通知 |
| success | 仅成功 | 发布后续提示 |
| failure | 失败时 | 诊断收集 |
| unstable | 结果不稳定时 | 测试失败记录 |
| changed | 与上次不同时 | 恢复告警 |
| cleanup | 全部之后最后 | 删临时资源 |
诊断收集加 || true:收集脚本自身失败不应再叠加一次失败。
cleanup 的语义是最后执行:删临时目录、回滚脚手架放这里最可靠。
post 内的报错也会写进构建日志:排查失败先看主流程,别被收尾步骤带偏。
收尾分工建议
- 流水线级收尾:整条流水线统一汇总结果与通知,阶段级只做本阶段的事
- 并行分支里的阶段 post 各自执行:分支内失败触发各自收尾,全局汇总放流水线级
保留策略与 post 分工:历史构建保留数交给 options 的构建保留器,post 只处理每次构建的收尾动作。