在GitLab 8.8中引入。

介绍

管道是持续集成,交付和部署的顶级组件。

管道包括:

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

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

如果一个阶段的所有工作:

  • 成功,管道进入下一阶段。
  • 失败,下一阶段没有(通常)执行,管道提前结束。
注意: 如果您有GitLab从中提取镜像存储库,则可能需要在项目的“设置”>“存储库”>“从远程存储库中提取”>“镜像更新的触发管道”中启用管道触发 。

简单的管道示例

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

  • build,有一份工作compile
  • test,有两个叫做test和的工作test2
  • staging,有一份工作deploy-to-stage
  • production,有一份工作deploy-to-prod

可视化管道

在GitLab 8.11中引入

管道可以是具有许多顺序和并行作业的复杂结构。

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

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

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

常规管道图

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

管道迷你图

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

  • 管道索引页面。
  • 单个提交页面。
  • 合并请求页面。

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

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

迷你图 迷你图扩大了

管道图中的工作排序

作业排序取决于管道图的类型。对于常规管道图,作业按名称排序。

对于管道迷你图( 在GitLab 9.0中引入),作业按严重性排序,然后按名称排序。

严重性的顺序是:

  • 失败
  • 警告
  • 有待
  • 赛跑
  • 手册
  • 计划
  • 取消
  • 成功
  • 跳过
  • 创建

例如:

如何计算管道持续时间

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

每项工作都表示为a 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

扩展和折叠作业日志部分

在GitLab 12.0中引入

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

在以下示例中:

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

配置管道

管道及其组件作业和阶段在.gitlab-ci.yml每个项目的文件中定义。

特别是:

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

设置和日程安排

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

  • 每个项目的管道设置。有关更多信息,请参阅管道设置
  • 管道计划。有关更多信息,请参阅管道计划

分组工作

在GitLab 8.12中引入

如果您有许多类似的工作,您的管道图将变得冗长且难以阅读。

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

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

配置分组

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

  • 空间。
  • 斜线(/)。
  • 冒号(:)。
注意: 更具体地说,它使用正则表达式:\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支持配置仅针对合并请求运行的管道。有关更多信息,请参阅 合并请求的管道

徽章

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

有关向项目添加管道标记的信息,请参阅管道标记

多项目管道

额外费用

不同项目的管道可以组合在一起并可视化。

有关更多信息,请参阅多项目管道

使用管道

通常,管道自动执行,一旦创建就不需要干预。

但是,有些情况下您需要与管道进行交互。这些记录如下。

手动执行管道

可以使用预定义或手动指定的变量手动执行管道。

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

要手动执行管道:

  1. 导航到项目的CI / CD>管道。
  2. 单击“ 运行管道”按钮。
  3. 在“ 运行管道”页面上:
    1. 在“ 创建”字段中选择要运行管道的分支。
    2. 输入管道运行所需的任何环境变量
    3. 单击“ 创建管道”按钮。

管道将按配置执行作业。

访问管道

您可以在项目的CI / CD>管道页面下找到当前和历史管道运行 。单击管道将显示为该管道运行的作业。

您还可以通过导航到“ 管道”选项卡来访问合并请求的管道。

访问个人工作

访问管道时,您可以看到该管道的相关作业。

单击单个作业将显示其作业跟踪,并允许您:

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

看到失业的原因

在GitLab 10.7中引入

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

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

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

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

管道图的手动操作

在GitLab 8.15中引入

使用when:manual参数配置的手动操作允许您在管道中向前移动之前需要手动交互。

您可以直接从管道图中执行此操作。只需单击播放按钮即可执行该特定作业。

例如,您的管道自动启动,但需要手动操作才能 部署到生产环境。在下面的示例中,production舞台具有手动操作。

延迟管道图中的作业

在GitLab 11.4中引入

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

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

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

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

使用API

GitLab提供API端点:

在阶段中启动多个手动操作

在GitLab 11.11中引入

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

此功能仅适用于:

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

受保护分支的安全性

受保护的分支上执行管道时,将强制执行严格的安全模型 。

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

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

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

运动员标记为保护只能保护分支机构运行的作业,避免不受信任的代码要在保护运动员和保存部署键被意外地访问其他凭证执行。为了确保在受保护的执行者上执行的作业不会使用常规执行者,必须相应地对其进行标记。

 

创建和使用CI / CD管道【译】【原】的更多相关文章

  1. 如何搭建安全的 CI/CD 管道?

    Eolink 前端负责人黎芷君进行了<工程化- CI / CD>的主题演讲,围绕 CI/CD 管道安全的实践,分享自己在搭建 CI/CD 管道过程中所总结的重要经验,与开发者深入讨论 &q ...

  2. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

  3. 重新安装kuboard后,原先配置的CI/CD命令都没了,需要重新创建

    背景介绍 使用如下命令创建的kuboard服务,上一层用nginx设置代理,用域名访问使用的 docker run -d \ --restart=always \ --name=kuboard \ - ...

  4. 持续集成指南:GitLab 的 CI/CD 工具配置与使用

    前言 写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试.编译.发布这些重复性很高的工作 ...

  5. .NETCore下CI/CD之自动化测试

    前言 为了呼应<中国.NET开发者峰会2019上海站>,作为演讲嘉宾,我希望和各位同行建立更多的互动,为此,我特地将部分演讲内容,整理成文章先行发布.本文从零开始,一步一步的引导,从安装J ...

  6. DevOps 什么是 CI/CD?

    CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时 ...

  7. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  8. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...

  9. k8s-jenkins x CI/CD 动态创建slave---01

    jenkins CI/CD(动态创建slave)简述: 由于之前管理kubernetes集群应用发布,用的是Gitlab-CI,用作开发环境管理还可以,生产环境管理发布,缺点太多,打包速度很慢.研究新 ...

随机推荐

  1. matplotlib 自带的几种美化样式

    1.用 matplotlib.pyplot.style.avaliable 可查看 matplotlib 自带的美化样式如下: ['bmh', 'classic', 'dark_background' ...

  2. js数组sort()排序的问题

    最近跟自以为很了解的数组干上了,就像许多我们认知的东西一样,总以为自己很了解的东西,其实并不了解. var a=[12,4,1,43,5,3,52];  alert(a);   //源:12,4,1, ...

  3. NOIP 2002 选数

    洛谷 P1036 选数 洛谷传送门 JDOJ 1297: [NOIP2002]选数 T2 JDOJ传送门 Description ​ 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k< ...

  4. Java 内存分配(转)

    Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性. 寄存器:JVM内部虚拟寄 ...

  5. 【redis】设置密码

    1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redis,如果没有开启redis则需要先开启:[root@iZ94jz ...

  6. 面向对象的理解 抽象类&接口

    一.关于面向对象 1.什么是面向对象     在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu ...

  7. 分布式系统全局唯一ID生成

    一 什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息, ...

  8. IDEA-Maven的Dependencies中出现红色波浪线

    解决方法:移除相关依赖,再重新添加即可 情况及具体解决方法如下:1.在Maven Project中 Dependencies 出现红色波浪线 2.查询本地仓库:jar包已存在 3.解决方法:3.1.从 ...

  9. ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)

    “出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据”.这是文档中的原话,也 ...

  10. intellij JUnit mockito

    在intellij越来越普及的情况下,利用JUnit在intellij中进行测试就显得很基础了,但网上的资料总有误导的地方,这里记录一下. 总体而言,要开始单元测试,可以分为三步,添加相关的插件,添加 ...