GIT钩子自动更新

利用git服务端的hooks/post-update文件进行自动更新 分两种情况 一、git服务端跟要部署项目的服务在同一服务器,例如项目测试环境 在服务端post-update文件中写入相应路径及命令

# git仓库和项目服务在同一服务器,先用git将仓库克隆一份。
DEV_PATH=/tmp/test/		#设置命令详细路径变量,防止命令找不到路径
GIT_PATH=/usr/bin/git		#同上
unset GIT_DIR			# fatal: Not a git repository: '.'  错误原因。git的hooks里面默认有一些环境变量,会导致无论在哪个语句之后执行git命令都会有一个默认的环境路径,使用unset 掉默认的GIT环境变量
cd $DEV_PATH
git pull origin dev		#指定拉取的分支,这里指定的是dev,根据实际情况设置
chown -R git:git /tmp/test	#修改项目目录权限,防止权限变化导致项目无法访问

二、git服务端跟要部署的项目服务不在同一服务器,例如项目正式环境 在服务器post-update文件中写入相应路径及命令

# 推送到远程WEB目录,ssh需要提前设置好登录密钥,同样需要先git一份到
export LANG=en_US.UTF-8	# 系统语言,用echo \$LANG命令查看
GIT_PATH=/usr/bin/git		# 设置命令详细路径变量,防止命令找不到路径
SH_PATH=/bin/sh			 # 同上
BS_PATH=/home/git/update.sh	# 项目服务器脚本路径
ssh -l git project.server.domain -p1122 "$SH_PATH $BS_PATH "	# 以ssh方式用git用户登录到项目服务器,-p指定ssh端口(默认22号端口可以不指定),引号中为在项目服务器上执行的命令。

#同步dev分支,例如用来测试。需要提前git一份dev分支到指定目录。
DEV_PATH=/tmp/dev/
GIT_PATH=/usr/bin/git
unset GIT_DIR
cd $DEV_PATH
git pull origin dev
chown -R git:git $DEV_PATH

update.sh内容(放在项目服务器项目目录)

#!/bin/bash
cd /home/git/test				# 切换目录
git pull origin master			# 指定只拉取master分支
chown -R git:git /home/git/test	# 修改项目目录权限,防止权限变化导致项目无法访问

最后更新于