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

Gitlab CI规则:如何基于Environment状态设置作业执行方式?

需求实现方案

这个需求是可以实现的,核心思路是通过GitLab API查询目标环境的运行状态,将状态结果作为变量传递给部署作业,再通过规则判断是否自动执行。以下是具体配置方案:

步骤1:添加前置作业查询环境状态

新增一个.pre阶段的作业,用于查询目标环境的状态,并将结果保存为环境变量供后续作业使用:

check_environment_status:
  stage: .pre
  script:
    - |
      # 定义目标环境名称
      ENVIRONMENT_NAME="branch/$CI_COMMIT_REF_SLUG"
      # 编码环境名称以适配URL格式
      ENCODED_ENV_NAME=$(echo "$ENVIRONMENT_NAME" | sed 's/%/%25/g; s/\//%2F/g')
      # 调用GitLab API获取环境信息
      ENV_RESPONSE=$(curl --silent --header "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/environments?name=$ENCODED_ENV_NAME")
      # 解析环境状态(默认设为stopped)
      ENV_STATUS=$(echo "$ENV_RESPONSE" | jq -r '.[0].state // "stopped"')
      # 将状态写入环境变量文件
      if [ "$ENV_STATUS" = "available" ]; then
        echo "ENVIRONMENT_RUNNING=true" > environment_status.env
      else
        echo "ENVIRONMENT_RUNNING=false" > environment_status.env
      fi
  artifacts:
    reports:
      dotenv: environment_status.env
  # 为runner安装依赖工具(适用于Debian/Ubuntu系)
  before_script:
    - apt-get update && apt-get install -y curl jq

步骤2:修改deploy_branch作业规则

更新deploy_branch的规则,基于前置作业传递的ENVIRONMENT_RUNNING变量判断执行方式:

deploy_branch:
  stage: branch
  script:
    - echo "Deploy branch ${CI_COMMIT_REF_SLUG}"
  rules:
    - if: $ENVIRONMENT_RUNNING == "true"
      when: always
    - when: manual
  environment:
    name: branch/$CI_COMMIT_REF_SLUG
    url: https://$CI_COMMIT_REF_SLUG.dev.example.com/
    deployment_tier: development
    on_stop: stop_branch
    auto_stop_in: 2 days
  needs: [check_environment_status] # 依赖前置作业的环境变量结果

注意事项

  • 权限配置:确保CI_JOB_TOKEN具备读取项目环境的权限,可在项目设置的「CI/CD」→「权限」中开启「允许作业访问项目令牌」。
  • 工具适配:若使用Alpine系统的runner,需将依赖安装命令改为apk add curl jq。
  • 状态判断:GitLab环境的状态包括available(运行中)、stopped(已停止)、preparing等,这里仅以available作为运行状态的判断依据,可根据需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:26:14