在我的 gitlab 存储库中,只有在特定文件夹发生变化时才必须触发管道AND,当它是合并请求时(两种情况)。特别是在 .zip
文件扩展名上,即在此文件夹中添加一个新的 zip 文件,创建合并请求,然后运行管道。
这是我最初的管道 yaml 代码:
trigger-ci-zip-file-only:
stage: prebuild
extends:
- .prebuild
- .preprod-tags
variables:
PROJECT_FOLDER: "my-specific-folder"
before_script:
- echo "Job currently run in $CI_JOB_STAGE"
- touch ${CI_PROJECT_DIR}/$PROJECT_FOLDER/prebuild.env
- cd $PROJECT_FOLDER
only:
refs:
- merge_requests
changes:
- ${PROJECT_FOLDER}/*.zip
artifacts:
reports:
dotenv: ${CI_PROJECT_DIR}/${PROJECT_FOLDER}/prebuild.env
allow_failure: false
如您所见,仅当 zip 文件上的特定文件夹发生更改且仅在 MR 上发生更改时,才必须触发我的管道。但是在这种状态下,当创建 MR 或我推送现有 MR 时,管道始终在运行,即使没有更改或添加到特定文件夹中也是如此。
我还尝试对管道 yaml 代码进行一些更改,如下所示:
only:
refs:
- merge_requests
changes:
- ${PROJECT_FOLDER}/**/*.zip
但管道一直在运行。
我也试过这个:
trigger-ci-zip-file-only:
stage: prebuild
extends:
- .prebuild
- .preprod-tags
variables:
PROJECT_FOLDER: "my-specific-folder"
before_script:
- echo "Job currently run in $CI_JOB_STAGE"
- touch ${CI_PROJECT_DIR}/$PROJECT_FOLDER/prebuild.env
- cd $PROJECT_FOLDER
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- changes:
- ${PROJECT_FOLDER}/**/*.zip
when: always
artifacts:
reports:
dotenv: ${CI_PROJECT_DIR}/${PROJECT_FOLDER}/prebuild.env
allow_failure: false
但管道也一直在运行。
如何确保管道仅在合并请求时运行,并且仅在 .zip 文件添加到特定文件夹时运行?