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

Gitlab CI如何获取所有可用环境并实现多国家批量部署

解决方案

Gitlab CI 没有内置的全局变量直接返回项目全部可用环境列表,你可以通过调用 Gitlab 项目环境 API 结合动态子流水线(Child Pipeline)实现符合规则的多环境批量部署,完整实现步骤如下:

1. 前置权限配置

在项目「设置-访问令牌」中创建一个项目访问令牌,勾选 read_environment 权限,将生成的令牌值保存为项目 CI/CD 变量,命名为 PROJECT_ACCESS_TOKEN,记得勾选「掩码变量」选项避免令牌泄露。

2. 调整CI流水线结构

新增预生成部署任务的阶段,通过API拉取全量环境后过滤符合国家编码/$CI_COMMIT_BRANCH规则的可用环境,自动生成对应多环境的部署子流水线配置:

stages:
  - generate-deploy-config
  - deploy

# 生成多环境部署配置的任务
generate-deploy-jobs:
  stage: generate-deploy-config
  image: alpine:latest
  before_script:
    - apk add --no-cache curl jq
  script:
    # 调用Gitlab API拉取项目所有可用环境,过滤符合命名规则的条目
    |
    curl --silent --header "PRIVATE-TOKEN: $PROJECT_ACCESS_TOKEN" \
    "$CI_API_V4_URL/projects/$CI_PROJECT_ID/environments?per_page=100&states=available" \
    | jq -r --arg branch "$CI_COMMIT_BRANCH" '.[] | select(.name | endswith("/"+$branch)) | .name' > valid_envs.txt

    # 动态生成子流水线部署配置
    |
    echo "stages: [deploy]" > deploy-jobs.yml
    while read env_name; do
      country_code=$(echo $env_name | cut -d'/' -f1)
      cat >> deploy-jobs.yml << EOF
deploy-${country_code}:
  stage: deploy
  script:
    - ls \$PROJECT_URL
  environment:
    name: ${env_name}
    url: https://\$PROJECT_URL
EOF
    done < valid_envs.txt
  artifacts:
    paths:
      - deploy-jobs.yml

# 触发多环境批量部署的子流水线
trigger-multi-deploy:
  stage: deploy
  needs:
    - generate-deploy-jobs
  trigger:
    include:
      - artifact: deploy-jobs.yml
        job: generate-deploy-jobs
    strategy: depend

3. 注意事项

  • 若项目环境总数超过100个,需要额外处理API分页逻辑,拉取全量环境数据
  • 可根据需要在API请求参数中调整states值,过滤掉已停止、已归档的无效环境
  • 可在过滤规则中补充国家编码校验逻辑,避免匹配到不符合命名规则的其他环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:48:02