gpt4 book ai didi

bash - GitLab CI/CD : Trigger pipeline only when a specific file have changed

转载 作者:行者123 更新时间:2023-12-04 16:38:18 31 4
gpt4 key购买 nike

我正在针对在 terragrunt.hcl 上完成提交的目录运行合规性扫描。文件。
我想要来自我的 . 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: Run jobs only when files in a specific directory have changed并且仍在对其进行一些测试,但我将不胜感激,请提供任何额外的帮助!!!我很亲近!!

最佳答案

从 Gitlab 11.4 版开始,onlyexcept关键字接受参数 changes这使您可以定义仅在列出的文件之一发生更改时运行的作业。因此,对于您的示例,工作可能如下所示:

compliance_job:
stage: compliance
only:
changes:
- terragrunt.hcl
script:
- ./compliance_check.sh
这意味着 complaince_job如果文件 terragrunt.hcl,作业只会被添加到管道中已经改变。
在 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_job如果提交消息包含单词 compliance,作业将被添加到管道中。或者分支或标签是 main ,以及 terragrunt.hcl文件已更改。如果 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
rules: ifrules:changes在这里: https://docs.gitlab.com/ee/ci/yaml/#rules在这里: https://docs.gitlab.com/ee/ci/yaml/#ruleschanges

关于bash - GitLab CI/CD : Trigger pipeline only when a specific file have changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65958570/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com