一、gitlab 是啥?

GitLab是一个基于GitLab公司开发的Rails的开源存储库管理器,它是一个基于Web的git存储库管理器,允许您的团队协作编写、测试和部署应用程序。GitLab提供了几个特性,包括wiki、问题跟踪、代码评审和活动提要。

GitLab公司提供4种产品

  1. GitLab CE(社区版)-自我托管和免费;社区论坛的支持。
  2. GitLab EE(企业版)-自我托管和付费;附带附加功能。
  3. GitLab.com-SaaS和免费。
  4. IoGitLab.io-GitLab公司管理的私有GitLab实例。

gitlab使用场景

多数应用于给企业内部做私有镜像库用。它是组成devOPS-持续部署-持续交付的重要环节之一


二、gitlab-ce怎么安装?

1.centos 内核升级

由于我的系统是centos7,需要更新以下系统内核,原系统内核是5.4.2,要更新centos7的最新版 5.14.14

1.启用 ELRepo 仓库

ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。

ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。)

启用 ELRepo 仓库:

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm


2.查看当前可用内核

# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available


3.安装最新内核:

# yum --enablerepo=elrepo-kernel install kernel-ml

--enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换。


4. 设置 grub2

内核安装好后,需要设置为默认启动选项并重启后才会生效

4.1 查看系统上的所有可以内核:

# sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

4.2设置内核版本

可以通过 grub2-set-default 0 命令或编辑 /etc/default/grub 文件来设置。

4.2.1. 通过 grub2-set-default 0 命令设置:

其中 0 来自上一步的 awk 命令:

#sudo grub2-set-default 0

4.2.2编辑 /etc/default/grub 文件

设置 GRUB_DEFAULT=0,表示使用上一步的 awk 命令显示的编号为 0 的内核作为默认内核:

# vi /etc/default/grub


5.生成 grub 配置文件并重启

下一步,通过 gurb2-mkconfig 命令创建 grub2 的配置文件,然后重启:

#sudo grub2-mkconfig -o /boot/grub2/grub.cfg

#sudo reboot


6. 验证

通过 uname -r 查看,可以发现已经生效了。

# uname -r


7.删除其他旧内核

#rpm -qa | grep kernel


8.升级所有

#yum update

2.gitlab-ce安装

1.gitlab-ce存储库

GitLab提供了一个用于添加GitLab CE存储库的安装程序。下载具有curl的安装程序并运行脚本(如下面所示)以添加新的GitLab CE存储库。

#curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

出现“the repository is setup! you can now install packages”即代表安装完成。


2.yum命令安装GitLab。

yum -y install gitlab-ce

安装过程有点慢,等下直至安装完成。


3.配置gitlab url

(提前设置好本机域名和IP地址)

#vim /etc/gitlab/gitlab.rb

external_url 'http://你的.域名地址.com'


4.应用GitLab配置。

gitlab-ctl reconfigure

这个过程比较慢....成功后会提示"gitlab reconfigured"

以上即配置成功。


3.gitlab-ce基础配置

1.查看初始密码

cat /etc/gitlab/initial_root_password

2.登录,默认登录名为 root,粘贴复制的密码

自动化容器部署-gitlab_git

3.修改系统语言,默认为英语;调整时区:北京

点击 用户图标-选择 偏好设置 -本地化 -选择语言,汉语

自动化容器部署-gitlab_开机启动_02

基础配置完成,接下来就是基础使用了。


三、gitlab-ce代码部署方式

根据目前的了解,在给代码部署的方式:蓝绿部署/灰度部署


3.1什么是蓝绿部署?

蓝绿部署指的是不停老版本代码(不影响上一个版本访问),而是在另外一套环境部署新版本然后进行测试,测试通过后将用户流量切到新版本。

优点:

  业务无终端,升级风险相对较小。

  能实现无缝升级、对于增量升级有特别好的支持。

  平常多用于升级或更新用的一种发布策略,部署最小单位为容器;而发布的最小单位是应用。

缺点:

   由于蓝绿升级和更新对设计数据表结构有着不可逆的属性,所以对于某些业务逻辑和数据迁移要慎重使用。


3.2蓝绿发布部署的过程

1.保证当前业务正常访问(不停机)

2.在另外一个环境/主机部署新版本代码,新代码往往是修复了某些bug,增加了某些功能。

3.测试,通过后将用户请求切到新版本环境。

4.观察试用阶段,如有问题可以切换到旧版。后续升级重复此四步。

自动化容器部署-gitlab_ruby_03


3.3什么叫金丝雀发布?

金丝雀发布是gitlab-ce发布的一个名称,也成为灰度发布,是介于黑与白之间,能够平滑过度的一种发布方式。

特点:

灰度发布也是增量发布的一个类型,操作过程是:在旧版本可用的情况下,部署一个新版本作为”金丝雀“,测试新版本的性能和表现,以保证系统的稳定的前提下,尽早发现和调整问题。

这种发布具备了及其敏感的特性。

"金丝雀"的由来:

   17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止唱歌。当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀早毒发身亡。

   当时在狂劲设备相对简陋的条件下,工人们每次下井都会带上一直小金丝雀作为"瓦斯检测指标",以便在危险状态下紧急撤离。


3.4灰度发布的过程

1.将需要部署的各个阶段的准备好:测试脚本、软件、配置文件、部署清单文件等;

2.从负载均衡中移除”金丝雀“服务器;

3.砍掉旧流量进行升级应用操作;

4.升级后,做自动化测试;

5.测试正常,通过,将金丝雀重新移到负载均衡列表中;同时检查连通性和健康检查。

