Git
简单易用,为了方便自己,满足好奇心,我学习了下如何搭建git服务器并实现自动化部署,在这里将自己遇到的坑跟大家分享一下。
系统说明
- 服务器: 阿里云
ECS
服务器 - 操作系统:
CentOS 7.2 64位
- 操作说明:熟悉 linux 基本操作——
yum
安装,vim
编辑,chown
权限设置等.
搭建步骤
-
在服务器上安装 git
yum install git
注:如果权限不够,可加
sudo
. -
添加
git
用户此处
git用户
是指系统中的 git 应用程序,而不是项目的组员。可执行命令:sudo adduser git
也可添加用户密码
sudo passwd git
-
禁止 shell 登录
用
vim
打开/etc/passwd
目录,修改git:x:1000:1000::/home/git:/usr/bin/bash
改成
git:x:1000:1000::/home/git:/usr/bin/git-shell
说明:出于安全考虑,我们需要禁止他人登录shell,但我们的组员仍可通过 ssh 正常使用git.
-
初始化
git
远程仓库在你服务器上创建一个 git 远程仓库并初始化:
git init --bare test.git
例如,选择
/usr/src/app 文件夹
,初始化创建仓库test.git
,结果如下:
-
修改远程仓库用户所有权
由于初始化创建的时候,文件所有权归属当前用户(如下图,我当前使用的是root
),为了是git
程序有操作权限,我们将所有权改为git
拥有.
sudo chown -R git:git test.git
结果如下:
-
添加用户
ssh
登录权限
将项目组员的ssh
公钥依次存储到/home/git/.ssh/authorized_keys
文件中,一行一个。如果人多的话,可以采用 gitosis 进行管理,配置可参考官方文档,此处暂不作介绍。 - 本地 clone 远程仓库
前面6步均在服务器上进行操作,这一步就可以在本地进行了,执行命令拉取代码:git clone git@server:/usr/src/app/test.git
说明:
server
是你服务器的公网 ip ,/usr/src/app/test.git
是上面创建的远程仓库路径.
自动化部署
git hook 会在接收到 push 之后触发特定事件。我们可以利用该特性,使用 bash 脚本来进行自动化部署。
-
创建脚本
现在我们进入
/usr/src/app/test.git
目录下的hooks
文件夹,编辑脚本:vim post-receive
具体内容如下:
#!/bin/sh # 删除 GIT_DIR 环境变量,避免干扰 unset GIT_DIR # 增加生产环境项目路径环境变量 WORKPATH=/usr/share/nginx/test # 进入生产目录 cd $WORKPATH git add . -A && git stash git pull origin master echo 'done!!!'
说明:此处我将项目部署在
/usr/share/nginx/test
目录下,可先进入`/usr/share/nginx
目录clone
代码. - 修改权限
chown -R git:git post-receive chmod +x post-receive
说明:
chmod +x
用来增加执行权限
踩坑说明
期间遇到的坑大多是 权限
问题导致的,用 chown
和 chmod
修改所有权和操作权限即可。
git 在不同系统上的安装可以自行搜索,各类系统都有自己的包管理工具。
热门评论
上面的三个图片是空的