首页/开发/CI/CD 与发布速查/Helm Hooks(发布前后钩子)
发布策略60 条

Helm Hooks(发布前后钩子)

在发布生命周期的关键节点执行一次性任务:升级前跑数据库迁移 Job、升级后发通知、测试钩子做验收;钩子用注解与权重控制执行顺序。

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

Helm 钩子是什么

Helm 钩子在发布生命周期的关键节点执行一次性任务:升级前跑数据库迁移 Job、升级后发通知、测试钩子做验收;钩子用注解与权重控制执行顺序。钩子失败会导致发布中止——迁移没完成就不继续升级,这正是需要的语义。载体通常是 Job,也可以是其他资源。

基本信息

常用钩子安装前后、升级前后、回滚后与测试钩子
顺序hook-weight 数值越小越先执行
清理hook-delete-policy 控制 Job 留存
载体通常为 Job,也可为其他资源
失败语义钩子未成功则发布中止
幂等要求钩子任务应可重复执行,重试不产生副作用
调试先渲染清单核对钩子配置再执行

常用钩子与时机

钩子触发时机典型用途
pre-upgrade升级前数据库迁移
post-upgrade升级后通知与缓存预热
post-rollback回滚后回退脚本
test手动测试发布验收

迁移钩子

迁移钩子
apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
  annotations:
    # 升级前执行,权重靠前
    "helm.sh/hook": pre-upgrade
    "helm.sh/hook-weight": "-5"
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: migrate
        image: registry.example.com/migrate:1.9.0

典型使用场景

  • 数据库迁移:升级前执行迁移 Job,失败即阻断发布
  • 发布通知:升级完成后触发通知任务
  • 缓存预热:新版本上线后先预热再放开流量
  • 验收测试:用测试钩子跑冒烟用例,结果写入发布记录
  • 回滚处理:回滚后执行清理或数据回退脚本
  • 升级编排:迁移钩子按权重排序,保证多步任务先后有序
  • 失败重试:钩子修复后重新升级,Job 记录保留供排查
钩子失败会导致发布中止:迁移没完成就不继续升级,这正是需要的语义。钩子资源随发布一起渲染生成,回滚时一并回退。
钩子任务要设超时:数据库大表迁移可能长时间运行,超时策略与重试语义要预先定义。
钩子镜像要与应用版本对齐:迁移脚本与代码版本脱节会造成数据结构错位。

易错点

  • 迁移 Job 长时间不结束:升级等待超时,发布被卡在中途
  • 钩子 Job 未配置清理策略:集群里堆积失败 Job,噪音掩盖新问题
  • 权重写错:多个钩子执行顺序与预期相反,依赖关系被破坏
  • 把钩子当常驻任务:一次性任务写成长期组件,状态与版本管理混乱
  • 钩子镜像与应用版本脱节:迁移脚本与代码不匹配,数据结构错位

数据来源与参考

  • Helm 文档《Hooks》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