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

Gitlab CI部署新版本前如何自动停止此前部署的k8s旧环境

解决方案

你可以通过以下两种常用方式实现部署前自动关停旧环境,按需选择即可:

方式一:直接在部署脚本前置清理逻辑(最简便)

直接把关停逻辑放到deploy任务的执行步骤最前面,加个忽略资源不存在的参数,避免首次部署时报错:

deploy:
  image: dtzar/helm-kubectl
  stage: deploy
  only:
    kubernetes: active
  environment:
    name: definitelynotproduction
    on_stop: stop_deployment
  script:
      # 先清理旧部署,--ignore-not-found=true 避免第一次部署找不到资源报错
      - kubectl delete -f ... --ignore-not-found=true
      # 可选:等待旧资源完全销毁后再部署新的,避免残留配置冲突
      - kubectl wait --for=delete pod -l app=你的应用标签 --timeout=60s || true
      - kubectl apply -f ...

原来的手动触发stop_deployment任务可以保留,用于手动关停环境的场景。

方式二:拆分阶段复用关停逻辑

如果你不想重复写关停脚本,可以调整流水线阶段顺序,新增一个前置自动关停阶段:

  1. 先定义流水线阶段顺序
stages:
  - stop_old
  - deploy
  - stop_deployment
  1. 新增前置自动关停任务,无需手动触发:
stop_old:
  image: dtzar/helm-kubectl
  stage: stop_old
  only:
    kubernetes: active
  environment:
    name: definitelynotproduction
    action: stop
  script:
      - kubectl delete -f ... --ignore-not-found=true
  rules:
    # 对应你的部署触发规则,符合部署条件时自动执行
    - if: $CI_COMMIT_BRANCH == "你的部署分支名"
      when: always
  1. 原来的stop_deployment任务保持不变,仍用于手动触发关停。

注意事项

  • 如果你是多环境部署,要注意匹配对应环境的资源标签、yaml文件路径,避免误删其他环境资源
  • 如果配置变更涉及端口、PVC这类不可热更新的资源,建议清理完成后再加几秒等待时间,确保资源完全释放

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:45:03