我有两个不同的 CI 文件用于开发和测试环境。我需要两个单独的文件,因为我无法控制脚本,并且由于 gitlab 的变量嵌套问题。这是我当前的 .gitlab-ci.yml:
include:
- project: marketing/itm/icbf/feature/icbf-mfe-prompt
ref: Development
file: .ci/ci.dev.yml
if: $CI_COMMIT_BRANCH == "Development"
- project: marketing/itm/icbf/feature/icbf-mfe-prompt
ref: main
file: .ci/ci.test.yml
if: $CI_COMMIT_BRANCH == "main"
但是,它始终运行最新的条目,其中包含 ci.test.yml 文件。我试过:
include:
- project: marketing/itm/icbf/feature/icbf-mfe-prompt
ref: Development
file: .ci/ci.dev.yml
- project: marketing/itm/icbf/feature/icbf-mfe-prompt
ref: main
file: .ci/ci.test.yml
stages:
- build
# Build job that runs everything inside ci.dev.yml
build:
stage: build
script:
- .ci/ci.dev.yml
only:
- Development # Run only on the Development branch
这也不太有效。它仍然运行最新导入的文件。如何配置此文件,以便它基于分支运行 ci.dev 或 ci.test,而不是始终运行最新的导入?
这是一种略有不同的方法,但您可以使用该 CI 文件作为调度程序,而不是直接导入文件,因此您可以更好地了解您应该指的内容
ref
。这是一个例子:
stages: dispatch
dispatch-pipeline:
stage: dispatch
trigger:
strategy: depend
project: marketing/itm/icbf/feature/icbf-mfe-prompt #Can be moved to a variable too
ref: $BRANCH
file: $CI_FILE
forward:
yaml_variables: true
pipeline_variables: true
rules:
- if: $CI_COMMIT_BRANCH == "Development" #Runs whole content of CI for Development
variables:
BRANCH: $CI_COMMIT_BRANCH
CI_FILE: .ci/ci.dev.yml
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH #Runs whole content of CI for main
variables:
BRANCH : $CI_DEFAULT_BRANCH
CI_FILE: .ci/ci.test.yml