仅在 2 个条件下运行
build
和 deploy
中的作业(在分支 main
上):
before_script
、
find
、
wc
检查条件 1。
rules: changes
检查条件 2。
if
下时,
before_script
中的
script
条件表现如预期
第一个条件针对以下情况我的管道可视化看起来像
创建了一个新分支并且不存在 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
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
。