GitLab CI/CD:仅在将特定扩展添加到文件夹和合并请求时触发管道

时间:2021-04-15 12:29:14

标签: continuous-integration gitlab zip gitlab-ci gitlab-ci-trigger

在我的 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 文件添加到特定文件夹时运行?

0 个答案:

没有答案