簡體   English   中英

GitLab CI/CD:僅在特定文件發生更改時觸發管道

[英]GitLab CI/CD: Trigger pipeline only when a specific file have changed

我正在對在terragrunt.hcl文件上完成提交的目錄運行合規性掃描。

我想要我的管道. gitlab-ci.yaml . gitlab-ci.yaml當且僅當對目錄及其子目錄中此特定文件“ terragrunt.hcl ”的提交已更改時才會觸發。 有沒有辦法使用 gitlab 的 ci/cd 工具來做到這一點,或者只運行自定義構建腳本會更容易嗎?

下面的這個單行 bash 可以滿足我的要求,但問題是當我只想在特定的terragrunt.hcl上構建時,它仍然會觸發任何提交的管道。

for i in $(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHA | xargs -n 1 dirname | uniq); do cd /scripts && ./run.sh /path/to/$i; done

我找到了這個資源: GitLab CI/CD:僅在特定目錄中的文件發生更改並且仍在對其進行一些測試時運行作業,但我將不勝感激任何額外的幫助!!! 我很親近!!

自 Gitlab 版本 11.4 起, onlyexcept關鍵字接受參數changes ,允許您定義僅在列出的文件之一更改時運行的作業。 因此,對於您的示例,工作可能如下所示:

compliance_job:
  stage: compliance
  only:
    changes:
      - terragrunt.hcl
  script:
    - ./compliance_check.sh

這意味着只有當文件terragrunt.hcl發生更改時,才會將complaince_job作業作業添加到管道中。

在 Gitlab 版本 12.3 中,引入了rules關鍵字,可以更好地控制何時將作業添加到管道中。 它允許您執行以下操作:

compliance_job:
  stage: compliance
  rules:
    - if: $CI_COMMIT_MESSAGE ~= /compliance/ || $CI_COMMIT_REF_NAME == "main"
      changes:
        - terragrunt.hcl
      when: always
  script:
    - ./compliance_check.sh

這意味着如果提交消息包含單詞compliance或者分支或標簽是main ,並且terragrunt.hcl文件發生更改,則compliance_job作業將被添加到管道中。 如果兩個if條件都不為真,或者terragrunt.hcl文件未更改,則作業將不會運行。

這是使用rules關鍵字檢查更改但不檢查其他條件的另一種方法:

compliance_job:
  stage: compliance
  rules:
    - changes:
        - terragrunt.hcl
        - file1.txt
        - file2.txt
        - path/to/file3.txt
      when: always
  script:
    - ./compliance_check.sh

在此示例中,如果列出的任何文件在最新提交中發生更改,則作業將運行,但我們不必附帶“if”。

您可以在此處閱讀only: changes關鍵字: https://docs.gitlab.com/ee/ci/yaml/#onlychangesexceptchanges

And the rules: if and rules:changes are here: https://docs.gitlab.com/ee/ci/yaml/#rules and here: https://docs.gitlab.com/ee/ci/yaml/#規則變更

暫無
暫無

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

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