Gitlab ci 如何定义变量

在 GitLab CI/CD 中,变量(Variables)是配置 Pipeline 行为的关键元素,可用于传递环境参数、密钥或动态值。以下是 定义变量 的 5 种方式及其详细用法:

一、在 .gitlab-ci.yml 中直接定义

1. 全局变量(所有 Job 可用)

variables:
  APP_VERSION: "1.0.0"          # 普通变量
  DB_URL: "postgres://user:pass@db:5432"
  ARTIFACT_PATH: "dist/"

jobs:
  build:
    script:
      - echo "Building version $APP_VERSION"

2. Job 级变量(覆盖全局变量)

test:
  variables:
    TEST_ENV: "staging"  # 仅当前Job生效
  script:
    - echo "Testing in $TEST_ENV"

二、通过 GitLab 项目设置(UI)

步骤

  1. 进入项目 → Settings → CI/CD → Variables
  2. 点击 Add VariableKey: SECRET_KEYValue: abc123Options: ✅ Protect variable(仅保护分支可用)✅ Mask variable(隐藏日志输出)

效果

deploy:
  script:
    - echo "Deploying with key $SECRET_KEY"  # 自动注入

三、通过 Group/Instance 级变量

适用场景

  • 多个项目共享同一变量(如全局镜像仓库地址)

设置路径

  • Group 变量:Group → Settings → CI/CD → Variables
  • Instance 变量:管理员在 Admin Area → CI/CD → Variables 设置

四、动态生成变量

1. script 中导出变量

job:
  script:
    - export DYNAMIC_VAR=$(date +%F)  # 生成日期变量
    - echo "Today is $DYNAMIC_VAR"    # 当前Shell生效
    # 跨Step传递需要配合 artifacts/reports:dotenv

2. 使用 dotenv 文件跨 Job 传递

generate-env:
  stage: setup
  script:
    - echo "CUSTOM_VAR=generated_value" > env.file
  artifacts:
    reports:
      dotenv: env.file  # 自动加载为变量

use-env:
  stage: deploy
  script:
    - echo "Using $CUSTOM_VAR"  # 可读取前序Job生成的变量

五、预定义变量(GitLab 内置)

GitLab 自动提供大量环境变量,例如:

build:
  script:
    - echo "Project ID: $CI_PROJECT_ID"       # 项目ID
    - echo "Commit SHA: $CI_COMMIT_SHA"      # 提交哈希
    - echo "Branch: $CI_COMMIT_REF_NAME"     # 分支名
    - echo "Triggered by: $GITLAB_USER_NAME" # 触发者

六、变量使用高级技巧

1. 条件变量赋值

variables:
  DEPLOY_ENV: $CI_COMMIT_BRANCH == "main" ? "prod" : "staging"

2. 变量嵌套引用

variables:
  BASE_DIR: "/builds"
  OUTPUT_PATH: "$BASE_DIR/output"  # → /builds/output

3. 保护敏感变量

deploy_prod:
  variables:
    AWS_ACCESS_KEY: $PROD_AWS_KEY  # 从UI设置的Protected变量
  rules:
    - if: $CI_COMMIT_BRANCH == "main"  # 仅main分支可访问

七、变量优先级规则

当同名变量存在时,按以下顺序覆盖(从高到低):

  1. Job 级 variables
  2. Job 级 variables 中的 inherit 定义
  3. YAML 全局 variables
  4. Project/Group/Instance 级变量
  5. 预定义变量

常见问题

Q1:如何隐藏日志中的变量值?

  • 在 UI 中添加变量时勾选 Mask variable,或使用:

Q2:如何在多行脚本中使用变量?

script:
  - |
    echo "Multi-line script"
    echo "Using $MY_VAR"
    if [ "$CI" == "true" ]; then
      echo "Running in GitLab"
    fi

Q3:变量值包含特殊字符怎么办?

  • 用单引号包裹:

掌握这些方法后,可以灵活管理 GitLab CI/CD 中的各种配置参数!

进阶高级测试工程师 文章被收录于专栏

《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart

全部评论

相关推荐

喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务