docker 中 gitlab 安装配置与使用

·  阅读 1998
docker 中 gitlab 安装配置与使用

写在前面

码农花花世界里, 大多都是每天面对最多的工具就是git 了, 在代码的圈子里,我们与git“惜惜相处”, Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 我们先看下图的git 工作流程:

不难发现, 我们在使用git 过程就是远程仓库和本地仓库的同步, 在整个git 流程中,仓库是非常重要的。 今天我们就用dockergitlab 来搭建一个远端的仓库, 更深一步了解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账号统一由管理员分配账户给他们。

关于账号出现了以下几个问题:

  1. 莫名其妙出现很多陌生人的账号
  2. 团队成员的很多账户注册填写的EmailUserName都不符合规范
  3. 不方便管理、不安全(离职人员难以控制)

点击工作台,左侧菜单栏“Setting” ---> "General" ---> "Sign-up restrictions"

去掉“Sign-up enabled” & “Require admin approval for new sign-ups” 之后下滑“Save changes”保存即可

2.用户管理

点击工作台,左侧菜单栏“Users”, 按照页面相应的步骤操作即可,这里就不多描述

主要的说一下权限(Access):

  1. Can create group: 是否创建群组
  2. Access level:
  • Regular: 普通用户, 普通用户可以访问已给权限或者自己的组和项目
  • Admin: 管理员, 管理员可以访问所有组、项目和用户、进行gitlab的维护
  1. External: 外部人员(一般很少用上)

如果用户离职, gitlab 用户账号处理有四种:

  1. Deactivate this user: 停用此用户, 用户将被注销(只有注册用户才会有)
  2. Block this user: 保留账号, 将会无法登录、用户将无法访问git存储库、 所有信息都会保留(建议使用此方式)
  3. Delete user: 删除用户、部分信息会迁移到“Ghost User”
  4. 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提交之后,相应的人员会收到邮箱提醒,处理PRReview

此时,如果发现代码不合规,有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  #进入控制台
复制代码

感谢你的耐心阅读, 给你点赞👍👍👍, 创作不易, 如果对你有帮助,❤️❤️请用你的发财的小手点个赞哦❤️❤️, 谢谢🙏🙏🙏 同时欢迎大家转载, 记得注明出处💐

分类:
开发工具
标签:
收藏成功!
已添加到「」, 点击更改