【问题标题】:Disable pipeline for every commit in Gitlab and only run it on open merge request为 Gitlab 中的每个提交禁用管道,仅在打开合并请求时运行它
【发布时间】:2018-12-28 02:47:27
【问题描述】:

CI 管道在我工作中的 Gitlab 存储库中的每次提交上运行。有没有办法禁用它,只在对主分支的开放合并请求上运行 CI 管道?

【问题讨论】:

    标签: gitlab gitlab-ci


    【解决方案1】:

    2020 年更新,因为 onlyexcept 的解决方案是弃用的候选方案:https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic

    仍在.gitlab-ci.yml 中,您现在应该使用rules:参见https://docs.gitlab.com/ee/ci/yaml/#rules

    我只是在我的构建作业上设置此规则,该作业被“阻止”并等待来自 UI 的手动触发。

     rules:
       - when: manual
    

    请注意,如果我们看到 git 标记,我们可以创建带有触发条件的更高级规则。

    https://docs.gitlab.com/ee/ci/yaml/#exclude-jobs-with-rules-from-certain-pipelines

    【讨论】:

    • 应该注意的是,这会创建一个手动作业,它不会立即运行,但需要单击 GitLab UI 上的按钮才能运行。该问题要求更改触发器的类型,从提交更改为仅在打开的合并请求上。我想你会想做类似example given if: $CI_PIPELINE_SOURCE == "merge_request_event" 等的事情。
    【解决方案2】:

    对于合并,我们可以使用本指南#onlyrefs--exceptrefs

    合并请求

    适用于在创建或更新合并请求时创建的管道。启用合并请求管道、合并结果管道和合并序列。

    对于一般触发管道,我们可以一起使用only:variables:

      script:
        - . diff.sh $SMS_MESSAGE
      only:
        variables:
          - $ACTION == "diff"
    

    然后使用curl很容易触发:

    curl -X POST \
        -F token=$TOKEN \     # your token
        -F ref=$REF_NAME \    # branch name
        -F "variables[ACTION]=diff" \   # variable 
        https://gitlab.com/api/v4/projects/0/trigger/pipeline # your project endpoint
    

    variables[ACTION]=diff 这部分将分配 diffACTION 中,并将应用于 .gitlab-ci.ymlonly: 部分。

    【讨论】:

      【解决方案3】:

      是的,但前提是您在管道中的每个作业上都设置了它。

      https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic

      job:
        script: echo 'test'
        only:
          - merge_requests
      

      该作业将仅在作为合并请求一部分的提交上运行,而不是每次将提交推送到分支。如果您将每个作业都设置为此设置,则管道将永远不会运行。

      【讨论】:

      • 这看起来是个不错的答案...我们不能添加一些通用的rules 来阻止所有 CI 运行吗?
      • 我不认为你可以?您最好设置一些通用规则并使用 yaml 锚语法将其包含在每个作业的规则中。 Gitlab 将评估每个作业,而不是整个管道,因此您不能只设置一个通用规则。
      【解决方案4】:

      您可以在提交消息中添加[ci skip],构建将被跳过

      https://gitlab.com/gitlab-org/gitlab-ce/issues/14499

      【讨论】:

        【解决方案5】:

        目前没有配置选项可以做到这一点。以下是一些可用于“禁用”管道构建的内容。

        • 在提交消息中添加[ci skip] 不会触发推送管道。
        • 对管道内的所有作业使用exceptonly 选项。在这种情况下,为避免重复,您可以使用Anchors

        更新:GitLab 11.7

        推送到 GitLab 时,您可以通过将 ci.skip 选项传递给推送命令来跳过触发管道:git push -o ci.skip

        【讨论】:

        • 嗨,也许你可以用我的下面“更新”你的答案。
        【解决方案6】:

        没有。 (还没有 !) 您可以在此处关注预期的功能开发。

        https://gitlab.com/gitlab-org/gitlab-ce/issues/23902

        但是,您可以使用“maofr”的代码自动触发管道

        https://gitlab.com/gitlab-org/gitlab-ce/issues/23902#note_88958643

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-07
          • 2022-11-04
          • 1970-01-01
          • 1970-01-01
          • 2020-05-18
          • 1970-01-01
          • 2017-10-25
          • 1970-01-01
          相关资源
          最近更新 更多