网易首页 > 网易号 > 正文 申请入驻

在 GitLab 上构建 CI 流水线 | Linux 中国

0
分享至

导读:连续集成(CI)是指代码变更会被自动构建和测试。以下是我为自己的 C++ 项目构建 CI 流水线的过程。

本文字数:3626,阅读时长大约: 5分钟

连续集成(continuous integration)(CI)是指代码变更会被自动构建和测试。以下是我为自己的 C++ 项目构建 CI 流水线的过程。

本文介绍如何在 gitlab.com 上配置 CI 流水线。我在前面的文章中介绍了 和 linux.cn。本文将在此基础上进一步配置 CI 流水线。我会先演示如何布设和运行 CI 流水线,然后再介绍如何配置它。

CI 是指提交到代码仓库的代码变更会被自动构建和测试。在开源领域,GitLab 是一个流行的 CI 流水线平台。除了作为中心 Git 仓库外,GitLab 还提供 CI/CD 流水线、问题跟踪(issue tracking) 和 容器注册表(container registry)功能。

相关术语

在进入正题之前,我先介绍在本文和 docs.gitlab.com 中会遇到的常见术语。

◈ 持续交付(continuous delivery)(CD):自动化供应软件,以供随时交付

◈ 持续部署(continuous deployment)(CD):自动化软件发布

◈ 流水线(pipeline): CI/CD 的直接构件,它由阶段和作业构成

◈ 阶段(stage):一组作业

◈ 作业(job):某项需要执行的具体任务,比如编译、单元测试等

◈ 执行器(runner):实际执行作业的服务

布设 CI 流水线

在下面的章节中,我将复用以前的 gitlab.com。点击 GitLab 仓库页面右上角的 复刻(Fork) 按钮复刻代码仓库。

Fork the project

设置执行器

为了让你对整个流程有所了解,我们先从在本地安装执行器讲起。

参照执行器服务 docs.gitlab.com 安装好服务,然后注册执行器。

1、选择 GitLab 项目页面左侧的 设置(Settings),再选择 CI/CD。

Select CI/CD in Settings

2、展开 执行器(Runners) 区域,关闭 共享的执行器(Shared runners) 选项(黄框处)。特别注意令牌和 URL(绿框处),下一步会用到它们。

Configure runner

3、在终端中运行gitlab-runner register,根据提示输入以下注册信息:

◈ GitLab 实例: (如上图)

◈ 注册令牌:从执行器区域中获取 (如上图)

◈ 描述:按需自由填写

◈ 标签:可以不填

◈ 执行环境:选Shell

如果有需要,你可以在~/.gitlab-runner/config.toml中修改这些配置。

4、用命令gitlab-runner run启动执行器。你可以在 GitLab 的项目设置界面执行器区域看到执行器的状态:

Available specific runners

运行流水线

前面已经提过,流水线就是一组由执行器执行的作业。每个推送到 GitLab 的提交都会生成一个附加到该提交的流水线。如果多个提交被一起推送,那么只会为最后一个提交生成流水线。为了演示,我直接在 GitLab 在线编辑器中提交和推送修改。

打开README.md文件,添加一行数据:

Web editor

现在提交修改。

这里注意默认的行为是为提交新建一个分支,为了简便起见,我们择提交到主分支。

Commit changes

提交后一会儿后,你就应该改能看到 GitLab 执行器执行的控制台中有输出消息:

  1. Checking for jobs... received job=1975932998 repo_url= runner=Z7MyQsA6

  2. Job succeeded duration_s=3.866619798 job=1975932998 project=32818130 runner=Z7MyQsA6

在 GitLab 项目概览界面左侧选择 CI/CD --> 管道(Pipelines),查看最近执行的流水线:

Pipeline overview

选中流水线可以在详情界面看到哪些作业失败了,并能查看各个作业的输出。

当遇到非零返回值是就认为作业执行失败了。在下面的例子中我通过调用exit 1强制让作业执行失败:

Job overview

CI 配置

