Gitlab CICD -包含所有变量而不是添加更多变量的工作流

yeotifhr  于 2023-11-15  发布在  Git
关注(0)|答案(1)|浏览(131)

我有一个仓库,里面有一个test-ci.yml:

stages:
  - build

workflow:
  rules:
    - if $CI_COMMIT_BRANCH == "main"
      variables:
           SOME_VARIABLE: $SOME_PROD_VARIABLE
           SECOND_VARIABLE: $SECOND_PROD_VARIABLE

workflow:
  rules:
    - if $CI_COMMIT_BRANCH == "non-prod"
      variables:
           SOME_VARIABLE: $SOME_NP_VARIABLE
           SECOND_VARIABLE: $SECOND_NP_VARIABLE

build-job:
  stage: build
  script:
    - echo $SOME_VARIABLE
    - echo $SECOND_VARIABLE

字符串
2 repository .gitlab-ci.yml:

include:
  - project: 'firstrepo'
    file:
      - 'test-ci.yml'

variables:
  PORT: 5000

workflow:
  rules:
    - if $CI_COMMIT_BRANCH == "non-prod"
      variables:
           SECOND_VARIABLE: $SECOND_NP_VARIABLE

workflow:
  rules:
    - if $CI_COMMIT_BRANCH == "main"
      variables:
           SECOND_VARIABLE: $SECOND_PROD_VARIABLE


我希望第二个项目的工作流覆盖/添加变量,但它会替换所有变量,因此$SOME_VARIABLE为None。

fcg9iug3

fcg9iug31#

根据Gitlab CI/CD(https://docs.gitlab.com/ee/ci/yaml/includes.html#merge-method-for-include)中的配置合并机制,主文件(此处为 .gitlab-ci.yml)中的工作流规则会覆盖包含文件中的规则:
如果键同时存在于A和B中,并且其中一个值不是哈希Map,则使用来自B的值。
这里的键是 workflow.rules,它是一个存在于两个文件中的序列。在 test-ci.yml 中,你实际上有:

workflow:
  rules:
    - if $CI_COMMIT_BRANCH == "main"
      variables:
        SOME_VARIABLE: $SOME_PROD_VARIABLE
        SECOND_VARIABLE: $SECOND_PROD_VARIABLE
    - if $CI_COMMIT_BRANCH == "non-prod"
      variables:
        SOME_VARIABLE: $SOME_NP_VARIABLE
        SECOND_VARIABLE: $SECOND_NP_VARIABLE

字符串
.gitlab-ci.yml 中:

workflow:
  rules:
    - if $CI_COMMIT_BRANCH == "non-prod"
      variables:
        SECOND_VARIABLE: $SECOND_NP_VARIABLE
    - if $CI_COMMIT_BRANCH == "main"
      variables:
        SECOND_VARIABLE: $SECOND_PROD_VARIABLE


在合并时,rules 的第二个定义覆盖了第一个定义,因此 SOME_VARIABLE 丢失。
我在这里看到两种可能的解决方案:
1.如果这两个工作流实际上是相同的,唯一的区别是分配给 SOME_VARIABLE 的值,则从 .gitlab-ci.yml 中删除工作流定义,并在那里定义 SOME_PROD_VARIABLESOME_NP_VARIABLE 变量。
1.如果您需要修改工作流规则,则必须从 test-ci.yml 复制工作流并进行相应的修改。

相关问题