name: gitlab-ci-variables-secrets user-invocable: false description: 当配置GitLab CI/CD变量、管理秘密或与外部秘密提供商集成时使用。涵盖安全凭据处理。 allowed-tools:
- Read
- Write
- Edit
- Bash
- Grep
- Glob
GitLab CI - 变量与秘密
在GitLab流水线中安全配置CI/CD变量和管理秘密。
变量类型
预定义变量
build:
script:
- echo "分支:$CI_COMMIT_BRANCH"
- echo "提交:$CI_COMMIT_SHA"
- echo "流水线:$CI_PIPELINE_ID"
- echo "项目:$CI_PROJECT_NAME"
- echo "注册表:$CI_REGISTRY_IMAGE"
自定义变量
variables:
NODE_ENV: production
DATABASE_URL: "postgres://localhost/app"
build:
variables:
BUILD_TARGET: dist
script:
- npm run build --target=$BUILD_TARGET
变量作用域
全局变量
variables:
GLOBAL_VAR: "随处可用"
作业级变量
deploy:
variables:
DEPLOY_ENV: production
script:
- ./deploy.sh $DEPLOY_ENV
环境作用域变量
在GitLab UI中配置:设置 > CI/CD > 变量
- 作用域到特定环境(生产、暂存)
- 作用域到特定分支(主分支、开发分支)
保护和掩码变量
在gitlab-ci.yml中
variables:
PUBLIC_KEY:
value: "pk_test_xxx"
description: "Stripe公钥"
在GitLab UI中
设置变量时:
- 保护变量:仅在受保护的分支/标签上可用
- 掩码变量:在作业日志中隐藏(需要特定格式)
- 扩展变量:允许在值中引用其他变量
文件类型变量
deploy:
script:
- cat $KUBECONFIG # 文件变量内容
- kubectl apply -f deployment.yaml
外部秘密提供商
HashiCorp Vault
job:
secrets:
DATABASE_PASSWORD:
vault:
engine:
name: kv-v2
path: secret
field: password
path: production/db
Azure Key Vault
job:
secrets:
API_KEY:
azure_key_vault:
name: my-api-key
version: latest
AWS Secrets Manager
job:
secrets:
AWS_SECRET:
aws_secrets_manager:
name: prod/api-key
version_id: latest
OIDC认证
deploy:aws:
id_tokens:
AWS_TOKEN:
aud: https://gitlab.com
script:
- >
aws sts assume-role-with-web-identity
--role-arn $AWS_ROLE_ARN
--web-identity-token $AWS_TOKEN
最佳实践
- 切勿在
.gitlab-ci.yml中硬编码秘密 - 对生产凭据使用保护变量
- 掩码敏感值以防止日志暴露
- 优先使用OIDC而非长期凭据
- 将变量作用域限制到所需最小环境
- 对证书和密钥使用文件类型变量