【发布时间】:2018-12-28 02:47:27
【问题描述】:
CI 管道在我工作中的 Gitlab 存储库中的每次提交上运行。有没有办法禁用它,只在对主分支的开放合并请求上运行 CI 管道?
【问题讨论】:
CI 管道在我工作中的 Gitlab 存储库中的每次提交上运行。有没有办法禁用它,只在对主分支的开放合并请求上运行 CI 管道?
【问题讨论】:
2020 年更新,因为 only 和 except 的解决方案是弃用的候选方案: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
【讨论】:
if: $CI_PIPELINE_SOURCE == "merge_request_event" 等的事情。
对于合并,我们可以使用本指南#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 这部分将分配 diff 到 ACTION 中,并将应用于 .gitlab-ci.yml 和 only: 部分。
【讨论】:
是的,但前提是您在管道中的每个作业上都设置了它。
https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic
job:
script: echo 'test'
only:
- merge_requests
该作业将仅在作为合并请求一部分的提交上运行,而不是每次将提交推送到分支。如果您将每个作业都设置为此设置,则管道将永远不会运行。
【讨论】:
rules 来阻止所有 CI 运行吗?
您可以在提交消息中添加[ci skip],构建将被跳过
【讨论】:
目前没有配置选项可以做到这一点。以下是一些可用于“禁用”管道构建的内容。
[ci skip] 不会触发推送管道。except 和only 选项。在这种情况下,为避免重复,您可以使用Anchors。更新:GitLab 11.7
推送到 GitLab 时,您可以通过将 ci.skip 选项传递给推送命令来跳过触发管道:git push -o ci.skip
【讨论】:
没有。 (还没有 !) 您可以在此处关注预期的功能开发。
https://gitlab.com/gitlab-org/gitlab-ce/issues/23902
但是,您可以使用“maofr”的代码自动触发管道
https://gitlab.com/gitlab-org/gitlab-ce/issues/23902#note_88958643
【讨论】: