You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab-CI.yaml中定义删除环境时触发的任务?

解决方案

由于GitLab CE 15.2.2尚未支持on_delete环境钩子,以下是几种可行的实现方式:

方案1:手动触发专用清理作业

创建一个与目标环境绑定的手动CI作业,用于执行删除环境时的清理脚本。用户在GitLab界面删除环境前,先手动运行该作业完成资源清理,再删除环境。

# 关联到review环境的手动清理作业
delete_review_app:
  when: manual
  environment:
    name: review/$CI_COMMIT_REF_SLUG
  extends: .delete
  stage: cleanup
  script:
    # 这里替换为你需要的删除脚本,比如删除整个命名空间
    - kubectl delete namespace $NAMESPACE --ignore-not-found=true

方案2:通过Webhook触发自动清理流水线

利用GitLab的环境事件Webhook,在环境被删除时自动触发流水线执行清理脚本:

  1. 配置CI作业:创建一个仅允许触发器触发的作业,用于执行清理逻辑:
delete_environment:
  stage: cleanup
  script:
    # 从触发器变量中获取要清理的环境名称
    - ENV_SLUG=$TRIGGER_ENV_SLUG
    - kubectl delete namespace review-$ENV_SLUG --ignore-not-found=true
  only:
    - triggers # 限制仅通过触发器触发
  1. 配置Webhook:在项目的「设置」→「Webhooks」中,添加一个新Webhook:
    • URL:填写GitLab流水线触发API,格式为https://你的GitLab地址/api/v4/projects/[项目ID]/trigger/pipeline
    • 触发事件:勾选「Environment events」
    • 令牌:使用项目的触发器令牌(在「设置」→「CI/CD」→「流水线触发器」中生成)
    • 请求参数:添加自定义变量TRIGGER_ENV_SLUG=$CI_ENVIRONMENT_SLUG(Webhook payload中会包含环境信息,可通过解析payload获取更精准的环境标识)

当你在GitLab界面删除环境时,Webhook会自动触发该流水线,执行清理脚本。

方案3:关联分支删除触发清理

如果你的review环境与代码分支一一绑定,可利用分支删除事件触发清理作业,间接实现环境删除时的脚本执行:

delete_review_on_branch_delete:
  extends: .delete
  stage: cleanup
  script:
    - kubectl delete namespace review-$CI_COMMIT_REF_SLUG --ignore-not-found=true
  only:
    - branches
  except:
    - main # 排除主分支等不需要自动清理的分支
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    action: delete

当对应分支被删除时,该作业会自动(或手动,可调整when参数)触发,完成环境资源的清理。

内容的提问来源于stack exchange,提问作者Den nis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:45:34