当前位置:首页 > 技术分析 > 正文内容

Gitlab概览

ruisui884个月前 (01-08)技术分析23

Gitlab是开源的基于Git的仓库管理系统,也可以管理软件开发的整个生命周期,是项目管理和代码托管平台,支撑着整个DevOps的生命周期。Gitlab很容易选为GitHub,作为公司私有库管理的工具。我们可以用Gitlab Workflow来协同整个团队的软件开发管理过程。

软件开发阶段

Gitlab工作流将软件开发定义为10个阶段,并提供相应的解决方案,帮助团队高效协作,完成项目开发。

Gitlab flow

区别于SVN等版本控制系统,基于Git的版本管理对于创建分支和合并变得更加容易,也方便项目的管理。

利用工单追踪,将功能特征驱动开发和功能特征分支有机结合在一起。受保护的分支对于权限较低开发者等角色需要通过发起合并请求,复核评审通过后最终才能合并到保护分支。GitLab flow是GitLab官方推荐的分支管理策略。我们可以在原则上约定:分支分为永久分支临时分支,都是在master分支以外建立。永久分支不会被删除,包括主分支master,准生产分支pre-production,生产分支production。临时分支分为Feature特征分支Fix修复分支,在开发完成会被删除。一种简单的方案,通常可以基于最新的master主分支,创建特征分支,进行特征开发,最后合并请求到master分支。

只有一个master主分支,这样的好处在于,可以代码及时合并,可以是本地代码库存量最小,也可以更快的持续交付。当然,与此同时,部署、环境、集成等相关问题也没得到很好的解决。

对于每一次分支合并,我们总是期望可以部署一个稳定的版本。我们可以考虑多环境分支的情况。

Gitlab flow 的最大原则叫做"上游优先"(upsteam first)。代码的变化,必须由"上游"向"下游"发展。Feature和Fix是master的"上游",master是pre-production的上游,pre-production是production的"上游"。比如,生产环境出现了bug 或者要开发新的feature,这时就要建一个临时Hotfix或Feature分支,开发完成把它合并到master,确认没有问题,再cherry-pick到pre-production,这一步也没有问题,才进入production。Feature和Fix在开发人员在开发环境部署测试,master在测试环境中部署测试,pre-production在演示环境中部署测试,production在生产环境发布,一条流水线下来,可以持续完成项目的部署交付。

此外,我们可以有多稳定版本的分支策略,用于将软件发布给外界。

版本发布适用于APP、小程序等有版本规划的项目。稳定分支以master为起点,并尽可能晚地创建。通过尽可能晚的分支,可以最大程度地减少将错误修正应用于多个分支的时间。在master上打出稳定的分支版本。如果稳定分支发行后,出现bug,可以先将错误修复到master,然后cherry-picked到稳定分支,我们可以通过设置Tag来提高补丁版本,可以维护一个稳定分支专门指向最新版本发布的分支提交。

此外,我们可以对分支名称做个约定,在Gitlab上 基于issue创建的分支默认是issue编号+issue标题等等。

Issue

GitLab 有一个强大的工单追溯系统,在使用过程中,允许你和你的团队,以及你的合作者分享和讨论建议。所有的开发工作都应该以工单任务为导向

我们可以填写是否私密、受托人、截止日期、标签 、里程碑等信息,利用这些信息可以更加方便地组织活动和安排优先级。

Labels

GitLab 标签也是Gitlab flow的重要组成部分,可以对issue工单进行分类和定位。也可以通过定义优先级标签组织它们。通常和Boards一起,来组织计划和工作流程。

我们可以根据需要设计一些常用标签,如待办类,Bug类,功能改进类等进行定位、统计和跟踪。

Boards

Gitlab 工单面板是一个用于计划以及组织工单,使之符合项目工作流的工具。Boards包含了与其相关的对应标签,每一个列表包含了相关的被标记的issue工单,并且以卡片的形式展示出来。这些issue卡片可以在列表之间推拽移动,被移动的卡片,其标签将会依据你移动的位置更新到相应列表上。

Milestones

