首页/开发/CI/CD 与发布速查/Jenkins post 后置处理
工具链要点63 条

Jenkins post 后置处理

流水线或阶段结束后的收尾逻辑:always、success、failure、unstable、changed、cleanup 分条件执行,用于归档、通知与清理。

CI/CD 与发布速查开发更新于 2026-10-13

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 只处理每次构建的收尾动作。

易错点

  • 把清理写在 steps 末尾:异常中断时不会执行,放 cleanup 才可靠
  • post 里抛异常:掩盖原始失败原因,排查一开始就走偏
  • junit 漏 allowEmptyResults:无报告时归档报错,构建被误判为失败
  • 通知写在 always:每次成功也发消息造成噪声,按 failure 与 changed 分级
  • 阶段级 post 写成流水线级:作用域不同触发次数也不同,按需选择层级
  • 把归档放 success:失败构建的报告反而丢失,报告归档放 always

数据来源与参考

  • Jenkins 手册《Pipeline Syntax》(post)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