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

能否使用多个GitLab CI/CD YAML文件实现多流水线配置?

实现GitLab CI/CD多流水线拆分配置

配置思路

利用GitLab CI的rules规则,基于触发场景(合并请求目标分支、分支推送等)实现任务隔离:

  • 仅当合并请求目标为main分支时,单独运行Checkov安全扫描任务
  • 其他场景(如普通分支推送、main分支直接提交等)执行原有Terraform构建流程

完整.gitlab-ci.yml示例

# 全局变量配置(按需调整)
variables:
  TERRAFORM_VERSION: "1.5.7"

# Checkov安全扫描任务:仅针对目标main分支的合并请求触发
checkov-security-scan:
  stage: security-check
  image: bridgecrew/checkov:latest
  script:
    - checkov -d . --framework terraform --compact
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'
      when: always
      allow_failure: false

# 原有Terraform计划任务:排除目标main分支的合并请求场景
terraform-plan:
  stage: tf-build
  image: hashicorp/terraform:$TERRAFORM_VERSION
  script:
    - terraform init -input=false
    - terraform plan -out=tfplan -input=false
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'
      when: never
    - if: '$CI_COMMIT_BRANCH'
      when: always

# Terraform部署任务:仅在main分支直接提交时触发
terraform-apply:
  stage: tf-deploy
  image: hashicorp/terraform:$TERRAFORM_VERSION
  script:
    - terraform apply -auto-approve tfplan
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'
      when: never
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: always

关键细节说明

  • rules是核心控制逻辑:通过GitLab内置环境变量$CI_MERGE_REQUEST_TARGET_BRANCH_NAME精准识别合并请求目标分支
  • 任务阶段分离:将Checkov放在独立的security-check阶段,与Terraform的tf-build、tf-deploy阶段完全隔离,保证流水线独立性
  • 灵活控制任务执行:when: always强制满足条件时执行,when: never直接跳过不符合的场景,allow_failure可控制扫描不通过时是否阻断流水线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:49:51