Gitlab [=10th=] 管道在不应该运行的时候运行

Gitlab CI Pipeline Runs When it Shouldnt

我正在尝试实现一个 gitlab ci 管道,只有在 specific 目录或其子目录中的文件发生更改时才会被触发。

stages:
#  - pre
  - triggers

.schema_trigger: &trigger_config
  trigger:
    include: pipeline/zone.gitlab-ci.yml
    strategy: depend

#pre-stage:
#  image: centos:7
#  stage: pre
#  script:
#    - echo "This job ensures that when no migrations are added the pipeline is still successfull"

demo:
  stage: triggers
  variables:
    SCHEMA: demo
  <<: *trigger_config
  only:
    refs:
      - merge_requests
    changes:
      - schemas/demo/**/*.{sql,env}

问题是,当我创建一个新的合并请求时 schemas/demo 目录没有变化,管道仍然 运行s。我尝试了一些配置但没有成功,包括添加 only:refs 子句,其唯一效果是创建一个分离的管道。

而且这个问题只出现在分支的第一个管道上,之后的所有提交都被正确评估并且没有运行。

当目录中的文件发生更改时,我如何才能实现只有管道 运行 的目标?

为了获得您想要的效果,您应该使用 rules: 而不是 only: 以便将规则与 changes: 结合起来,例如:

demo:
  # ...
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      changes:
        - schemas/demo/**/*.{sql,env}
    # ...

另请注意,如果没有运行合并请求的管道,则分支管道将显示在合并请求中 UI。您可以考虑完全禁用分支管道或确保在合并请求的管道中至少包含一项其他作业。