本文首发于我的个人网站: https://hewanyue.com/
本文作者: Hechao
本文链接: https://hewanyue.com/blog/73a033d9.html
在企业生产中,DEVOPS这个概念越来越火了,不同公司对此都有不同的理解,但有一点毋庸置疑,提到DEVOPS都绕不开CI/CD。CI是continuous integration的简称,意为持续集成,CD是continuous deployment或者Continuous Delivery的缩写,意为持续部署或持续交付。
持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
持续部署是指是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品。持续部署在某种程度上代表了一个开发团队的更新迭代速率。
持续交付是在持续部署的基础之上, 将产品交付到线上环境, 因此持续交付是产品价值的一种交付, 是产品价值的一种盈利的实现。
可以用一个类似戴明环的图来比较形象展示这种生产模式结构。
比较常用到的开源软件有gitlab、Maven、jenkins、saltstack、slastic以及zabbix。其中gitlab和jenkins是最常用的一个组合,也是目前最为火热的结局方案。本文将详细介绍gitlab的部署及使用。
Gitlib—分布式版本控制系统
持续集成开源工具
我们需要在公司的服务器安装某种程序,该程序用于按照特定格式和方式记录和保存公司多名开发人员不定期提交的源代码,且后期可以按照某种标记及方式对用户提交的数据进行还原,这是我们就需要用到版本控制系统,也就是所谓的持续集成工具。
早期的集中式版本控制系统如CVS(Concurrent Version System),现已基本淘汰,可能有些公司还在使用SVN(Subversion)作为版本控制系统,不过他的缺点相当明显,集中式管理,太依赖于网络带宽,当大家一起从管理服务器拉代码或提交代码时,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,效率很差。
而gitlab是分布式的版本控制系统,不存在“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作需要提交或者回滚时,就不需要联网了,因为版本库就在你自己的电脑上。需要汇总时,我们将代码提交至gitlab服务器,将每个人的劳动成果也就是分支仓库的代码合并即可。
部署gitlab
具体安装要求及配置可以参考官方文档
https://about.gitlab.com/install/ # Gitlab 服务的安装文档
https://docs.gitlab.com/ce/install/requirements.html #安装环境要求
最好先配置好依赖仓库源,可以配置阿里的镜像仓库源。
官方下载deb安装包比较慢,可以使用清华大学的镜像源下载。
我们这里使用gitlab-ce_11.11.8来演示。也可以去下载其他版本,ubuntu 国内下载地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/。
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/bionic/main/g/gitlab-ce/gitlab-ce_11.11.8-ce.0_amd64.deb
dpkg -i gitlab-ce_11.11.8-ce.0_amd64.deb
安装可能需要一段时间,耐心等待。
然后修改gitlab的配置文件
root@gitlabUbuntu24:~# grep "^[a-Z ]" /etc/gitlab/gitlab.rb
external_url 'http://192.168.32.24'
gitlab_rails['gitlab_email_from'] = 'example@qq.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "example@qq.com"
gitlab_rails['smtp_password'] = "keyword"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
user['git_user_email'] = "example@#qq.com"
alertmanager['admin_email'] = 'example@qq.com'
将上面这些选项都设置好。例如使用的是QQ邮箱,则需要去邮箱设置里获取授权码,填在password
处。因为gitlab是一般是通过邮件来注册和获取密码的,所以这些配置都要有,邮箱最好填企业邮箱或者公司领导邮箱,以避免员工离职等其他风险。
然后使用命令让配置文件生效。
gitlab-ctl reconfigure
这时就可以通过命令gitlab-ctl start
启动gitlab了。
可以通过gitlab-ctl status
命令查看gitlab运行状态,或者后跟组件名称查看具体组件的运行状态。
gitlab 相关的目录:
/etc/gitlab #配置文件目录
/run/gitlab #运行 pid 目录
/opt/gitlab #安装目录
/var/opt/gitlab #数据目录
gitlab常用命令
gitlab用法与github几乎相同,这里就不再详细介绍。
git config --global user.name “name“ #设置全局用户名
git config --global user.email xxx@xx.com #设置全局邮箱
git config --global --list #列出用户全局设置
git add index.html / . #添加指定文件、 目录或当前目录下所有数据到暂存区
git commit -m “11“ #提交文件到工作区
git status #查看工作区的状态
git push #提交代码到服务器
git pull #获取代码到本地
git log #查看操作日志
vim .gitignore #定义忽略文件
git reset --hard HEAD^^ #git 版本回滚, HEAD 为当前版本,加一个^为上一个, ^^为上上一个版本
git reflog # #获取每次提交的 ID,可以使用--hard 根据提交的 ID 进行版本回退
git reset --hard 5ae4b06 #回退到指定 id 的版本
git branch #查看当前所处的分支
git checkout -b develop #创建并切换到一个新分支
git checkout develop #切换分支
gitlab数据备份
gitlab可以通过命令gitlab-rake
来备份数据。数据备份前,需要停止unicorn
、sidekiq
组件服务。
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:create #在任意目录即可备份当前 gitlab 数据
gitlab-ctl start #备份完成后启动 gitlab
备份完成的数据储存在/var/opt/gitlab/backups/
路径下,生成与时间相关的tar包。
root@gitlabUbuntu24:~# ll /var/opt/gitlab/backups/
total 4600
drwx------ 2 git root 4096 Dec 25 14:41 ./
drwxr-xr-x 20 root root 4096 Dec 25 11:02 ../
-rw------- 1 git git 4700160 Dec 25 14:41 1577256108_2019_12_25_11.11.8_gitlab_backup.tar
需要注意的是,命令备份仅仅是备份了gitlab中的数据,通常我们我们的备份脚本中还需要备份以下文件。
/var/opt/gitlab/nginx/conf #nginx 配置文件
/etc/gitlab/gitlab.rb #gitlab 配置文件
/etc/gitlab/gitlab-secrets.json #key 文件
使用命令gitlab-rake gitlab:backup:restore BACKUP=备份文件名
可以恢复之前的备份数据(文件名到时间戳即可)。同样,执行恢复命令之前也要先关闭unicorn
、sidekiq
组件服务。恢复时,需要输入yes确认。
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1577256108_2019_12_25_11.11.8
gitlab的关闭注册
服务正常启动之后,就可以访问主机的IP或者域名,登陆gitlab系统了。gitlab和github极为相似,也支持邮箱注册。,第一次访问,会放我们设置管理员账户密码,我们使用管理员账户登录,用户名为root。
gitlab默认是开放注册的,而我们作为企业内部使用的版本管理系统,肯定不希望大家随便创建用户来访问,这样很不便于管理。
我们可以在点击中间的小扳手图标,选择setting设置,将sign-up功能取消,这样登录界面就无法注册了。
注意,小心别关错了,要是把sign-in功能取消就没法登陆了,哪怕使用root权限账号退出去也就没法登陆了。如果真的不幸将gitlab的sign-in功能取消掉,那只能使用命令行的方式修改数据库中设置了。
因为gitlab目前版本默认使用的psql,所以修改数据库的方式,跟mysql不同,具体如下
先切换至gitlab-psql用户。
su - gitlab-psql
使用 -h指定数据库路径 -d指定数据库,连接psql数据库。
psql -h /var/opt/gitlab/postgresql -d gitlabhq_production
UPDATE application_settings SET password_authentication_enabled_for_web=true;
\q
修改完数据后,重启gitlab服务。
exit
gitlab-ctl restart
此时,web界面就又可以登陆了。
gitlab的中文汉化
gitlab默认语音为英语,有时有些专业数据或者不太常用的选项配置我们可能无法准确理解它的含义,所以将gitlab汉化成中文还是有一定必要的。
gitlab的每个用户,可以点击用户头像,设置,设置偏好,选择语音。
选择中文之后刷新,就可看到一部分菜单变为了中文。但是也仅仅是菜单变成了中文而已,很多选项和图标都还是英文显示,如果想彻底汉化为中文,则需要我们去下载中文汉化补丁了。
汉化补丁是第三方爱好者提供,github地址是https://gitlab.com/xhang/gitlab,找到对应版本的gitlab汉化包。
gitlabv11.11.8汉化包的下载地址如下
wget https://gitlab.com/xhang/gitlab/-/archive/v11.11.8-zh/gitlab-v11.11.8-zh.tar.gz
然后先停止gitlab
gitlab-ctl stop
备份并替换文件
tar xvf gitlab-v11.11.8-zh.tar.gz
cp -rp /opt/gitlab/embedded/service/gitlab-rails /opt/gitlab-rails.bak
cp -rf gitlab-v11.11.8-zh/* /opt/gitlab/embedded/service/gitlab-rails/
此时,汉化就完成了,可以直接启动gitlab了。就可以看到页面都变成了中文了,效果图如下。