【问题标题】:Gitlab CI Pipeline Runs When it ShouldntGitlab CI 管道在不应该运行时运行
【发布时间】:2021-12-29 17:58:38
【问题描述】:

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

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}

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

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

我如何才能实现仅在目录中的文件更改时才运行管道的目标?

【问题讨论】:

    标签: gitlab continuous-integration gitlab-ci pipeline


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复,使用规则:如果确实解决了我的问题
    猜你喜欢
    • 2021-01-23
    • 2022-08-11
    • 1970-01-01
    • 2021-11-28
    • 2022-06-12
    • 2021-01-17
    • 1970-01-01
    • 2022-10-24
    • 2022-01-03
    相关资源
    最近更新 更多