5. 创建和使用 CI/CD pipelines

原文链接:https://gitlab.com/help/ci/pipelines.md

注:Pipelines 在本文中译为“流水线”。Jobs 在本文中译为“作业”。

介绍

Pipelines 是持续集成、交付和部署的顶级组件。

Pipelines 包括:

  • 定义要运行的作业。例如,运行代码编译或测试。
  • 定义何时以及如何运行各个 Stages(阶段)。例如,测试仅在代码编译后运行。

如果有足够多的并发 Runners,则 Runners 并行执行同一阶段中的多个作业。

如果所有的作业都在同一个 stage 中:

  • 成功,管道进入下一 stage 阶段。
  • 失败,下一 stage 阶段没有(通常)执行,Pipelines 提前结束。

注意:如果您有一个来自 GitLab 的镜像存储库,您可能需要在项目的 Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates 以启用并触发流水线。

简单的流水线示例:

举个例子,想象一个由四个阶段组成的流水线,按以下顺序执行:

  • build,使用名为 compile 的作业。
  • test,有两个名为 testtest2 的作业。
  • staging,有一个名为 deploy-to-stage 的作业。
  • production,有一项名为 deploy-to-prod 的作业。

流水线可视化

流水线可以是具有许多顺序执行和并行执行作业的复杂结构。

为了更容易理解流水线的流程,GitLab 具有用于查看流水线及其状态的流水线图。

流水线图可以以两种不同的方式显示,具体取决于您访问图表的页面。

注意:GitLab 在流水线图(如下所示)中显示时将这些阶段的名称大写。

常规流水线图

常规流水线图显示每个阶段的作业名称。当您在单个流水线页面上时,可以找到常规流水线图。例如:

image

迷你流水线图

迷你流水线图占用的空间更少,可以快速通知您所有作业是否通过或出现故障。导航到以下内容时可以找到迷你流水线图:

  • 流水线索引页面。
  • 单个提交页面。
  • 合并请求页面。

迷你流水线图允许您查看单个提交的所有相关作业以及管道的每个阶段的最终结果。这使您可以快速查看失败并修复它。

迷你流水线图中的阶段是可折叠的。将鼠标悬停在它们上方,然后单击以展开其作业。

迷你流水线图 扩展迷你流水线图
image
image

流水线图中的作业排序

作业排序取决于流水线图的类型。对于常规流水线图,作业按名称排序。对于迷你流水线图(在GitLab 9.0中引入),作业按严重性排序,然后按名称排序。

严重性的顺序是:

  • failed
  • warning
  • pending
  • running
  • manual
  • scheduled
  • canceled
  • success
  • skipped
  • created

例如:

image

如何计算流水线持续时间

给定流水线的总运行时间不包括重试和挂起(排队)时间。

每个作业都表示为一个 Period(时期),包括:

  • Period#first(当作业开始时);
  • Period#last(当作业结束时);

一个简单的例子是:

  • A (1, 3)
  • B (2, 4)
  • C (6, 7)

在示例中:

  • A 从 1 开始到 3 结束。
  • B 从 2 开始到 4 结束。
  • C 从 6 开始到 7 结束。

在视觉上,它可以被视为:

0  1  2  3  4  5  6  7
   AAAAAAA
      BBBBBBB
                  CCCC

A,B 和 C 的并集是(1,4)和(6,7)。因此,总运行时间为:

(4 - 1) + (7 - 6) => 4

作业日志部分的扩展和折叠

作业日志分为可折叠或展开的部分。

在以下示例中:

  • 扩展了两个部分并且可以折叠。
  • 一个部分已折叠并且可以展开。
image

配置流水线

流水线及其组件作业和 stages 在各自项目的 .gitlab-ci.yml 文件中定义。

特别是:

  • 作业是基本配置组件。
  • 阶段是使用 stages 关键字定义的。

有关所有可用的配置选项,请参阅 GitLab CI/CD 管道配置参考

设置和 schedules(计划)

除了通过 .gitlab-ci.yml 配置作业外,还可以通过 GitLab UI 获得其他配置选项:

  • 每个项目的流水线设置。有关更多信息,请参阅流水线设置
  • schedules 计划。有关更多信息,请参阅流水线计划

分组作业

如果您有许多类似的作业,您的流水线图将变得冗长且难以阅读。

出于这个原因,类似的作业可以自动组合在一起。如果作业名称以某种方式格式化,它们将在常规管道图(而不是迷你图)中折叠为单个组。

如果您没有在其中看到重试或取消按钮,您将知道流水线何时对作业进行分组。将鼠标悬停在它们上方将显示分组作业的数量。单击以展开它们。

image

配置分组

在流水线配置文件中,作业名称必须包含两个用以下之一分隔的数字(您甚至可以交替使用它们):

  • 空格;
  • 斜杠(/);
  • 冒号(:);

注意:更具体地说,它使用这个正则表达式:\d+[\s:\/\\]+\d+\s*

分组如何工作

