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_PATHupdate.sh内容(放在项目服务器项目目录)
#!/bin/bash
cd /home/git/test # 切换目录
git pull origin master # 指定只拉取master分支
chown -R git:git /home/git/test # 修改项目目录权限,防止权限变化导致项目无法访问最后更新于