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)
步骤:
- 进入项目 → Settings → CI/CD → Variables
- 点击 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分支可访问
七、变量优先级规则
当同名变量存在时,按以下顺序覆盖(从高到低):
- Job 级
variables
- Job 级
variables
中的inherit
定义 - YAML 全局
variables
- Project/Group/Instance 级变量
- 预定义变量
常见问题
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