持续交付是这几年比较流行的词,无论是国内还是国外,持续交付都是新一代软件或应用开发的交付手段。常见的有版本控制工具,gitlab或者github用来作为代码的仓库。

持续集成工具比如说jenkins用于将代码拉取到本地进行打包。

最后需要一个不熟交付工具,如ansible,saltstack,chef等,用来将jenkins抓取的代码进行最终的远程服务器的推送。

所以持续交付等于版本控制系统叫上持续集成工具加上自动化部署工具。我们这篇文章主要介绍的就是这么一个流程。

gitlab

gitlab是一个开源分布式版本控制系统,他的开发语言是ruby。通过UI界面与用户交互实现项目代码管理,版本控制,代码复用与查找。

github是一个分布式的在线代码托管系统,分为个人版和企业版,个人版免费,企业版收费。gitlab是分布式在线代码托管软件,他的企业版和个人版都需要服务器来安装。他的优势在于中小公司可以使用免费版来管理自己的代码。

  1. 安装配置

我们这里在本地虚拟机中安装gitlab,首先我们需要安装VirtualBox虚拟机,这个比较简单,直接下一步就可以。在这个虚拟机中创建一个64位的Linux操作系统。

双击启动虚拟机,我们可以使用git bash链接这台虚拟机。

ssh root@xx.xx.xx.xx

链接前需要对主机做一些准备工作,首先需要关闭CentOS7系统下的放火墙。

systemctl stop firewalld
# 禁止开机启动
systemctl disable firewalld

关闭强制访问安全策略。

vi /etc/sysconfig/selinux

SELINUX=disabled # enforcing -> disabled
# 重启
reboot

稍等片刻重新链接主机

# 查看是否禁用成功
getenforce

安装gitlabde的依赖文件

yum install curl policycoreutils openssh-server openssh-clients postfixs

下载gitlab仓库源。

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

安装成功启动postfix邮件服务

systemctl start postfix
systemctl enable postfix

接着安装gitlab-ce社区版本服务包, 启动安装向导。

yum -y install gitlab-ce

使用openssl命令去创建gitlab本地证书并配置config加载该证书。首先需要创建ssl命令。

mkdir -p /etc/gitlab/ssl

创建本地私有秘钥

openssl genrsa -out "/etc/gitlab/ssl/gitlab.example.com.key" 2048

使用openssl生成csr证书, 这里country可以输入cn,province可以输入bj,city输入bj,organization输入空格,unit name也输入空格,common name输入的是gitlab的域名,gitlab.example.com, 邮箱地址输入admin@example.com, 证书密码输入123456,company name直接回车就可以。

openssl req -new -key "/etc/gitlab/ssl/gitlab.example.com.key" -out "/etc/gitlab/ssl/gitlab.example.com.csr"

创建签署证书

openssl x509 -req -days 3650 -in "/etc/gitlab/ssl/gitlab.example.com.csr" -signkey "/etc/gitlab/ssl/gitlab.example.com.key" -out "/etc/gitlab/ssl/gitlab.example.com.crt"

使用openssl生成pem证书

openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048

到此,证书都创建完毕,出现四个证书即都创建成功

cd /etc/gitlab/ssl/
ll

修改所有证书的权限为600

#进入ssl文件夹
cd /etc/gitlab/ssl/
#更改本文件夹下所有文件的权限
chmod 600 *

编辑gitlab.rb,将所有的证书配置到gitlab的配置文件中

vim /etc/gitlab/gitlab.rb

找到external_url这行,将http改为https:https://gitlab.example.com

找到nginx['redirect_http_to_https'],移除#并将值改为true;

找到nginx['ssl_certificate'],值修改为/etc/gitlab/ssl/gitlab.example.com.crt;

找到nginx['ssl_certificate_key'],值修改为/etc/gitlab/ssl/gitlab.example.com.key

找到nginx['ssl_dhparam'],值修改为/etc/gitlab/ssl/dhparams.pem。

修改完这些之后我们需要初始化gitlab配置

#如果不执行此命令,此时可能会卡住报错
systemctl restart gitlab-runsvdir
#初始化
gitlab-ctl reconfigure

这可能需要一点时间,当出现gitlab Reconfigured就是正常初始化结束。

最后需要修改gitlab的nginx的代理文件,配置http配置文件

vim /var/opt/gitlab/nginx/conf/gitlab-http.conf

找到server,在server_name下增加:rewrite ^(.*)$ https://$host$1 permanent;

重启gitlab使Nginx配置生效。

gitlab-ctl restart

最后一步,修改系统的hosts文件。

#添加gitlab服务所在主机的IP,并指定gitlab.example.com
192.168.2.105  gitlab.example.com

打开浏览器,输入gitlab.example.com

打开后,会让你设置新的root的密码,设置成功后即可登录。

git -c http.sslVerify=false clone https://gitlab.example.com/test/test1.git

Gitlab应用

gitlab的后台管理可以针对不用的项目不同用户去定制不同的访问策略,开发与运维的两个角色可以各司其职互不影响的在自己所在的场景下工作。

作为开发人员关注的点肯定是代码的快速发布和审核,一般项目测试之后我们会提交一个master分支合并的申请等待领导去审核,决定是否确认合并操作,确认之后开发人员会在另一个fueture分支继续工作。

作为运维人员关注的另一个点是保证gitlab的维护和管理,例如CPU利用率,内存使用情况。

运维人员点击设置 -> Monitoring -> System Info这里面包含了若干系统资源的状态值。