当前位置: 首页 > news >正文

详解Jenkins 的 Declarative Pipeline中post 语法

在 Jenkins 的 Declarative Pipeline 中,post 是一个非常重要的 声明式语法块,用于定义在 Pipeline 或某个 stage 执行完成后,根据其执行结果自动执行的后续操作。

简单来说:

post 就是“事后处理”的逻辑,比如:无论成功还是失败,都要发送通知、归档日志、清理资源等。

一、post 的作用

post 块可以放在两个位置:

  1. Pipeline 级别:作用于整个 Pipeline 执行完成后
  2. Stage 级别:作用于某个 stage 执行完成后

它支持根据不同的构建状态来触发不同的操作,常见的状态包括:

状态触发条件
successPipeline/stage 成功完成
failurePipeline/stage 失败(例如编译失败、测试失败)
unstable构建完成但有测试失败、静态检查警告等(如单元测试失败)
aborted用户手动取消构建
always无论什么结果,都会执行
changed当前状态与上一次构建状态不同时才执行

二、语法结构

post {// 根据不同状态定义要执行的操作success {// 构建成功时执行}failure {// 构建失败时执行}unstable {// 构建不稳定时执行}aborted {// 构建被取消时执行}always {// 总是执行}changed {// 状态发生变化时执行(如从失败变成功)}
}

三、例子中的 post 解读

post {always {cleanWs()  // 总是清理工作空间}failure {emailext(subject: "构建失败: ${currentBuild.fullDisplayName}",body: "扫描发现高危漏洞,请查看报告:${env.BUILD_URL}",recipientProviders: [developers(), requestor()],mimeType: 'text/html')}
}

含义解释:

  • always { cleanWs() }
    → 无论构建成功、失败还是被取消,都会执行 cleanWs(),即清理 Jenkins 工作区(workspace),释放磁盘空间,避免残留文件影响下次构建。

  • failure { emailext(...) }
    → 只有当整个 Pipeline 失败时(比如安全门禁触发 error),才会发送一封邮件通知相关责任人(开发者 + 触发者)。

四、常见使用场景

场景使用方式
发送通知邮件、企业微信、钉钉、Slack
归档报告成功时归档测试报告、安全扫描报告
清理资源总是清理临时文件、容器、工作区
告警通知失败时通知负责人
上报指标构建完成后上报到监控系统

五、完整示例(Pipeline 级 + Stage 级)

pipeline {agent anystages {stage('Build') {steps {sh 'make'}post {success {echo "编译成功!"}failure {echo "编译失败!"}}}stage('Test') {steps {sh 'make test'}}}post {success {emailext(subject: '构建成功',body: '构建成功,一切正常。',to: 'dev-team@example.com')}failure {emailext(subject: '构建失败',body: '构建失败,请立即查看:${BUILD_URL}',to: 'dev-team@example.com, manager@example.com')}always {cleanWs()  // 清理工作空间sh 'rm -f *.tmp'  // 删除临时文件}}
}

六、注意事项

  1. post 中不能写 stages 或 steps,它本身就是 steps 的容器。
  2. 支持所有 Jenkins Step,如 shechomailscriptjunitarchiveArtifacts 等。
  3. 推荐将资源清理(如 cleanWs())放在 always 中,确保不残留文件。
  4. 敏感操作(如部署生产)可放在 success 中,避免失败后继续执行。

总结

关键词含义
post声明“事后动作”
always不管结果如何都执行
success成功后执行
failure失败后执行
cleanWs()清理工作区,常用在 always

一句话总结
post 就像是“构建完成后的钩子函数”,让你可以优雅地处理通知、清理、归档等收尾工作。

http://www.dtcms.com/a/477615.html

相关文章:

  • 淘宝客怎么在网站做推广上海新闻坊
  • 无人机中继器模式技术对比
  • HTTP与HTTPS:从明文到加密的Web安全革命
  • LINUX1013 shell:sed ./sed.sh 1.txt sed -f sed.sh 1.txt awk
  • 无人机技术解析:遥传、数传与图传的核心作用
  • 反无人机和反无人机系统(C-UAS)技术
  • 基于ARM+FPGA的无人机数据采集卡,6通道24bit采集
  • 扬州哪里做网站玉树营销网站建设公司
  • 【Linux指南】Linux命令行进度条实现原理解析
  • 如何基于ElasticsearchRetriever构建RAG系统
  • 网站建设内容与实现功能免费信息发布网有哪些
  • 【Java】nacos的作用(事例)以及其如何发挥功能的?
  • 杨辉三角的变形
  • 试从源码角度分析Handler的post和sendMessage方法的区别和应用场景?
  • 网站流量如何突破厦门建设局局长李德才
  • 外包网站设计网站建设的主要技术路线
  • iOS 26 电耗监测与优化,耗电问题实战 + 多工具 辅助策略
  • 企业前端网站模板下载 HTML前端模板网站
  • 【RabbitMQ】 RabbitMQ Overview
  • uniapp+vue3+vite+ts+xr-frame实现ar+vr渲染踩坑记
  • 如何选择适合的加密方法来保护云计算中的数据
  • Linux 云计算核心技术:原理、组件与 K8s 实战部署
  • aws docker安装,ec2安装docker-compose
  • 2025上海国际数据中心及云计算产业展览会影响力如何?有啥亮点?
  • 关于网站建设的意义亚马逊计划裁员1万人
  • 南宁做网站培训网页游戏排行榜前十2023
  • Windows ACL 原理详解与使用示例
  • Rider下Avalonia 项目启动问题完整解决方案
  • MySQL默认端口为何是3306?修改后如何管理?
  • 中间件常用组件的原理和设计