我有一个仓库,里面有一个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。
1条答案
按热度按时间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 中,你实际上有:
字符串
在 .gitlab-ci.yml 中:
型
在合并时,rules 的第二个定义覆盖了第一个定义,因此 SOME_VARIABLE 丢失。
我在这里看到两种可能的解决方案:
1.如果这两个工作流实际上是相同的,唯一的区别是分配给 SOME_VARIABLE 的值,则从 .gitlab-ci.yml 中删除工作流定义,并在那里定义 SOME_PROD_VARIABLE 和 SOME_NP_VARIABLE 变量。
1.如果您需要修改工作流规则,则必须从 test-ci.yml 复制工作流并进行相应的修改。