6.如果金丝雀升级成功,那么接着依次升级其他服务器;如果不成功,则回滚。


3.5灰度发布应用场景

额外建立新版本,不通过版本;灰度发布中,安装用户设置路由权重,例如"90%"的用户维持使用老版本,10%的用户尝鲜新版本;经常与A/B测试一起使用,用于测试选择多种方案。

自动化容器部署-gitlab_开机启动_04

最大特点:逐步替换。


话题拓展:滚动发布:

跟k8s发布新版pod 是一个意思。设置任务,第一个版本升级之后,接着升级多个服务器,直到升级所有实例到新版本。


话题拓展:A/B测试:

A/B测试也是同时运行两个APP环境,但是蓝绿部署完全是两码事;

      A/B测试是用来测试应用功能表现的方法,例如可用性,受欢迎程度,可见性等等;

      蓝绿部署的目的是安全稳定地发布新版本应用,并在必要时回滚;

      综上所述,蓝绿部署是一套正式环境在线,而A/B测试是两套正式环境在线。

自动化容器部署-gitlab_git_05

四、gitlab日常使用项

如下图所示,可以看到Dashboard中有三列信息,分别为Project,Users和Groups。接下来我们简单介绍一下他们三个的应用场景。

 Projects:

   可以表示Groups具体的小服务(模块)。

 Users:

   一个用户对应一个开发开发人员,我们可以为不同的User授予不同的权限,从而让使用user的开发人员有相应的权限,生产环境中我们运维人员不应该让所有的开发人员都能拿到整个项目的代码。

 Groups:

   我们生产环境一般用它来区分业务。这个业务里面可能会有很多小服务(模块)。

自动化容器部署-gitlab_git_06

1.创建项目组-groups

新建群组(自定义添加项目组名称、URL地址、由于是公司项目不属于开源选"私有"、允许那些人创建项目等)填写完成,点击创建项目。

自动化容器部署-gitlab_ruby_07自动化容器部署-gitlab_ruby_08自动化容器部署-gitlab_开机启动_09创建项目组完成

2.创建用户-users

自动化容器部署-gitlab_开机启动_10

用户添加后,可以自行到项目组里添加进去即可。

自动化容器部署-gitlab_开机启动_11

3.创建项目-projects

自动化容器部署-gitlab_开机启动_12

例如下图这样的,才是正常的,后续我会把镜像和这些文件补齐,现在先用自带的gitlab项目顶替,意思一样的

自动化容器部署-gitlab_ruby_13

4.客户端克隆两种方式
4.1http协议克隆

[root@wind-k8s-prom ~]# git clone http://wind-gitlab.hmtech.com/gitlab-instance-d5acbbf3/Monitoring.git

Cloning into 'Monitoring'...

Username for 'http://wind-gitlab.hmtech.com': wind.luo         #这里输入用户名,也就是项目成员

Password for 'http://wind.luo@wind-gitlab.hmtech.com':        #成员登录密码

warning: You appear to have cloned an empty repository.      #正确的提示会有下载,但是我这里是空的代码,所以下载不了。

由此可见,使用过http协议还需要用户认证。

4.2 ssh协议克隆

在拉取端(拉镜像的服务器上)配置ssh。

#ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa


Generating public/private rsa key pair.

Created directory '/root/.ssh'.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:SObkCucWAkDjRBUQXYKUZjdvADlHdOi3Mm+R0HUgtks root@jenkins-master210.yinzhengjie.org.cn

The key's randomart image is:

+---[RSA 2048]----+

|=X%*+= ..        |

|+B.B+ o. .       |

|+.= =E= .        |

| . o.@..         |

|  o *.* S        |

|   B *           |

|    B .          |

|   . o           |

|    .            |

+----[SHA256]-----+

查看认证公钥

[root@wind-k8s-prom ~]# cat ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAFJ+TZpOJkmwpoCJmhY8GA9kQ9S1C9kdntdUM2LBQECjP/o4KtxWHoT+a3XPIh0sHShxXUoTv029wUd52zIyRLTAXnTWfmcC5/Ewv0YCwcCX/9h/nt1bpxfmN6ynsjZSQr8U3Us9Ls/8pb0DyIAMeXhSxd+3aXajvntGTjIxDW4I99QKzyib7SpOIBN root@wind-k8s-prom

将此密钥粘贴到用户界面-ssh密钥里

自动化容器部署-gitlab_git_14

使用  ssh  协议拉取

#git clone git@wind-gitlab.hmtech.com:gitlab-instance-d5acbbf3/Monitoring.git

不用输入密码,即可进行拉取

五、gitlab常用命令

1.gitlab-backup  用于数据备份等操作,这个太简单,不用演示,自己搜吧。

2.gitlab-ctl

gitlab-ctl status   查看所有组件运行状态

gitlab-ctl stop  停止服务

gitlab-ctl restart  重启服务

gitlab-ctl tail nginx  查看某个组件的日志

gitlab-ctl reconfigure  重新配置应用(一般用于修改配置文件后需要执行该命令)

3.gitlab-psql  进入到PgSQL数据库交互式命令行,你可以执行相应操作

[root@wind-gitlab ~]# gitlab-psql  

psql (12.7)

Type "help" for help.


gitlabhq_production=# \db

        List of tablespaces

   Name    |    Owner    | Location  

------------+-------------+----------

pg_default | gitlab-psql |  

pg_global  | gitlab-psql |  

(2 rows)


gitlabhq_production=# \quit

六、生产环境中-gitlab私有镜像打包等操作