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

如何优化GitLab流水线中K8S环境清理作业的触发规则

解决方案:GitLab流水线清理作业的精准控制

要实现你需要的清理逻辑,核心是通过环境变量标记+规则判断控制清理作业的执行时机,同时结合needs实现依赖等待。以下是完整的流水线配置修改方案:

stages:
  - helm-checks
  - helm-package
  - build-k8s-test-env
  - tests
  - clean-up-k8s-test-env

helm-lint-template:
  stage: helm-checks

polaris:
  stage: helm-checks

kubescape:
  stage: helm-checks

helm-package:
  stage: helm-package

build-k8s-test-environment:
  stage: build-k8s-test-env
  script: 
    - kubectl create ns $NAMESPACE
    - helm install
  # 标记该作业已执行
  after_script:
    - echo "BUILD_EXECUTED=true" >> build.env
  artifacts:
    reports:
      dotenv: build.env

hurl-tests:
  stage: tests
  # 仅当build成功时才运行测试
  needs:
    - build-k8s-test-environment

clean-up-k8s-test-environment:
  stage: clean-up-k8s-test-env
  script:
    - kubectl delete all --all -n $NAMESPACE
  # 仅当BUILD_EXECUTED变量存在时执行清理
  rules:
    - if: '$BUILD_EXECUTED == "true"'
      when: always
  # 依赖逻辑:
  # 1. 必须等待build作业完成(无论成功/失败/取消)
  # 2. 测试作业可选等待:如果build成功,测试会运行,就等它完成;如果build失败,测试不运行,直接执行清理
  needs:
    - job: build-k8s-test-environment
      status: [success, failed, canceled]
    - job: hurl-tests
      optional: true
      status: [success, failed, canceled]
  # 允许清理作业失败(避免因资源已不存在导致流水线失败)
  allow_failure: true

配置说明:

  1. 标记build作业执行状态:在build-k8s-test-environment中通过after_script生成环境变量文件,并用artifacts:reports:dotenv传递给后续作业。只有当build作业实际运行过,BUILD_EXECUTED变量才会存在。
  2. 控制清理作业触发条件:清理作业的rules仅在BUILD_EXECUTED == "true"时执行,确保前置阶段(helm-checks/helm-package)失败时,build未运行,清理也不执行。
  3. 依赖等待逻辑:
    • 强制依赖build-k8s-test-environment,无论其状态如何,确保清理在build完成后执行。
    • 测试作业设为optional: true:如果build成功,测试会运行,清理会等测试完成;如果build失败,测试不会启动,清理直接执行。
  4. 允许清理失败:添加allow_failure: true,避免因资源已被手动删除或不存在导致流水线失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:47:02