Gitlab CI/CD env var 仅在 master 上可用

Kri*_*azs 3 continuous-integration heroku gitlab gitlab-ci

如果我推送到 master,它会完美运行,所有环境变量都可用,并且我已成功部署到 Heroku。

问题:如果我推送到开发分支,它无法看到部署的环境变量。

$ dpl --provider=heroku --app=$HEROKU_DEV_APP --api-key=$HEROKU_API_KEY
invalid option "--api-key="
ERROR: Job failed: exit code 1 
Run Code Online (Sandbox Code Playgroud)

环境设置:

gitlab环境配置

.gitlab-ci.yml:

stages:
  - build
  - test
  - deploy

build:
  stage: build
  image: maven:3.6.3-jdk-14
  script:
    - mvn clean package
  tags:
    - docker

test:
  stage: test
  image: maven:3.6.3-jdk-14
  script:
    - mvn test
  tags:
    - docker

deploy_dev:
  stage: deploy
  image: ruby:2.3
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=$HEROKU_DEV_APP --api-key=$HEROKU_API_KEY
  environment:
    name: prod
    url: https://.....herokuapp.com/
  only:
    - dev
  tags:
    - docker

deploy_prod:
  stage: deploy
  image: ruby:2.3
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=$HEROKU_PROD_APP --api-key=$HEROKU_API_KEY
  environment:
    name: prod
    url: https://.....herokuapp.com/
  when: manual
  only:
    - master
  tags:
    - docker
Run Code Online (Sandbox Code Playgroud)

tal*_*dor 7

这是因为您的 Heroku api 密钥变量被设置为protected

受保护的变量仅对受保护的分支和受保护的标记可见。这就是为什么它在 master 上适用但在 dev 上不起作用。

更多信息:https://gitlab.com/help/ci/variables/README#protect-a-custom-variablehttps://gitlab.com/help/user/project/protected_branches.md

您的选择是:要么删除受保护的标志,要么为您的非受保护分支引入另一个不受保护的变量和另一个 api 密钥,这将不太敏感。