【问题标题】:Gitlab: are "web pipelines" examples of "branch pipelines"?Gitlab:“网络管道”是“分支管道”的例子吗?
【发布时间】:2022-11-20 01:12:51
【问题描述】:

我想添加一个工作流规则以允许管道在它是“网络管道”(created by using Run pipeline button in the GitLab UI)并且所选分支是主要分支时运行。所以我的第一个想法是写:

if: $CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

但是,在阅读 Gitlab 文档时,我了解到 $CI_COMMIT_BRANCH 仅在“分支管道”中可用,请参见此处:

CI_COMMIT_BRANCH:提交分支名称。在分支管道中可用,包括默认分支的管道

该文档似乎定义了“分支管线“作为在分支中发生推送时运行的管道,请参阅herethere

您可以将管道配置为在每次向分支提交更改时运行。这种类型的管道称为分支管线.

分支管线为 Git 运行将事件推送到分支,例如新的提交或标签。

示例:if: $CI_COMMIT_BRANCH == "main":如果将更改推送到main

(但是请注意,“分支管道”不是$CI_PIPELINE_SOURCE中的一种管道(参见herepushwebscheduleapiexternalchat、@987654337 @、merge_request_eventexternal_pull_request_eventparent_pipelinetriggerpipeline)。

因此,在仔细阅读文档后,我只能得出结论,“web”管道不是分支管道,因为没有提交或推送负责启动管道,因此 CI_COMMIT_BRANCH 将不可用。所以我开始寻找另一个告诉我当前分支名称的预定义变量(未成功)。

然而,令我惊讶的是,我可以通过实验看到 CI_COMMIT_BRANCH 实际上在网络管道中可用!这不是令人难以置信的混乱吗?那么web 管道毕竟是“分支管道”吗?为什么?其他哪些类型的$CI_PIPELINE_SOURCE被视为“分支管道”?

【问题讨论】:

    标签: gitlab gitlab-ci


    【解决方案1】:

    您正在比较不相互排斥的术语。

    请参阅predefined variables reference

    以下是互斥变量:

    • CI_COMMIT_BRANCH - 提交分支名称。在分支管道中可用,包括默认分支的管道。在合并请求管道或标记管道中不可用。
    • CI_COMMIT_TAG - 提交标签名称。仅在标签的管道中可用。
    • All variables specific to merge request pipelines

    这与触发构建的东西完全不同:

    CI_PIPELINE_SOURCE
    管道是如何触发的。可以是push, web, schedule, api, 外部、聊天、网页、merge_request_event, external_pull_request_event、parent_pipeline、触发器或管道。 有关每个值的说明,请参阅Common if clauses for rules, 它使用此变量来控制作业何时运行。

    如果您从 web gui 触发 main 上的构建,它不会停止在 main 上。它只是不是由推送事件触发的。但 GitLab 仍在特定分支上构建特定提交。如果您从 Web 手动触发标签构建或安排标签构建,源将反映(webschedule),CI_COMMIT_BRANCH 将被取消设置,CI_COMMIT_TAG 将被设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2020-06-14
      • 2022-01-16
      • 1970-01-01
      • 2013-11-14
      相关资源
      最近更新 更多