DevOps—源码管理工具Gitlab
在自动化构建的过程中,总是需要将我们开发的应用的源码拉取到服务器中进行生成、发布、测试操作,之后再推送到目标服务器上进行部署应用。这就需要我们拥有一个在线保存开发过程中的源代码的地方,也就是源代码管理服务器。
GitLab 是一个开源的源代码管理应用,支持私有化部署安装,对于 GitLab 大家都应该很熟悉,就算大家实际工作中不涉及 DevOps 相关技术,没有用过 GitLab,相信也必然用过类似的工具,开发团队协助中一个源代码管理工具必然是必不可少的。
GitLab 官网地址如下:https://about.gitlab.com/,各种文档请参考官网。
以下,将通过 docker 和 Gitlab 官方提供的快速安装工具两种方式演示如何搭建一个源代码管理服务器。这两种方式都是比较方便快捷的方式。Gitlab 的安装部署需要准备一台服务器,推荐最少4G内存,2核CPU。
1. 安装
1.1 yum快捷安装Gitlab
Gitlab 官方提供了一种快捷安装的方式,其实也就是通过 yum 进行安装,用于自动安装 Gitlab 及其相关的依赖组件,并自动完成组件的配置,简化了初学者的安装成本,相比利用源代码安装 Gitlab,这种方式只需要很短的时间就可以完成 Gitlab 的安装工作。
1.1.1 准备工作
在进行 Gitlab 安装之前,最好先关闭防火墙,并且禁用 selinux,防止对 Gitlab 安装过程中的影响。
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
也可以不用完全禁用防火墙,只针对使用到的端口进行开放。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
禁用selinux:
vi /etc/sysconfig/selinux
修改 SELINUX=disabled
之后通过 reboot
命令重启服务器
1.1.2 安装步骤
(1)安装gitlab依赖组件
yum install -y curl policycoreutils-python openssh-server postfix
其中postfix是用于发送通知邮件的,gitlab添加新用户之后,可以通过发送邮件给用户进行确认,并且修改初始密码。当然gitlab管理员也可以直接设置用户初始密码。如果只是用于测试,非用于生产环境的部署,也可以不用postfix组件。
(2) 启动postfix邮件服务
systemctl start postfix && systemctl enable postfix
(3) 使用官方脚本配置Yum源
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
以上脚本配置的是 gitlab-ce 社区版的 yum 源,如果要安装 gitlab-ee,只需要将上面链接中的 ce 改成 ee 即可。
(4) 安装gitlab-ce社区版
配置完 gitlab-ce yum源之后,可以通过 yum search 命令查找可以按照的版本,如果有需要可以指定版本进行安装。
yum search gitlab-ce --showduplicates
--shouwduplicates
参数用于显示具体版本信息
执行以下命令进行安装:
yum -y install gitlab-ce
gitlab 安装文件比较大,下载根据网络情况需要的时间不同,需要稍微等待以下,直到出现以下内容,即 gitlab 已经安装配置完成了。
安装完成之后,通过以下命令对 gitlab 进行初始化,过程耗时会比较久,需要稍微等待。
gitlab-ctl reconfigure
之后,执行以下命令启动 gitlab
gitlab-ctl start
启动之后,可以通过以下命令查询gitlab运行状态
gitlab-ctl status
之后就可以通过服务器的ip地址对 gitlab 管理平台进行访问了,默认端口是80,初始化密码可以在 /etc/gitlab/initial_root_password
文件中查看。
所有关于 gitlab 的配置可以在 /etc/gitlab 目录下的 gitlab.rb
和 gitlab-secrets.json
两个文件中进行配置修改。由于这里只是作为演示使用的,所以就不做过多配置了。
如果你在工作中是 gitlab 配置管理员,或者对 gitlab 的各种操作、配置、管理流程有兴趣的话可以参考网上教程和官方文档。
1.2 基于docker搭建Gitlab
这里通过 docker 的方式使用gitlab-ce镜像快速部署一个GitLab应用。
在服务器中创建docker-compose.yaml文件,接下来将使用docker compose进行部署,文件内容如下:
version: '3.6'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: on-failure
container_name: 'gitlab'
hostname: 'gitlab'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://xxx.xxx.xxx.xxx:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:22'
volumes:
- gitlab-config:/etc/gitlab
- gitlab-logs:/var/log/gitlab
- gitlab-data:/var/opt/gitlab
shm_size: 256m
volumes:
gitlab-data:
gitlab-config:
gitlab-logs:
这里我将gitlab相关的文件路径映射到具名卷,也可以将其映射到某个具体的路径下,之后通过命令启动容器:
docker-compose up -d
启动之后,可以命令查看容器启动日志,时间可能稍长,等到日志停止即可。
docker logs -f gitlab
之后,通过url地址访问gitlab:
管理员账号是root,密码可以在容器中的/etc/gitlab下的initial_root_password下,可以通过以下方式进行查看:
至此,基于 docker 的 gitlab应用也搭建起来了。
2. 升级
gitlab 升级在这里算是一个扩展话题,这本来应该是 gitlab 管理员的工作, 但是由于公司不大,没有专门负责这块的人员,仅有的配置管理人员也是由 QA 兼职,是个漂亮妹子,和我是关系挺好的朋友,所以之前我就帮忙做了一次升级,这里做个记录。
gitlab 定时进行升级是必要的,就算是开源程度这么高,那么多公司使用的应用,一样会存在一些漏洞,官方也会时常发布行的版本,我们的这次升级的起因就是扫描扫出了 gitlab 的安全漏洞。
这里一样针对上面提到的安装两种方式讲解一下 gitlab 的升级过程。
2.1 yum安装gitlab 升级
Gitlab 升级之前请先查看官方升级指引,官方版本升级指引路线如下:
如果需要跨几个版本升级,建议一个版本一个版本地升级。
可以通过以下命令查看当前安装的 gitlab 是哪个版本:
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
2.1.1 备份
升级之前请先进行备份,相信大家都知道备份的必要性,避免升级出问题无法恢复。
(1) 查看备份目录
cat /etc/gitlab/gitlab.rb | grep backup_path
图中目录为备份之后备份文件存放目录,默认目录为 /var/opt/gitlab/backups,图中的目录为修改后的备份目录。
(2) 执行备份
gitlab-rake gitlab:backup:create
执行命令之后,会输出备份过程信息,备份时间可能比较长,需要稍微等待,直到出现以下输出。
备份完成之后,切换到备份目录下,可以看到备份文件
手工备份两个敏感文件
/etc/gitlab/gitlab-secrets.json
/etc/gitlab/gitlab.rb
将这两个文件复制保存到某一个目录即可,也可以和之前的备份文件放在一起。
2.1.2 升级
版本升级时,可能会出现数据结构变更,需执行以下命令
sudo chmod 0755 /var/opt/gitlab/postgresql
sudo gitlab-rake db:migrate
sudo gitlab-ctl restart postgresql
(1) 安装指定版本
yum install gitlab-ce-15.3.2
直至输出以下信息,即新版本安装完成
(2) 重启gitlab
升级完成后,执行以下命令行
sudo gitlab-ctl reconfigure
正常情况下,这个命令执行完成,不报错即可
之后重启gitlab
sudo gitlab-ctl restart
之后重新查看版本
升级重启gitlab之后需要稍等几分钟,几分钟内gitlab可能无法正常访问
如果一直访问页面显示 502 ,可尝试以下命令行解决
sudo systemctl restart gitlab-runsvdir
sudo gitlab-ctl restart sidekiq
sudo gitlab-ctl hup unicorn
2.1.3 备份还原
需要注意的是,还原的前提条件是 GitLab 版本要跟备份时的版本完全一致
执行以下命令行,BACKUP 为备份文件去掉 _gitlab_backup.tar 后的名称,如文件名为 1662359186_2022_09_05_14.6.3_gitlab_backup.tar,取前面的 1662359186_2022_09_05_14.6.3
gitlab-rake gitlab:backup:restore BACKUP=1662359186_2022_09_05_14.6.3
如果还原过程中出现权限错误,请于备份目录下执行下面命令
Unpacking backup ... tar: 1662359186_2022_09_05_14.6.3_gitlab_backup.tar: Cannot open: Permission denied tar: Error is not recoverable: exiting now unpacking backup failed
chmod 644 *
最后记得别忘了还原两个敏感文件
完成后重启 GitLab 即可
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
2.1.4 Gitlab升级相关问题记录
(1) 备份失败
备份命令执行之后,结果提示备份失败
经查看磁盘空间之后,发现默认路径 /var/opt/gitlab/backups 挂载在系统盘下,系统盘空间不足,需要更换备份目录
备份目录修改如下:
切换到一个容量较大的目录下,通过以下命令创建目录
cd /repositories
mkdir gitlab-backups
切换到gitlab 配置目录
cd /etc/gitlab
编辑gitlab.rb 文件, 找到备份相关配置
gitlab_rails['backup_path'] = "/repositories/gitlab-backups"
去掉前面的 # 号注释,将路径修改为备份路径,备份路径需要先建好文件夹
重启gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
2.2 docker 安装 gitlab 升级
容器化部署的 gitlab 升级比较简单,只要知道当前所使用的镜像版本号,然后安装官方提供的升级路线去 hub.docker.com 的 gitlab/gitlab-ce 项目查找对应的镜像名称
找到具体每个版本的镜像名后,修改 docker-compose.yaml 中的镜像名称,
然后执行以下命令,将原有的容器关闭,并且启动新的容器即可。
docker-compose down && docker-compose up -d
查看 docker 的日志 docker logs gitlab -f ,日志正常后,打开网站确认没问题之后,继续修改 docker-comose.yaml 中的镜像名称,继续上面的操作,直到升级到想要的版本。
上一篇:DevOps—基本概念
下一篇:DevOps— CI/CD 工具 Jenkins