![](/img/trans.png)
[英]GitLab CI/CD: is it possible to store multiple CI/CD variables in one file?
[英]Gitlab CI/CD workflow rule variables only allow one if condition
我目前正在嘗試構建 my.gitlab-ci.yml 文件,如下所示:
為了避免將這些規則直接放在工作中(實際上有大約 30 個工作),我想在全球范圍內重用這些規則。 除了使用 workflow:rules 之外,我找不到更好的方法。
workflow:
rules:
- if $CI_COMMIT_BRANCH == "develop"
variables:
RUN_A: "true"
- if $CI_COMMIT_BRANCH == "develop" && $CI_PIPELINE_SOURCE == "web"
variables:
RUN_B: "true"
job-a:
rules:
- if: $RUN_A == "true"
script:
- exit 0
job-b:
rules:
- if: $RUN_B == "true"
script:
- exit 0
問題是,如果開發時有 web 觸發器,它不會將“RUN_B”設置為true
。 它只會有 "RUN_A" 和true
。 我添加了另一項工作來打印變量以確保:
test:
image: alpine
script:
- echo $RUN_A
- echo $RUN_B
這只會為 RUN_A 打印true
,但不會為 RUN_B 打印任何內容。 我在 Gitlabs 文檔中找不到任何聲明它將只使用第一個匹配規則的內容。 無論如何,有沒有更好的方法來處理這個問題? 我錯過了什么?
因為 GitLab ci Rules
按順序求值,直到第一次匹配。
在您的第一條規則中if $CI_COMMIT_BRANCH == "develop"
匹配,則創建管道,此時變量RUN_A: "true"
已設置,但變量RUN_B
未定義。
在你的情況下,你可以修改 your.gitlab-ci.yml。 變量設置和規則順序。
workflow:
rules:
- if: $CI_COMMIT_BRANCH == "develop" && $CI_PIPELINE_SOURCE == "web"
variables:
RUN_B: "true"
RUN_A: "true"
- if: $CI_COMMIT_BRANCH == "develop"
variables:
RUN_A: "true"
default:
image: alpine
job-a:
rules:
- if: $RUN_A == "true"
script:
- exit 0
job-b:
rules:
- if: $RUN_B == "true"
script:
- exit 0
test:
script:
- echo $RUN_A
- echo $RUN_B
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.