2. 开始使用 GitLab CI/CD

原文链接:https://gitlab.com/help/ci/quick_start/README

开始使用 GitLab CI/CD

注意:从 8.0 版本开始,GitLab 持续集成(CI)完全集成到 GitLab 中,并在所有项目中默认启用。

注意:请记住,只有项目维护者和管理员才有权访问项目的设置。

注意:从 Jenkins 转到 GitLab?查看将您已有的 pipelines 转换为我们的格式的参考

GitLab 提供持续集成服务。如果你将 .gitlab-ci.yml 文件添加到存储库的根目录下,并将 GitLab 项目配置为使用 Runner,则每次提交或推送都会触发 CI pipelines(注:pipelines 官方译为“流水线”,本文中亦以此称之)。

.gitlab-ci.yml 文件告诉 GitLab runner 该做什么。默认情况下,它运行一个包含三个 stages(阶段) 的流水线:buildtestdeploy。你不需要使用所有这三个 stage;没有作业的 stage 会被忽略。

如果一切运行正常(没有非零返回值),你会看到一个与提交相关的漂亮的绿色复选标记 ✅。这样你可以在查看代码之前,轻松查看提交是否导致任何测试失败问题。

大多数项目使用 GitLab 的 CI 服务来运行测试套件,以便开发人员在修改某些内容时立即获得反馈。

使用持续交付和持续部署将测试代码自动部署到测试和生产环境的趋势越来越明显。

简而言之,实现一个可运行的 CI 服务所需的步骤可归纳为:

  • .gitlab-ci.yml 文件添加到存储库的根目录下。
  • 配置一个 Runner。

自此,每次向你的 Git 存储库执行 push 操作时,Runner 将自动启动流水线,流水线将显示在项目的 Pipelines 页面下。


本指南假设您拥有:

  • 一个正在运行的大于 8.0 版本的 GitLab 实例或正在使用 GitLab.com
  • 一个存储在 GitLab 中的项目,并且您希望使用 CI 服务。
  • 可以访问该项目的维护者或项目所有者。

让我们分解它并努力解决 GitLab CI 难题。

创建一个 .gitlab-ci.yml 文件

在创建 .gitlab-ci.yml 文件之前,让我们先简要解释一下这是什么。

什么是 .gitlab-ci.yml

您可以在 .gitlab-ci.yml 文件中配置 CI 对项目执行的操作。该文件位于存储库的根目录中。

当向您的存储库执行任何 push 操作时,GitLab 将查找 .gitlab-ci.yml 文件,并根据该文件提交的内容在 Runners 上启动一个作业。

因为 .gitlab-ci.yml 存储在 Git 存储库中并且受版本控制,旧版本仍然可以成功构建,分支可以轻松地使用 CI,分支可以具有不同的流水线和作业,并且您有的单一可信的来源用于持续集成。您可以在我们的 博客 中详细了解我们使用 .gitlab-ci.yml 的原因。

创建一个简单的 .gitlab-ci.yml 文件

注意:.gitlab-ci.yml 是一个 YAML 格式的文件,因此您必须特别注意缩进。始终使用空格,而不是制表符。

您需要在存储库的根目录中创建名为 .gitlab-ci.yml 的文件。下面是 Ruby on Rails 项目的示例。

image: "ruby:2.5"

before_script:
  - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
  - ruby -v
  - which ruby
  - gem install bundler --no-document
  - bundle install --jobs $(nproc)  "${FLAGS[@]}"

rspec:
  script:
    - bundle exec rspec

rubocop:
  script:
    - bundle exec rubocop

这是最简单的配置,适用于大多数 Ruby 应用程序:

  1. 定义两个作业 rspecrubocop(名称是任意的)分别表示要执行的两种不同命令。
  2. 在每个 job 作业被执行之前,会先执行 before_script 中定义的命令。

.gitlab-ci.yml 文件定义了具有运行方式和时间约束的作业集。作业被定义为具有名称的顶级元素(在我们的示例中为 rspecrubocop),并且始终必须包含 script 关键字。 Jobs 用于创建 jobs 作业,然后由 Runners 选择并在 Runner 的环境下执行。

重要的是每项 job 作业都是相互独立运作的。

如果要检查项目中的 .gitlab-ci.yml 配置是否有效,则在项目命名空间的 /-/ci/lint 页面下有一个 Lint 工具。您还可以在你的项目的 CI/CD ➔ PipelinesPipelines ➔ Jobs 页面下找到 “CI Lint” 按钮。

有关更多信息和完整的.gitlab-ci.yml语法,请阅读 GitLab CI/CD 管道配置参考文档

.gitlab-ci.yml 推送到 GitLab

一旦你创建了 .gitlab-ci.yml 文件,你应该将它添加到你的 Git 存储库并将其推送到 GitLab。

git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml"
git push origin master

现在,如果您转到 “Pipelines(流水线)”页面,您将看到 Pipelines 处于待处理状态。

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

您也可以转到 “Commits” 页面,注意提交 SHA 哈希值旁边的小暂停图标。

image

点击它,您将被重定向到该特定提交的 job 页面。

image

请注意,有一个挂起的作业以我们在 .gitlab-ci.yml 中写的命名。橙色的标识 “stuck(卡住)”表示尚未为此作业配置 Runner。

配置 Runner

在 GitLab 中,Runners 运行您在 .gitlab-ci.yml 中定义的作业。Runner 可以是虚拟机,VPS,裸机,docker 容器甚至是容器集群。GitLab 和 Runners 通过 API 进行通信。所以唯一的要求是部署 Runner 的机器可以访问 GitLab 服务器。

Runner 可以特定于某个项目,也可以同时为 GitLab 中的多个项目提供服务。如果它服务于所有项目,则称为 Shared Runner

Runners 文档中查找有关不同 Runners 的更多信息。

您可以通过转到 Settings ➔ CI/CD 找到是否为您的项目分配了任何 Runner。设置一个 Runner 既简单又直接。由 GitLab 支持的官方 Runner 是用 Go 语言编写的,其文档可以在 https://docs.gitlab.com/runner/ 中找到。

要获得 Runner 功能,您需要执行以下两个步骤:

  1. 安装它
  2. 配置它

按照上面的链接设置您自己的 Runner 或使用 Shared Runner,如下一节所述。

设置好 Runner 后,您应该在项目的 Settings ➔ CI/CD 中的 Runners 页面上看到它。

image

共享 Runners

如果您使用 GitLab.com,您可以使用 GitLab Inc. 提供的共享 Runners。

这些是在 GitLab 的基础架构上运行的特殊虚拟机,可以构建任何项目。

要启用共享 Runners,您必须转到项目的 Settings ➔ CI/CD,然后单击 Enable shared runners

查看流水线和作业的状态

成功配置好 Runner 后,您应该会看到上次提交的状态从挂起更改为运行、成功或失败。您可以转到项目的 “Pipelines” 页面来查看所有的流水线。

image

或者您可以通过 Pipelines ➔ Jobs 页面查看所有的作业。

image

通过单击作业的状态,您将能够看到该作业的日志。这对于诊断工作失败或行为与预期不同的原因非常重要。

image

您还可以在 GitLab 的各个页面中查看任何提交的状态,例如 Commits 提交和 Merge requests 合并请求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容