Milestones 是GitLab 中基于共同目标、时间进度追踪团队工作的最好工具。它定义了目标阶段对应的工单集合和合并请求。通常是团队协作在截止日期完成某个目标。例如,发布一个新的版本,启动一个新的产品,在某个日期前完成,或者按季度收尾一些项目。

Merge Request

我们可以根据issue创建branch和发起Merge Requests(MR)合并到目标分支。

开发者检出特征分支开发,提交后并推送到远程。功能分支和修复分支合并进master分支,必须通过Merge Requests。审核员可以对这些提交和变化进行评审,可以反复这个过程,直到符合代码规范,才合并到目标分支。

master分支应该受到保护,不是每个人都可以直接修改这个分支,以及拥有审批 Merge Request的权力。

上图展示了保护分支的权限设置,规定了哪些角色具有Branch的MR和push的权限。否则,推送无权限的分支时可能会出现以下错误:

you are not allowed to push code to protected branches on this project

每一次 MR 都会有一个标题(这个标题总结了这次的改动)并且一个用 书写的描述。在描述中,你可以简单的描述该 MR 做了什么,涉及的任何工单和 MR(在它们之间创建联系),并且,你也可以添加个,当该MR 被合并的时候,相关联的工单就会自动被关闭。在描述里添加 Closes #xxx,xxx为对应的issue编号。Merge成功后,自动关闭工单。

有权限角色在Merge RequestMerge 前,注意下Merge的内容,评审通过后,最好能确保每一次Merge后对应Master分支都是稳定的

WIP MR

WIP (Work in Process) MR,避免 MR 在准备就绪前被合并。只需要添加 WIP: 在 MR 的标题开头,它将不会被合并,除非你把 WIP: 删除。当你改动已经准备好被合并,编辑工单来手动删除 WIP: 。或者使用快捷方式,只需要在评论或者 MR 描述中输入斜线命令/wip并提交即可快速添加到合并请求中。

Code Review

一旦你创建一个合并请求,审核方收到反馈,就可以决定是否合并这个请求了。审核者可以进行差异比较,回复或者解决它们。在图形界面中可以看到提交历史,通过提交历史,你可以追踪文件的每一次改变。你可以以行内差异或左右对比的方式浏览它们,甚至评论他们。

如果有合并冲突,甚至可以在线编辑解决。

Memebers

项目拥有者和维护者需要添加协作的团队成员,进行项目协同,可以选择已注册gitlab的有效成员进行邀请。

受邀人会受到电子邮件,同意后就可以加入团队了。低权限角色只能开发,甚至只能浏览,无权限维护。

CI/CD

是构建项目持续集成、持续部署和持续交付的有效工具。首先需要在项目根目录下创建文件.gitlab-ci.yml。

例如,我们可以在项目中每一次Merge Request,都可以触发pipeline 去构建、测试和部署。而具体的构建规则可以根据编写不同的.gitlab-ci.yaml脚本实现。CI/CD pipelines的运行离不开Gitlab Runner。所以,还需要安装GitLab Runner,它可以在任何地方(能ping通Gitlab)运行,也可以是以Shell、docker、kubernetes等不同的形式运行。GitLab Runner向Gitlab注册,需要Gitlab授权。注册成功后,GitLab Runners负责从Gitlab拉取代码进行构建、测试和部署。区别于Jenkins,Gitlab-CI更加适合DevOps人员,开发与运维是同一个人,非常适合敏捷开发。Jenkins通过Hook可以使编译服务和代码仓库分离,耦合度低,适合多角色团队,职责分明。将另有篇幅概述,这一块暂不赘述。

周期分析

我们可以通过周期分析,可以查看各个阶段的统计,及时反馈项目的进展和改进项目的不足之处。

Markdown Tips

在Issue 或 Merge Request 等对应的markdown描述或者git commit -m ""注释信息中,可以添加特殊标识来实现一些特性。可以看下简单的例子:

## 增加一个新页面
这个 MR 将会为这个项目创建一个包含该 app 概览的 `readme.md`。
Closes #1,#2 and https://gitlab.wenqy.com/group/project/issues/<8>
related to #3
:smile:
/cc @wenqy @all

上面是MR的一段描述。合并时,会关闭编号为1,2的issue工单,以及url指向的项目工单。这还做了一个编号为3的issue工单关联,不会关闭。并邮件通知用户。还支持emoji表情。