通过从左到右比较两个数字来对作业进行排序。您通常希望第一个是索引,第二个是总数。
例如,以下作业将分组在名为 test 的作业下:

  • test 0 3
  • test 1 3
  • test 2 3

以下作业将分组在名为test ruby 的作业下:

  • test 1:2 ruby
  • test 2:2 ruby

以下作业也将分组在名为 test ruby 的作业下:

  • 1/3 test ruby
  • 2/3 test ruby
  • 3/3 test ruby

合并请求的流水线

GitLab 支持配置仅针对合并请求运行的管道。有关更多信息,请参阅合并请求的管道。

Badges 徽章

流水线状态和测试覆盖率报告标记可用于每个项目并可配置。

有关向项目添加流水线标记的信息,请参阅流水线标记

多项目流水线

不同项目的流水线可以组合在一起并可视化。

有关更多信息,请参阅多项目流水线

使用流水线

通常情况下,流水线可以自动执行,一旦创建就不需要干预。但是,有些情况下您需要与流水线进行交互。这些记录如下。

手动执行流水线

可以使用预定义或手动指定的变量手动执行流水线。

如果需要在流水线的正常操作之外获取流水线的结果(例如,代码构建),则可以执行此操作。

要手动执行流水线:

  1. 导航到您的项目的 CI/CD > Pipelines
  2. 单击 Run Pipeline 按钮。
  3. Run Pipeline 页面中:
    1. Create for 字段中选择要运行流水线的分支。
    2. 输入流水线运行所需的任何环境变量。
    3. 单击 Create Pipeline 按钮。

管道将按配置执行作业。

访问流水线

您可以在项目的 CI/CD > Pipelines 页面下找到当前和历史运行的流水线。单击一个流水线,将显示为该流水线运行的作业。

image

您还可以通过导航到 Pipelines 选项卡来访问合并请求的流水线。

访问单个作业

访问某一条流水线时,您可以看到该流水线下的相关作业。单击单个作业将显示其作业跟踪,并允许您:

  • 取消作业。
  • 重试作业。
  • 删除作业跟踪。

查看作业运行失败的原因

当流水线出现故障或被允许失败时,有几个地方可以快速检查失败的原因:

  • 在流水线图中,在流水线详细信息视图上。
  • 在流水线小部件中,在合并请求和提交页面中。
  • 在作业视图中,在作业的全局和详细视图中。

在任何地方,如果将鼠标悬停在失败的作业上,您可以看到失败的原因。

image

从 GitLab 10.8 版本起,您还可以在“作业详细信息”页面上查看失败的原因。

流水线图的手动操作

使用 when:manual 参数配置的手动操作允许您在流水线中向前移动之前需要手动交互。您可以直接从流水线图中执行此操作。只需单击播放按钮即可执行该特定作业。例如,您的流水线自动启动,但需要手动操作才能部署到生产环境。在下面的示例中,生产阶段具有手动操作的作业。

image

运行手动作业时指定变量

运行手动作业时,您可以提供其他特定于作业的变量。您可以使用其他变量从要运行的手动作业的作业页面执行此操作。当您想要使用环境变量更改作业的执行时,这非常有用。

[图片上传失败...(image-972008-1566114335164)]

延迟流水线图中的作业

如果您不想立即运行作业,可以使用 when:delayed 参数来延迟作业执行一段时间。

这对于逐步推出新代码的定时增量转出特别有用。

例如,如果您开始推出新代码并且:

  • 用户不会遇到麻烦,GitLab 可以自动完成从 0% 到 100% 的部署。
  • 用户遇到新代码时出现问题,您可以通过取消流水线并回滚到上一个稳定版本来停止定时增量部署。
image

使用 API

GitLab 提供 API 端点:

在一个阶段中执行多个手动操作

可以使用 “Play all manual” 按钮同时启动单个阶段中的多个手动操作。用户单击此按钮后,将触发每个单独的手动操作并刷新到更新状态。

此功能仅适用于:

  • 对于至少具有开发者访问权限的用户。
  • 如果 stage 包含手动操作。

受保护分支的安全性

在受保护的分支上执行流水线时,将强制执行严格的安全模型。

仅当允许用户合并或推送该特定分支时,才允许在受保护的分支上执行以下操作:

  • 手动运行流水线(使用 Web UI 或流水线 API)。
  • 运行预定的流水线。
  • 使用触发器运行流水线。
  • 触发现有流水线上的手动操作。
  • 重试或取消现有作业(使用 Web UI 或流水线 API)。

标记为受保护的变量只能在受保护的分支上运行的作业访问,从而防止不受信任的用户无意中访问敏感信息(如部署凭据和令牌)。

标记为受保护的运行程序只能在受保护的分支上运行作业,从而避免在受保护的运行程序上执行不受信任的代码,并保留部署密钥和其他凭据不被无意访问。为了确保在受保护的 Runner 上执行的作业不会使用常规 Runner,必须相应地对其进行标记。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容