gitlab - if gitlab-ci.yml 中的条件变量

标签 gitlab gitlab-ci gitlab-ci-runner

一个简单的请求,但找不到任何示例。

假设,我想设置一个环境变量,取决于分支名称。

类似这样的东西(当然,这段代码不起作用)

variables:
  rules:
    - if: '$CI_COMMIT_BRANCH != "master"'
      variables:
        env: "dev"
    - if: '$CI_COMMIT_BRANCH == "master"'
      variables:
        env: "prod"
  stackName: projectA-${env}

因此 stackName 或其他变量可以使用 ${env} 作为名称后缀,我也可以在 jobs 、 script 或 stage 中使用 ${env}

如何设置?

最佳答案

变量envstackName可以在两个不同的作业中设置,这两个作业根据分支按照规则运行。您可以定义一个模板作业,为两个环境做同样的事情。例如,使用模板定义两个这样的作业:

.template-job:
  script:
    - echo $STACK_NAME

prod-job:
  variables:
    STACK_NAME: projectA-prod
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"'
  extends: .template-job

dev-job:
  variables:
    STACK_NAME: projectA-dev
  rules:
    - if: '$CI_COMMIT_BRANCH != "master"'
  extends: .template-job

使用它,您有两个作业,但它们扩展了相同的template-job,该模板使用变量$STACK_NAME。您当然可以将其命名为 ENV 或其他名称。

关于gitlab - if gitlab-ci.yml 中的条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72446777/

相关文章:

redis - 在 Gitlab CI 中使用 redis

docker - 如何通过 Traefik 在 Docker 中代理 Gitlab

git - Nix 包管理器和 GitLab 的问题

jenkins - 如何从多个 Gitlab 存储库触发一项 Jenkins 作业?

docker - 您如何将从 docker hub 中提取的图像缓存到私有(private) docker 注册表中?

gitlab-ci - gitlab-ci 缓存如何在 docker runner 上工作?/cache 目录是什么?什么是cache_dir?

angular - 如何在测试执行后设法退出 phantomJS 启动器?

mysql - 令人难以置信的慢 GitLab 与 MySQL

java - Jenkins:如果我们在两个不同的 GitLab 存储库中有代码,我们可以做 'continuous integration' 吗?

git - 为什么 gitlab-runner 不能克隆我的项目? (主机名不正确,连接失败)