首页 > 解决方案 > 在规则关键字之前覆盖 gitlab-ci 管道变量

问题描述

我正在尝试使部署管道的 gitlab-ci 文件更加动态和智能。我有两个系统要部署不同的产品版本。对于每个系统,都不应该从功能分支进行部署,如果设置了 DEPLOY_SYSTEM_X 变量,它应该会自动运行。否则应该是手动触发。管道看起来像这样:

system1:
  stage: deploy
  rules:
    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
      when: never
    - if: $DEPLOY_SYSTEM_1 == "True"
      when: on_success
    - when: manual
  script:
    - <deploy_system.sh 1>

system2:
  stage: deploy
  rules:
    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
      when: never
    - if: $DEPLOY_SYSTEM_2 == "True"
      when: on_success
    - when: manual
  script:
    - <deploy_system.sh 2>

变量 DEPLOY_SYSTEM_X 在管道调度中设置。为了让它更性感一点,我想打破规则部分,因为它们对于系统非常相似。问题是我需要用 DEPLOY_SYSTEM_X 变量做一些聪明的事情。我正在考虑引入一个 DEPLOY_NIGHTLY 变量,我可以像这样在不同的工作中重新定义它

.common_rules:
 rules:
   - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
     when: never
   - if: $DEPLOY_NIGHTLY == "True"
     when: on_success
   - when: manual

system1:
  extends: .common_rules
  stage: deploy
  $DEPLOY_NIGHTLY = $DEPLOY_SYSTEM_1
  script:
    - <deploy_system.sh 1>

system2:
  extends: .common_rules
  stage: deploy
  $DEPLOY_NIGHTLY = $DEPLOY_SYSTEM_2
  script:
    - <deploy_system.sh 2>

但这显然不起作用,因为我不能像那样分配 $DEPLOY_NIGHTLY 变量。这有可能实现吗?工作中有没有可以重新定义变量的地方?或者有没有更好的方法来做到这一点?

标签: yamlgitlab-cipipeline

解决方案


推荐阅读