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
配置说明
manual_approval作业:执行terraform plan后,根据结果生成对应的标记文件(needs_approval或no_changes),并将这些文件和tfplan作为制品保留。wait_for_approval作业:通过rules:exists检测needs_approval文件是否存在,仅当文件存在时才会出现在流水线中,等待手动审批。terraform_apply作业:同时支持两种触发场景:审批通过后执行,或者无变更时直接执行,确保流水线能自动处理无变更的情况。
内容的提问来源于stack exchange,提问作者Techiescorner
相关产品推荐
相关产品推荐