阶段、流水线和作业的配置都在仓库根目录的 gitlab.com 文件中。我建议使用 GitLab 内置的流水线编辑器,它会自动对配置进行检查。

  1. stages:

  2. - build

  3. - test

  4. build:

  5. stage: build

  6. script:

  7. - cmake -B build -S .

  8. - cmake --build build --target Producer

  9. artifacts:

  10. paths:

  11. - build/Producer

  12. RunGTest:

  13. stage: test

  14. script:

  15. - cmake -B build -S .

  16. - cmake --build build --target GeneratorTest

  17. - build/Generator/GeneratorTest

  18. RunCTest:

  19. stage: test

  20. script:

  21. - cmake -B build -S .

  22. - cd build

  23. - ctest --output-on-failure -j6

文件中定义了两个阶段:buildtest,以及三个作业:buildRunGTestRunCTest。其中作业build属于一个同名的阶段,另外两个作业属于阶段test

script小节下的命令就是一般的 Shell 命令。你可以认为是将它们逐行输入到 Shell 中。

我要特别提及 产物artifact 这个特性。在示例中我定义了二进制的Producer为作业build的产物。产物会被上传到 GitLab 服务器,并且可以从服务器的这个页面上被下载:

Pipeline artifacts

默认情况下,后续阶段的作业会自动下载先前阶段作业生成的所有产物。

你可以在 docs.gitlab.com 上查看gitlab-ci.yml参考指南。

总结

上面只是一个最基本的例子,让你对持续集成的一般原则有一个了解。再演示中我禁用了共享执行器,然而这才是 GitLab 的优势所在。你可以在一个干净的容器化的环境中构架、测试和部署程序。除了使用 GitLab 提供的免费执行器,你也可以用自己的容器作为执行器。当然还有更高阶的用法:用 Kubernetes 来协调调度执行者容器,让流水线适应大规模使用的使用场景。如需进一步了解,可以查看 about.gitlab.com。

如果你使用的是 Fedora,需要注意的一点是目前 GitLab 执行者还不支持用 Podman 作为容器引擎。(LCTT 译注:Podman 是 Fedora 自带的容器引擎。)根据 议题(issue) gitlab.com,对 Podman 支持已将列上日程。(LCTT 译注:Podman 4.2 及以上版本增加了对于 GitLab 执行器的支持。)

把重复性的操作描述成作业,并将作业合并成流水线和阶段,可以让你跟踪它们的质量而不增加额外工作。。特别是在大型社区项目中,适当配置的 CI 可以告诉你提交的代码是否对项目有改善,为你接受或拒绝合并请求提供依据。

(题图:MJ/fb711c48-251a-4726-a41c-247370e5df25)

via:

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出

LCTT 译者 :Xiangbin Ma

翻译: 12.0 篇

贡献: 3332 天

2014-07-01

2023-08-15

https://linux.cn/lctt/toknow-gh

欢迎遵照 CC-BY-SA 协议规定转载,

如需转载,请在文章下留言 “ 转载:公众号名称”,

我们将为您添加白名单,授权“ 转载文章时可以修改”。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
【史话】张国焘说长征:毛泽东等北上抗日只是幌子,想逃跑才是真

【史话】张国焘说长征:毛泽东等北上抗日只是幌子,想逃跑才是真

年之父
2024-06-16 06:10:02
带着家庭作业踢欧洲杯 西班牙16岁天才亚马尔首秀错失进球

带着家庭作业踢欧洲杯 西班牙16岁天才亚马尔首秀错失进球

封面新闻
2024-06-16 07:10:19
闹大了!陈芋汐代言李宁,造型酷似日本风,网友直接炸锅了

闹大了!陈芋汐代言李宁,造型酷似日本风,网友直接炸锅了

吃鱼思故渊
2024-06-15 21:49:52
0-2到3-2!女排绝地反击,逆转世界第1,日本队空欢喜一场!

0-2到3-2!女排绝地反击,逆转世界第1,日本队空欢喜一场!

钉钉陌上花开
2024-06-15 22:43:32
刚向美国否认完“强迫劳动”,宁德时代就被曝要求员工896,奋斗100天