添加到你的 MR 以便可以使用 【GitLab周期分析】追踪你的项目进展,是十分重要的。它将会追踪"CODE"阶段,衡量第一次提交及创建一个相关的合并请求所间隔的时间。

第一次提交

第一次提交时添加一个关联的Issue编号,利用Ref #关联

git commit -m "this is my commit message. Ref #xxx"

或者使用全称Related to关联

git commit -m "this is my commit message. Related to https://gitlab.com///issues/"

链接第一次提交与Issue,将有助于【GitLab周期分析】跟踪工作流程,它将度量计划该Issue的实现所用的时间,即从创建Issue到进行第一次提交之间的时间。

任务列表

在描述里添加 - [] 子任务,划分子任务

- [x] Completed task 
- [ ] Incomplete task 
  - [ ] Sub-task 1 
  - [x] Sub-task 2 
  - [ ] Sub-task

描述里面体现子任务的列表

此外,markdown描述里输入#,触发已有issue下拉;输入!,触发已有MR下拉;输入/,触发命令;输入:,触发emoji

在CI中还可以在git commit 注释里添加[ci skip]跳过CI等等。

此外,还可以对Issue和Merge Request等描述定义描述模板,规范描述。

Gitlab还有wiki和代码片段等知识库的管理和分享功能,方便团队规范行为。

总结

Gitlab开源免费,可以自建gitlab。它清晰且直观地划分了软件开发管理的各个阶段,可以无缝衔接过渡到每个阶段。它能预测和控制项目的生命周期,整个平台很容易上手和使用,以自己的工作流管理项目的整个生命周期非常方便,轻量而敏捷,甚至可以说是一体化管理,为敏捷而生,是一个值得推荐的协同开发项目管理工具。

参考

https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/

https://about.gitlab.com/blog/2014/09/29/gitlab-flow/

https://docs.gitlab.com/ee/topics/gitlab_flow.html

https://docs.gitlab.com/ee/user/markdown.html

https://gitlab.com/gitlab-org/omnibus-gitlab/-/labels

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/109.html

分享给朋友:

“Gitlab概览” 的相关文章

基于Ubuntu的Linux Lite 6.0发行版正式发布

开发者 Jerry Bezencon 今天宣布,基于 Ubuntu 的 Linux Lite 6.0 发行版正式发布。本次更新代号为“Fluorite”,基于 Ubuntu 22.04 LTS (Jammy Jellyfish) 系统,它由长期支持的 Linux 5.15 LTS 内核系列驱动。下载...

微软的Linux发行版终于加入了对XFS根文件系统的支持

当许多Linux发行版在评估新的根文件系统选项或甚至像OpenZFS这样的特性,微软内部Linux发行版到本月才开始支持XFS作为根文件系统选项。随着这个月对微软内部Linux发行版CBL-Mariner的更新,他们现在支持XFS作为根文件系统。到目前为止,这个用于微软内部各种目的的Linux发行版...

GitLab-合并请求

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到您的GitLab帐户,然后转到“ 项目”部分下的项目 -步骤3-单击“ 合并请求”选项卡,然后单击“...

祸害阿里云宕机3小时的IO HANG究竟是什么?

本文来自微信公号“CSDN”(ID:CSDNnews),作者 | 王知无, 责编| 郭 芮。2019年3月3日凌晨,微博炸锅,有网友反映说阿里云疑似出现宕机,华北很多互联网公司受到暴击伤害,APP、网站全部瘫痪,我自己的朋友圈和微信群里也有好友反馈,刚刚从被窝被叫起来去修Bug,结果发现服务器登不上...

VIM配置整理

一、基本配色set number set showcmd set incsearch set expandtab set showcmd set history=400 set autoread set ffs=unix,mac,dos set hlsearch set shiftwidth=2 s...

neovim 0.9在win下配置 python开发环境

初级的一些配置点击下面链接查看neovim安装插件管理器neovim常用快捷键neovim python开发环境简易配置方法 (需要手动键入命令行 运行python)安装neovim python的模块pip install pynvim pip install jedi pip install n...