centos7 git仓库搭建代码同步

    由于我们的代码有本地(每个开发人员的电脑),局域网,测试线上环境(及正式环境),相当于三端。

    基本结构图如下:

centos7 git仓库搭建代码同步_第1张图片 代码管理流程图

 

一.局域网和线上cenos7搭建安装git

1.安装线上git

yum install git    #安装git

git --version    #查看git版本

2.创建用于运行gitlab的用户git

adduser git    #建立git用户
groupadd git    #建立git用户组
usermod -G git git    #将git用户加入git用户组同时从其他组移除
usermod -a -G root git    #将git用户加入root用户组,有-a参数不从其他组移除,此时git同时属于git和root组

passwd git    #为git用户设置登录密码

    此处有些读者习惯用www用户部署web目录,那就以www用户运行git,这里不再赘述。

3.创建git仓库目录

cd /home/git    #进入git用户目录
#确保git目录拥有者是git用户,不是就修改chown git:git /home/git -R
mkdir test.git    #创建git仓库目录
cd test.git    #进入目录
git init --bare    #初始化仓库目录
cd ../    #返回上层目录
chown git:git test.git -R   #修改git仓库目录拥有者为git

4.以同样的方式在局域网安装git,这里不再赘述

 

二.局域网连接线上仓库,本地连接局域网仓库

1.创建局域网和线上web目录

    进入局域网服务器:

cd /home    #示例是在/home目录下,读者可以自行选择
mkdir www    #创建www目录用于放web
chown git:git www -R    #拥有者改为git
chmod 755 www -R    #权限设为755

    www目录就创建完了,将nginx以git用户运行,修改nginx.conf文件,在文件头部:

user	git;	#以git身份运行

    重启nginx

注意这里要操作两次,线上也要以同样方式创建www,还要在www中手动创建test目录,进入线上服务器:

cd /home    #示例是在/home目录下,读者可以自行选择
mkdir www    #创建www目录用于放web
mkdir www/test    #线上要自己创建test目录
chown git:git www -R    #拥有者改为git
chmod 755 www -R    #权限设为755

2.克隆线上仓库

   进入局域网服务器:

su - git    #切换为git用户
cd /home/www    #进入www目录
git clone git@{线上ip}:test test    #克隆线上仓库到test目录

    此时会提示输入密码,输入我们刚刚设置的git密码就可以克隆成功。但是如果没有设置git密码,或者即使设置了密码,每次连接线上git库都需要输入密码,这是一件很头疼的事,所以需要免密码连接。

3.ssh免密码验证连接

    进入线上服务器:

su - git    #切换至git用户
cd /home/git    #进入git目录
ssh-keygen -C '[email protected]' -t rsa    #为你生成rsa密钥,可以直接一路回车,执行默认操作

    生成密钥后,会出现

.ssh
├── id_rsa
└── id_rsa.pub    #公钥 服务端需要里边内容验证连接着身份

    接着修改权限:

chmod 700 /home/git/.ssh

    此处要确保你的RSA认证是打开的!

    查看 /etc/ssh/sshd_config,确保这三项是打开的:

 RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

如果没有的就加上,修改完之后重启sshd:

systemctl restart sshd

    进入局域网服务器,用同样的方式生成rsa密钥。本机也需要生成一份,linux方法一样,windows的话网上资料很多,这里不赘述。

    将局域网id_rsa.pub的内容拷贝出来,进入线上服务器:

su - git    #切换至git用户
vim /home/git/.ssh/authorized_keys    #创建authorized_keys文件

###将局域网中id_rsa.pub中的内容全部粘贴进去,保存

chmod 600 /home/git/.ssh/authorized_keys    #修改权限

    此时进入局域网服务器:

su - git    #切换至git用户
cd /home/www    
#之前没有克隆成功的这里要先 git clone git@{线上ip}:test test
cd test    #进入test目录
git pull    #此时发现不再需要输入密码

    如果之前已经clone了目录而此时还是需要输入密码,就删除test目录重新clone一份。

su - git    #切换至git用户
cd /home/www
rm -rf test
git clone git@{线上ip}:test test
git pull

4.本地连接局域网仓库的方式和以上类似,不再赘述

 

三.建立局域网git钩子(hooks),线上git钩子(hooks)

1.创建post-receive

    进入局域网服务器,切换至git用户

su - git    #切换至git用户
cd /home/git/test.git/hooks    #进入hooks目录
vim post-receive    #创建post-receive文件

#####填入如下内容

#!/bin/bash

DIR=/home/www/test	#指定代码自动检出目录

git --work-tree=${DIR} clean -fd

git --work-tree=${DIR} checkout --force		#直接强制检出

注意这里的局域目网录/home/www/test既是web目录,又是线上git库的工作区

 修改权限:

chmod +x post-receive    #赋予执行权限

2.提交代码会自同步测试运行

    从本地push代码,会自动同步至web目录,并且文件拥有者是git。读者请自行配置nginx的进行web访问。

    如果html等静态文件可以访问而执行php没有权限(404),需要修改一下php-fpm的运行者和权限为git用户 :

cd /etc/php-fpm.d    #这是我的www.conf路径,读者的路径可能有所差异
vim www.conf
# 找到
user = ***
group = ***

# 改为
user = git
group = git

#修改php-fpm运行权限
cd /run/php-fpm    #这是我的php-fpm.pid路径,读者的路径可能有所差异
chown git:git php-fpm.pid

3.局域网至线上的钩子用同样的方式配置,这里不再赘述

 

四.全自动部署

    完成以上三步之后,多个开发人员将代码提交至局域网git库,git自动部署至局域网web,由管理员进入局域网服务器手动提交至线上git库,git自动部署至线上web目录。

    但是中间需要人手动操作还是觉得麻烦,于是修改局域网的post-receive,加入推送至线上的流程:

#!/bin/bash

DIR=/home/www/test	#指定代码自动检出目录

git --work-tree=${DIR} clean -fd

git --work-tree=${DIR} checkout --force		#直接强制检出

###接下来同步至线上

unset GIT_DIR	#清除git环境变量

cd ${DIR}	#进入代码目录

git add --all	#加载所有修改

git commit -a -m 'autocommit on change'		#自动提交至版本库

git pull	#同步线上代码

git push	#推送至线上

    至此,整套代码同步是全自动的,开发人员只需要使用git提交代码便会同时部署至局域网和线上,而且提交时还可以看到推送至线上的结果。当然了,如果你线上的服务器也是一个测试版的话你可以这么做,如果是正式版的话还是手动提交吧。

 

你可能感兴趣的:(centos7 git仓库搭建代码同步)