根据环境设置 CI/CD 个变量

Set CI/CD variables depending on environment

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

提供的环境变量

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

到目前为止我做了什么:

1- 创建环境:通过 UI (Project => Operations => Environments :我在这里创建了 2 个环境,STAGINGPRODUCTION

2- 通过 UI 创建变量 (Project => Settings => CI/CD => Variables : 这里我创建了变量 DB_PASSWORD 两次(当然分配了不同的值),一次将 environment scope 设置为 STAGING,另一次设置为 PRODUCTION.

现在我想做的是 运行 我的项目管道。所以我转到 Project => CI/CD => Pipelines => 运行 Pipeline 在这里我希望 GitLab CI 问我是否愿意到 运行 我的管道,为 STAGING 或 PRODUCTION 设置了一组变量,但它没有。

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

你需要在你的gitlab-ci.yml文件中指定环境,见here

来自官方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