刚向美国否认完“强迫劳动”,宁德时代就被曝要求员工896,奋斗100天

小萝卜丝
2024-06-16 08:32:04
欧洲杯惨败之夜,38岁巨星消失!65分钟被换下,遭球迷恶搞

欧洲杯惨败之夜,38岁巨星消失!65分钟被换下,遭球迷恶搞

叶青足球世界
2024-06-16 02:56:58
31岁河南禹州市医保局局长任小龙,拟遴选进入省政府办公厅

31岁河南禹州市医保局局长任小龙,拟遴选进入省政府办公厅

澎湃新闻
2024-06-15 21:58:28
欧洲杯一夜2纪录!16岁巨星起飞:6秒狂奔40米,4人拦不住

欧洲杯一夜2纪录!16岁巨星起飞:6秒狂奔40米,4人拦不住

叶青足球世界
2024-06-16 02:21:19
全跑光了,一家7口套现20亿,把公司卖给了17万股民

全跑光了,一家7口套现20亿,把公司卖给了17万股民

灰鸽观察室
2024-06-15 20:09:36
幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

赢梯
2024-06-13 09:43:08
姜萍妈妈回老家:母女开心庆贺,父亲手捧鲜花,亲戚一起大团聚

姜萍妈妈回老家:母女开心庆贺,父亲手捧鲜花,亲戚一起大团聚

素素娱乐
2024-06-16 08:19:00
消失173天后,凯特王妃终于现身!但昨天发的近照图破绽百出,怎么回事呀?

消失173天后,凯特王妃终于现身!但昨天发的近照图破绽百出,怎么回事呀?

北美省钱快报
2024-06-16 00:17:56
G7峰会:喧嚣过后,困局依旧

G7峰会:喧嚣过后,困局依旧

齐鲁壹点
2024-06-16 07:43:09
大陆不再沉默,给黄仁勋上了一课,选在美收紧对华AI芯片出口之际

大陆不再沉默,给黄仁勋上了一课,选在美收紧对华AI芯片出口之际

陈菲副教授
2024-06-15 18:20:03
再次爆料!美国媒体:3名中国游泳选手呈阳性,2人是东京奥运冠军

再次爆料!美国媒体:3名中国游泳选手呈阳性,2人是东京奥运冠军

体坛知识分子
2024-06-16 06:20:02
G7发布联合声明,不许中国援俄,不许武力收台,也不许反制菲律宾

G7发布联合声明,不许中国援俄,不许武力收台,也不许反制菲律宾

贺文萍
2024-06-15 16:53:41
反抗有罪,投降有理?我们为何要大力支持徐辉批判乌克兰的言论?(一)

反抗有罪,投降有理?我们为何要大力支持徐辉批判乌克兰的言论?(一)

静夜史君
2024-06-15 03:06:19
网传南方医科大学老师因救人导致上课迟到,被留学生举报后,遭学校罚款+通报批评

网传南方医科大学老师因救人导致上课迟到,被留学生举报后,遭学校罚款+通报批评

可达鸭面面观
2024-06-16 10:28:07
现场|京港、沪港高铁动卧首发列车抵港,乘客“打100分”

现场|京港、沪港高铁动卧首发列车抵港,乘客“打100分”

澎湃新闻
2024-06-16 10:36:35
红色预警!大暴雨!浙江入梅后最强降水来袭

红色预警!大暴雨!浙江入梅后最强降水来袭

鲁中晨报
2024-06-16 10:19:06
2024-06-16 11:30:44
Linux
Linux
Linux 中国开源社区
8016文章数 73123关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

40余套房屋涉嫌"一房多卖" 有购房者内心积郁因病去世

头条要闻

40余套房屋涉嫌"一房多卖" 有购房者内心积郁因病去世

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

东风奕派eπ008售21.66万元 冰箱彩电都配齐

态度原创

艺术
健康
本地
数码
公开课

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

晚餐不吃or吃七分饱,哪种更减肥?

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

数码要闻

小米 Redmi Buds 6 青春版耳机通过多项认证,搭载恒玄蓝牙方案

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版