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

GitLab CI中Terraform手动审批阶段未显示的问题求助

GitLab CI Terraform 手动审批问题解决方案

问题核心:GitLab CI 的 rules 是在流水线初始化阶段就完成评估的,此时 manual_approval 作业还未执行,CHANGES 变量尚未生成,所以你的规则条件永远无法满足,导致 wait_for_approval 作业不会出现在流水线中。

以下是可行的解决方案,通过生成标记文件+基于文件存在性的规则来实现动态触发手动审批:

修改后的完整配置

stages:
  - manual_approval
  - wait_for_approval
  - terraform_apply

manual_approval:
  stage: manual_approval
  script:
    - terraform plan -input=false -out=tfplan
    - |
      # 判断是否需要审批:无变更或无销毁操作则跳过,否则标记需要审批
      if terraform show tfplan | grep -q -E "No changes|0 to change, 0 to destroy"; then
        echo "无变更或无销毁操作,无需审批"
        touch no_changes
      else
        echo "检测到变更,需要手动审批"
        touch needs_approval
      fi
  artifacts:
    paths:
      - needs_approval
      - no_changes
      - tfplan  # 保留plan文件供后续apply使用

wait_for_approval:
  stage: wait_for_approval
  when: manual
  script:
    - echo "等待手动审批..."
  allow_failure: false
  rules:
    # 仅当存在needs_approval文件时,才显示该审批作业
    - exists:
        - needs_approval
  needs:
    - manual_approval

terraform_apply:
  stage: terraform_apply
  script:
    - terraform apply -input=false tfplan
  rules:
    # 两种情况触发apply:审批通过,或者无变更直接执行
    - if: $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "push"
      needs:
        # 审批作业可选:如果存在则依赖,不存在则直接执行
        - job: wait_for_approval
          optional: true
        - manual_approval
    - exists:
        - no_changes

配置说明

  1. manual_approval 作业:执行 terraform plan 后,根据结果生成对应的标记文件(needs_approval 或 no_changes),并将这些文件和 tfplan 作为制品保留。
  2. wait_for_approval 作业:通过 rules:exists 检测 needs_approval 文件是否存在,仅当文件存在时才会出现在流水线中,等待手动审批。
  3. terraform_apply 作业:同时支持两种触发场景:审批通过后执行,或者无变更时直接执行,确保流水线能自动处理无变更的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:44