为什么 GitLab CI 作业没有以“规则:更改”运行?

问题描述 投票:0回答:1

我的目标

仅在 2 个条件下运行

build
deploy
中的作业(在分支
main
上):

  1. src文件夹中存在一个 JSON 文件
  2. src文件夹中的 JSON 文件发生了更改
实施

    我尝试使用
  • before_script
    find
    wc
     检查条件 1。
  • 我尝试使用
  • rules: changes
     检查条件 2。
  • V&V
    • 管道编辑器通过了 GitLab CI Lint 和验证检查
    • 当置于
    • if
    •  下时,
      before_script
       中的 
      script
      条件表现如预期
    • 我已经测试了应该触发规则并跳过 before_script 条件的提交(即在 src/ 中添加、编辑、删除 JSON、提交非 JSON 更改,所有这些都在正确的主分支上)
问题

    没有任何作业被触发或运行

更多细节和代码

第一个条件针对以下情况

    创建了一个新分支并且不存在 JSON 文件,或者
  • 提交
  • 删除src中的所有JSON文件
第二个条件针对以下情况

    提交没有对
  • src 文件夹中的 JSON 文件进行任何更新
我的管道可视化看起来像

docker-build (build) ---- process-build (build) \___ app-deploy (deploy) *job (stage)

.gitlab-ci.yml

stages: - build - deploy docker-build: stage: build before_script: 'if [ $(find ./src -name "*.json" | wc -l) -eq 0 ]; then exit 0; fi' script: - docker build ... rules: - if: '$CI_COMMIT_BRANCH == "main"' changes: - ./src/**/*.json process-build: stage: build needs: docker-build script: ... rules: - if: '$CI_COMMIT_BRANCH == "main"' changes: - ./src/**/*.json app-deploy: stage: deploy needs: docker-build script: ... rules: - if: '$CI_COMMIT_BRANCH == "main"' changes: - ./src/**/*.json
    
gitlab yaml gitlab-ci cicd gitlab-ci.yml
1个回答
0
投票
GitLab 的 CI/CD 规则使用 ruby 函数

fnmatch(pattern, path),它使用通配符递归匹配目录或文件**

其他详细信息:

Glob 模式用 Ruby 来解释 File.fnmatch 与标志

File::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB.


https://docs.gitlab.com/ee/ci/yaml/index.html#ruleschanges

在文档中没有带前导点的描述或示例。

您应该使用

/src/**/*.json

 而不是 
./src/**/*.json

© www.soinside.com 2019 - 2024. All rights reserved.