写在前面
在码农
花花世界里, 大多都是每天面对最多的工具就是git
了, 在代码的圈子里,我们与git
“惜惜相处”, Git
是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 我们先看下图的git
工作流程:
不难发现, 我们在使用git
过程就是远程仓库和本地仓库的同步, 在整个git
流程中,仓库是非常重要的。 今天我们就用docker
和 gitlab
来搭建一个远端的仓库
, 更深一步了解gitlab
的使用。
对于Docker
,应该不需要进行详细的介绍了。它是最火热的开源项目之一,通过在容器中增加一个抽象层(a layer of abstraction),就可以将应用程序部署到容器中。在看似稳定而成熟的场景下,使用Docker
的好处越来越多。在这篇文章中,我不谈论Docker
是什么或者Docker是怎么工作的,取而代之,我会提出使用这个不断成长的平台的五大好处: Docker五大优势:持续集成、版本控制、可移植性、隔离性和安全性
。
GitLab
是一个用于仓库管理系统的开源项目,使用Git
作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab
由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。
GitLab
分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了。关于社区版本的和企业版的区别,大家可以自行的去官网查看。说明本文将介绍安装CE
版本
Docker安装传送门:
一、安装及配置
1. 从Docker
镜像仓库 拉取gitlab
镜像
# gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本
# (此步骤时间可能比较久,需要耐心等待⌛️...)
$ docker pull gitlab/gitlab-ce
复制代码
如果你需要安装其他版本, 请去官方镜像库查询其它版本号 , 或者通过命令查找:
# 从Docker Hub查找镜像
$ docker search gitlab
复制代码
参数说明:
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
拉取gitlab镜像
, 可以通过如下命令查看:
# 列出本地镜像
$ docker images
复制代码
2.运行gitlab镜像
首先在运行之前,我们先需要了解一下docker
如何创建
和运行容器
:
# 创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
复制代码
通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data)
放到容器之外, 便于日后升级, 因此请先准备这三个目录。 在设置其他所有内容之前,请配置一个新的环境变量$GITLAB_HOME ,该变量指向配置,日志和数据文件将驻留的目录。确保目录存在并且已授予适当的权限。
export GITLAB_HOME=$HOME/docker/gitlab
复制代码
$HOME: 指当系统根目录, 需要提前创建好docker/gitlab 目录
# 在系统的根目录执行(存放的路径根据自己随意设置即可)
mkdir docker/gitlab
复制代码
GitLab
容器使用主机安装的卷来存储持久数据:
挂载到宿主机指定目录 | 容器目录 | 说明 |
---|---|---|
$GITLAB_HOME/data | /var/opt/gitlab | 用于存储应用程序数据。 |
$GITLAB_HOME/logs | /var/log/gitlab | 用于存储日志。 |
$GITLAB_HOME/config | /etc/gitlab | 用于存储GitLab配置文件。 |
sudo docker run --detach \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab:Z \
--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
gitlab/gitlab-ee
复制代码
或者:
$ docker run -d -p 443:443 -p 9000:80 -p 22:22 --name gitlab --restart always -v $HOME/docker/gitlab/config:/etc/gitlab -v $HOME/docker/gitlab/logs:/var/log/gitlab -v $HOME/docker/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
# -d:后台运行
# -p:将容器内部端口向外映射
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
# 443:443:将http:443映射到外部端口443
# 9000:80:将web:80映射到外部端口9000
# 22:22:将ssh:22映射到外部端口22
复制代码
运行成功后出现一串字符串
可以通过如下命令查看已经运行的容器:
# 列出容器, 只显示已经运行的`容器`
docker ps
显示所有的容器,包括未运行的。
docker ps -a
复制代码
输出详情介绍:
- CONTAINER ID: 容器 ID
- IMAGE: 使用的镜像
- COMMAND: 启动容器时运行的命令
- CREATED: 容器的创建时间
- STATUS: 容器状态
- PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
- NAMES: 自动分配的容器名称
容器的状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
3. 配置
按上面的方式,gitlab
容器运行
没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb
(宿主机路径:$HOME/gitlab/config/gitlab.rb), 配置http协议所使用的访问地址
# 通过vim 来编辑相应的配置, $HOME是当前系统的根目录,根据自己的路径自行修改
vim $HOME/gitlab/config/gitlab.rb
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://127.0.0.1'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = 'http://127.0.0.1'
gitlab_rails['gitlab_shell_ssh_port'] = 22 # 此端口是run时22端口映射的222端口
:wq #保存配置文件并退出
复制代码
修改完之后重启gitlab
# 每次修改gitlab 配置都需要重启
docker restart gitlab
复制代码
4.邮箱服务配置
主要用于gitlab
日常使用中邮件通知服务
1.修改配置文件,建议使用企业邮箱
vim $HOME/gitlab/config/gitlab.rb
复制代码
# 开始邮箱服务
gitlab_rails['smtp_enable'] = true
# 设置邮箱smtp 服务, 根据自己/公司使用的邮箱协议自由设置即可
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
# 设置邮箱smtp 服务端口
gitlab_rails['smtp_port'] = 465
# 设置发件人, 建设单独申请邮箱
gitlab_rails['smtp_user_name'] = "getlab@xxx.com"
# 设置登录邮箱密码
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
# gitlab发送人, 可以根据自己的需求自己定义
gitlab_rails['gitlab_email_from'] = 'getlab'
复制代码
使配置生效之后我们可以使用 gitlab
自带的工具进行一下测试。依次执行下面的命令:
# 开启 gitlab 的 bash 工具
$ docker exec -it gitlab bash
# 开启 gitlab-rails 工具
$ gitlab-rails console production
# 发送邮件进行测试
Notify.test_email('test@xxx.com', 'Message Subject', 'Message Body').deliver_now
复制代码
二、访问我们安装好GitLab
我们在之前运行的容器时,对外暴露了web 服务的端口是9000, 我们通过这个端口访问我们的安装好GitLab web客户端
http://127.0.0.1:9000/
复制代码
在浏览器的地址栏中打开上面地址,访问显示如下图:
第一次进入要输入新的root
用户密码,设置好之后就可以进去gitlab
的登录页面
输入密码用户名root
和自己设置的密码, 进入gitlab
的主界面
三、管理员设置
管理员主要日常对gitlab
的维护, 需要给团队对应的成员分配权限,Gitlab有管理员角色,拥有很多权限,包括用户的管理,项目的管理,权限的管理
等, 点击导航上的“扳手”(admin Area)图标, 进入管理台控制台:
1.注册限制
本来一开始是打算让大家自己按照我写好的格式规范注册GitLab
账号,但是老是有人不遵守规范最后还得我来一个一个的提醒,大大的影响工作效率。因此我决定将GitLab
的注册功能屏蔽掉,如果有新人进公司需要GitLab账号统一由管理员分配账户给他们。
关于账号出现了以下几个问题:
- 莫名其妙出现很多陌生人的账号
- 团队成员的很多账户注册填写的
Email
和UserName
都不符合规范 - 不方便管理、
不安全
(离职人员难以控制)
点击工作台,左侧菜单栏“Setting” ---> "General" ---> "Sign-up restrictions"
去掉“Sign-up enabled” & “Require admin approval for new sign-ups” 之后下滑“Save changes”保存即可
2.用户管理
点击工作台,左侧菜单栏“Users”, 按照页面相应的步骤操作即可,这里就不多描述
主要的说一下权限(Access):
- Can create group: 是否创建群组
- Access level:
- Regular: 普通用户, 普通用户可以访问已给权限或者自己的组和项目
- Admin: 管理员, 管理员可以访问所有组、项目和用户、进行
gitlab
的维护
- External: 外部人员(一般很少用上)
如果用户离职, gitlab
用户账号处理有四种:
- Deactivate this user: 停用此用户, 用户将被注销(只有注册用户才会有)
- Block this user: 保留账号, 将会无法登录、用户将无法访问git存储库、 所有信息都会保留(
建议使用此方式
) - Delete user: 删除用户、部分信息会迁移到“Ghost User”
- Delete user and contributions: 删除用户以及相关贡献
四、开始简单的设置GitLab(非管理员)
1. 个人信息设置
登录成功后, 点击右上角头像 Profile Settings
修改相应的信息之后,滚动页面底部,点击“Update profile settings” 按钮进行更新
2. 修改密码
为了安全起见, 一般用户第一次登录之后都强制修改密码, 如果之后再去要修改密码,可以通过如下流程:
3. 偏好设置
可以根据自己喜欢风格来设置gitlab
, 包括:Navigation theme(导航主题)、Syntax highlighting theme(代码语法高亮主)、Behavior(个性化)、Localization(语言设置)
Navigation theme & Navigation theme :
五、 Group(组) 管理
在gitlab
中, 整个管理的方式是以组为最小单位
, 名称空间是作为用户名、组名或子组名使用的唯一名称。 创建组的原因有很多, 通过在相同的名称空间下组织相关的项目并向顶级组中添加成员,以更少的步骤授予对多个项目和多个团队成员的访问权。
通过创建一个组并包括适当的成员,可以更容易地在问题中同时提到所有的团队成员,并合并请求。
- 将相关项目组装在一起
- 授予成员一次访问多个项目的权限
- 组也可以嵌套在子组中。
1.创建组
在顶部菜单中,依次单击“Groups”和“Your Groups”,然后单击绿色按钮“New group”
或者,在顶部菜单中,展开plus符号并选择新建组
添加以下信息:
- Private: 内部项目, 小组及其项目只能由成员查看
- Internal: 私人只能由项目成员克隆和查看,
- Public: 公共访问, 允许所有者将项目的可见
2.删除组 & 编辑
点击左侧的Groups
,然后点击需要修改/删除的组
3. 组成员添加
点击左侧的“Groups”,然后点击当然的组 “Members”
权限类型介绍:
-
Guest: 匿名用户,访客, 创建项目、写留言薄
-
Reporter: 报告人
创建项目、写留言薄、拉项目、下载项目、创建代码片段
-
Developer: 开发者,创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分支 、创建标签、编写wiki
-
Master(已经改为Maintainer): 管理者
创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分支 、创建标签、编写wiki、增加团队成员、推送受保护的分支、移除受保的分支、编辑项目、添加部署密钥、配置项目钩子
- Owner: 所有者
创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分支、创建标签、编写wiki、增加团队成员、推送受保护的分支、移除受保护的分支、编辑项目、添加部署密钥、配置项目钩子、开关公有模式、将项目转移到另一个名称空间、删除项目
Access expiration date: 过期时间,可以给,某个用户添加一个过期时间,时间到了,该用户的权限将会收回
4. 组成员编辑 & 删除
点击左侧的“Groups”,然后点击当然的组 “Members”, 进入用户列表
5.给组添加项目
工作中交集比较多, 每天开发的代码都在组的项目中, 日常操作包括提代码仓库的管理、分支管理、项目用户维护、Code Review
等
进入组的详情,点击“new project”按钮, 进去添加页面,输入项目基本信息保存即可.
New project 主要分为三类: blank project(空白的项目)、create from templte(基于社区开源项目模版创建)、import project (从已有的项目导入, 支持很多渠道)
New project:
create from templte & import project 自己可以去尝试, 这里就不多说了
六、Code Review
1. 目标和原则
- 提高代码质量,及早发现潜在缺陷,降低修改/弥补缺陷的成本
- 促进团队内部知识共享,提高团队整体水平
- 评审过程对于评审人员来说,也是一种思路重构的过程,帮助更多的人理解系统
- 是一个传递知识的手段,可以让其它并不熟悉代码的人知道作者的意图- 和想法,从而可以在以后轻松维护代码
- 可以被用来确认自己的设计和实现是一个清楚和简单的
- 鼓励相互学习对方的长处和优点
- 高效迅速完成
Code Review
2. 流程和规则
采用Git Flow + Pull Request(PR)模式来做Code Review。
Pull Request(PR
)的说明:
- 通常我们接到一个新的需求时, 需要通过主干分支拉出一个新的本地分支进行开发
- 任务完成才能提交
PR
- 严禁一个
PR
里面有多个任务,除非它们是紧密关联的 - 在提交PR时,指定相应
Review
的人员 - 代码
Review
通过将会合并主干,删除fear 分支
发起Pull Request
以后,请将Pull Request
的链接通过Email
发给代码审核者,以此通知对方及时进行审核。(BUG修复类当日必须完成合并或者拒绝,功能类或者觉得有重大调整需要会议Review必须在邮件中明确时间和会议人员)
任务完成时提交PR
PR
提交之后,相应的人员会收到邮箱提醒,处理PR
的Review
此时,如果发现代码不合规,有bug
可以鼠标移动到当前行,进行评价
如果么有问题,将打回进行处理,没有问题进行merge
即可, 此过程恶心循环, 直到code
满意位置 😊
七、gitlab 中的权限说明表
注意: 在旧版中Master 等价于新版的 Maintainer
gitlab-ctl 常用命令
gitlab-ctl start #启动全部服务
gitlab-ctl restart#重启全部服务
gitlab-ctl stop #停止全部服务
gitlab-ctl restart nginx #重启单个服务,如重启nginx
gitlab-ctl status #查看服务状态
gitlab-ctl reconfigure #使配置文件生效
gitlab-ctl show-config #验证配置文件
gitlab-ctl uninstall #删除gitlab(保留数据)
gitlab-ctl cleanse #删除所有数据,从新开始
gitlab-ctl tail <service name>查看服务的日志
gitlab-ctl tail nginx #如查看gitlab下nginx日志
gitlab-rails console #进入控制台
复制代码
感谢你的耐心阅读, 给你点赞👍👍👍, 创作不易, 如果对你有帮助,❤️❤️请用你的发财的小手点个赞哦❤️❤️, 谢谢🙏🙏🙏 同时欢迎大家转载, 记得注明出处💐