【GitLab 教程】

GitLab 是提供对 Git 存储库的远程访问的服务。除了托管您的代码,这些服务还提供旨在帮助管理软件开发生命周期的附加功能。这些附加功能包括管理不同人之间的代码共享、错误跟踪、维基空间和其他"社交编码"工具。

开始阅读

概要

GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。

CI/CD

GitLab CI/CD是GitLab内置的一款工具,用于通过持续方法论 (页面存档备份,存于互联网档案馆)(continuous methodologies)的软件开发。 该持续方法论包含三个部分:持续集成、持续交付、持续部署。[12][13]

  • 持续集成(Continuous Integration,简称CI),每次在上传代码块到基于Git仓库时,持续集成 会运行脚本去构建、测试、校验代码,这些操作是在合并到默认分支之前进行的。
  • 持续交付(Continuous Delivery,简称CD),在持续集成之后(即合并到默认分支之后),持续交付 将进行手动部署应用。
  • 持续部署(Continuous Deployment,简称CD),在持续集成之后(即合并到默认分支之后),持续部署 将进行自动部署应用。

原理

当开发者配置了GitLab CI/CD,那么当开发者使用Git提交(commit),那么就会触发CI/CD相关的一系列操作。这一系列操作由GitLab Runner执行,相关配置记载于.gitlab-ci.yml文件中,执行的结果将在GitLab页面中展示。[14] 每一次的提交(commit)将会出发一条流水线(pipeline),流水线是不同阶段(Stage)的任务(Job)的一个集合。[14] 阶段(Stage)用于逻辑切割,同一阶段的任务以并行方式执行,阶段间是顺序执行,上一个阶段执行失败,下一个阶段将不会执行。[15] .pre 为第一阶段(译为:之前) 和 .post 最后阶段(译为:提交时),这两个阶段不需要被定义,也无法被修改。[16]

与Docker集成

对 基于Docker的项目 进行构建和测试,有几种方式。一种方式是,使用shell executor进行Docker CLI命令操作。 另一种方式就是使用Docker executor进行操作,它是官方推荐的操作,executor通过在Docker中使用 Docker-in-Docker (页面存档备份,存于互联网档案馆)镜像 进行Job相关操作。[24]

事件

GitLab于2017年1月31日发布一系列紧急通告称,位于荷兰的系统管理员因操作失误而删除了包含310GB产品资料的文件夹,在取消删除操作后仅剩下4.5GB。运维人员之后检查发现,网站宣称和配备的多项备份措施均未正常运作或难以利用。GitLab在YouTube直播了恢复资料的过程[25]。网站最终丢失了最后 6 小时的数据库数据(包括问题、合并请求、评论、片段等,不含代码库)[26]