簡體   English   中英

Gitlab CI/CD 工作流規則變量只允許一個 if 條件

[英]Gitlab CI/CD workflow rule variables only allow one if condition

我目前正在嘗試構建 my.gitlab-ci.yml 文件,如下所示:

  • 有一個名為“a”的管道,它應該只從開發分支運行
  • 有一個名為“b”的管道,它應該只從開發分支運行,但只有在從 web 觸發時

為了避免將這些規則直接放在工作中(實際上有大約 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM