首页 > 解决方案 > 根据环境设置 CI/CD 变量

问题描述

我们有多个环境(暂存、生产......),我不想将数据库密码等敏感信息放在代码库中。为此,我想使用 GitLab CI/CD 提供的环境变量。

但是我不知道如何告诉 GitLab 根据我的环境运行一组不同的变量。

到目前为止我所做的:

1- 创建环境:通过 UI(项目 => 操作 => 环境:这里我创建了 2 个环境,STAGING并且PRODUCTION

2- 通过 UI 创建变量(项目 => 设置 => CI/CD => 变量:在这里我创建了DB_PASSWORD两次变量(当然分配了不同的值),一个环境范围设置为STAGING,另一个设置为PRODUCTION.

现在我想做的是运行我的项目的管道。所以我去Project => CI/CD => Pipelines => Run Pipeline在这里我希望 GitLab CI 询问我是否想使用为 STAGING 或 PRODUCTION 设置的变量集运行我的管道,但它没有。

我应该如何告诉 GitLab 我想使用DB_PASSWORD变量运行我的管道,该变量的值对应于我想要定位的环境?

标签: gitlabgitlab-cigitlab-ce

解决方案


您需要在 gitlab-ci.yml 文件中指定环境,请参见此处

来自官方 gitlab 文档的示例

stages:
  - test
  - build
  - deploy

test:
  stage: test
  script: echo "Running tests"

build:
  stage: build
  script: echo "Building the app"

deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging server"
  environment:
    name: staging
    url: https://staging.example.com
  only:
    - master

在此示例中,运行deploy_staging环境时设置为staging,因此您可以访问为环境定义的变量,如下所示:

deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging server"
  environment:
    name: staging
    url: https://staging.example.com
  variables:
    DB_PASS: ${DB_PASSWORD}              # which is your defined variable within Gitlab CI
  only:
    - master

推荐阅读