簡體   English   中英

GitLab CI - 添加標簽時避免構建

[英]GitLab CI - avoid build when adding tag

添加 git 標簽時,如何防止觸發 gitlab ci 管道? 我在本地運行這個命令(而不是在 gitlab-ci 作業中)

git tag -a "xyz"

然后推標簽; 這會觸發各種管道。 我想排除其中一些管道的運行。

我正在嘗試從諸如此類的問題中改變想法 這個問題使用 ,我想排除,所以我正在嘗試除外。 那里的答案有兩種變體,一種有參考文獻,一種沒有。

build:  
  # ... my work here ...  
  except:
    - tags


build:  
  # ... my work here ...  
  except:
    refs:
      - tags

兩者似乎都沒有任何效果; 我添加了一個標簽,構建仍然發生。

我的理解在這里可能完全錯誤,因為單詞標簽似乎有三種可能的含義,在閱讀文檔或示例時,我並不總是確定哪個含義適用:

  1. 使用 git 標簽應用Git 標簽
  2. Gitlab CI 標簽用於確定哪些跑步者選擇工作
  3. 用於通過 REST API 觸發管道的提交的ref標識符。這通常是分支名稱,但也可以是 git 標記。

我有興趣控制第一種情況下會發生什么。 到目前為止,從評論中可以清楚地看出“except: -tags”與我的案例無關,那么有沒有什么方法可行呢?

如果你想跳過標簽的構建, Except tags正是你應該使用的。

您需要確保了解提交 vs 分支 vs 標簽

為了說明將標記的提交推送到 gitlab 時會發生什么,我執行了以下操作:

  1. 創建了.gitlab-ci.yml ,內容如下:
tests_always_run:
    script:
      - echo I should always execute
tests_except_tags:
    script:
      - echo I skip tagged triggers
    except:
      - tags
  1. 提交更改,標記提交並使用--follow-tags推送以確保標記也傳播到服務器:
git add .gitlab-ci.yml
git commit -m 'my great yml with except tags'
git tag -a "abc" -m "Test tag"
git push --follow-tags

圖示結果: 標記的提交管道結果

如果你想跳過選定提交的 CI,那么你可以使用git push -o ci.skip ,靈感來自這篇文章

它看起來像GitLab建議使用rules ,而不是except文件

only 和 except 沒有被積極開發。 rules 是控制何時向管道添加作業的首選關鍵字。

所以它會

your_job:
  stage: your_stage
  script:
    - echo "Hello"
  rules:
    - if: $CI_COMMIT_TAG
      when: never 
    - when: always

(注意:這是一個格式化的評論而不是一個答案)

為了調試觸發管道的條件:

gitlab 的文檔提到了在運行 CI 作業時設置的幾個變量,其中:

  • CI_COMMIT_REF_NAME :為其構建項目的分支或標記名稱
  • CI_COMMIT_BRANCH :提交分支名稱。 僅在構建分支時出現。
  • CI_COMMIT_TAG :提交標簽名稱。 僅在構建標簽時出現。

讓您的構建作業輸出其中一些變量(例如: echo "triggered by ref : " $CI_COMMIT_REF_NAME )以查看觸發您的作業的原因。

我遇到了同樣的情況,我的解決方法是:

前:: 前

后: 后

這兩個階段都在 my.gitlab-ci.yml 文件中配置,具有不同的名稱“ Dev-UnitTests ”,它僅在有人提交到存儲庫時執行,對分支“ test ”的標簽沒有影響

Dev-UnitTests:
  stage: pruebas 
  script:
    - mvn $MAVEN_CLI_OPTS test
  artifacts:
    when: always
    reports:
      junit: 
        - target/surefire-reports/*Test.xml
        - target/failsafe-reports/*Test.xml
      cobertura: target/site/jacoco/jacoco.xml
  tags:
    - shell 
  except: 
    - test 
    - tags   

單元測試,僅在分支測試上完成合並時運行

Unit Tests:
  stage: pruebas 
  script:
    - mvn $MAVEN_CLI_OPTS test
  artifacts:
    when: always
    reports:
      junit: 
        - target/surefire-reports/*Test.xml
        - target/failsafe-reports/*Test.xml
      cobertura: target/site/jacoco/jacoco.xml
  tags:
    - shell 
  only: 
    - test

創建標簽時沒有再次運行任何管道,希望對您有所幫助。

關鍵是:

...
 except:  
    - tags   
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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