SuperAPI AI 工具集

gitlab-ci-variables-secrets

部署与运维

查看项目

更新于 10-16 04:08

技能介绍

用途

该技能用于在 GitLab 流水线中配置 CI/CD 变量并安全管理密钥,覆盖凭据的安全处理。适用场景包括:配置 GitLab CI/CD 变量、管理密钥,或与外部密钥提供商集成。

主要能力

变量类型

预定义变量:GitLab 提供的内置变量,例如:

build:
  script:
    - echo "Branch: $CI_COMMIT_BRANCH"
    - echo "Commit: $CI_COMMIT_SHA"
    - echo "Pipeline: $CI_PIPELINE_ID"
    - echo "Project: $CI_PROJECT_NAME"
    - echo "Registry: $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: "available everywhere"

作业级变量:

deploy:
  variables:
    DEPLOY_ENV: production
  script:
    - ./deploy.sh $DEPLOY_ENV

环境级变量:在 GitLab UI 中配置:Settings > CI/CD > Variables;可限定到特定环境(production、staging),也可限定到特定分支(main、develop)。

受保护变量与掩码变量

在 gitlab-ci.yml 中:

variables:
  PUBLIC_KEY:
    value: "pk_test_xxx"
    description: "Stripe public key"

在 GitLab UI 中设置变量时可启用:

  • Protected(受保护):仅在受保护的分支/标签上可用
  • Masked(掩码):在作业日志中隐藏(需要特定格式)
  • Expanded(展开):允许在值中引用变量

文件类型变量

deploy:
  script:
    - cat $KUBECONFIG  # File variable contents
    - 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 而非长期凭据
  • 将变量作用域限定到所需的最小环境范围
  • 证书和密钥使用文件类型变量

限制

资料未提供该技能的安装命令、具体依赖要求、支持的 GitLab 版本范围,以及定价或授权信息。