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

如何在GitLab YAML中获取环境ID作为构建编号?

解决GitLab CI中无法获取CI_ENVIRONMENT_ID并用作构建编号的问题

原因说明

CI_ENVIRONMENT_ID 变量仅在**关联了环境配置的作业(job)**中才会被GitLab注入,普通未配置environment字段的构建作业无法直接获取该变量。

解决方案

1. 给目标作业添加环境关联配置

如果你的构建作业需要直接使用环境ID,只需在job中添加environment字段,GitLab会自动注入CI_ENVIRONMENT_ID变量:

build_job:
  stage: build
  environment:
    name: production  # 替换为你的环境名称
  script:
    - echo "构建编号: $CI_ENVIRONMENT_ID"
    # 这里执行你的构建命令,用$CI_ENVIRONMENT_ID作为构建编号

2. 跨作业传递环境ID(若构建与部署分离)

如果构建作业和部署作业是分开的,部署作业关联了环境而构建作业没有,可以通过artifacts传递变量:

deploy_job:
  stage: deploy
  environment:
    name: production
  script:
    - echo "$CI_ENVIRONMENT_ID" > environment_id.txt
  artifacts:
    paths:
      - environment_id.txt

build_job:
  stage: build
  needs: [deploy_job]  # 依赖部署作业确保拿到文件
  script:
    - export BUILD_NUMBER=$(cat environment_id.txt)
    - echo "构建编号: $BUILD_NUMBER"
    # 执行构建命令

3. 通过GitLab API手动查询环境ID

如果无法通过作业关联环境或跨作业传递,可调用GitLab API查询对应环境的ID:

  1. 在GitLab项目中创建一个具有read_api权限的私有令牌(PRIVATE_TOKEN),添加到项目的CI/CD变量中。
  2. 在构建作业中执行以下命令获取环境ID:
build_job:
  stage: build
  script:
    # 查询指定名称的环境ID
    - export ENV_ID=$(curl --header "PRIVATE-TOKEN: $GITLAB_PRIVATE_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/environments" | jq '.[] | select(.name == "production") | .id')
    - echo "构建编号: $ENV_ID"
    # 使用ENV_ID作为构建编号执行构建

注意:需确保作业环境中安装了curl和jq工具,若未安装,可通过apt-get install -y curl jq(Debian/Ubuntu)或对应系统的命令安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:44:56