Git自动化部署踩过的坑

  1. 编写php【用于执行hook.sh,注意使www用户有可执行的权限】
$jsonData = file_get_contents('php://input', 'r');

$postArray = json_decode($jsonData,true);

if (isset($postArray['ref']) && $postArray['ref'] == 'refs/heads/master') {

file_put_contents('/home/wwwlog/hook_log-'.date('Ymd').'.txt',date('Y-m-d H:i:s').'|-------|'.$jsonData.PHP_EOL, FILE_APPEND);

$status = @system('/home/wwwroot/bin-shells/hook.sh',$out);

}

exit('ok');
  1. 编写sh
#!/bin/sh

#判断是不是远端仓库




IS_BARE=$(git rev-parse --is-bare-repository)

#if [ -z "$IS_BARE" ]; then

#echo >&2 "fatal: post-receive: IS_NOT_BARE"

#exit 1

#fi




#unset GIT_DIR

DeployPath="/home/wwwroot/cash_advance"




echo "==============================================="

cd $DeployPath

echo "deploying the test web"




#git stash




#git pull origin master




git fetch --all

git reset --hard origin/master

git pull

#gitbook build

sleep 15




time=`date`

echo "web server pull at webserver at time: $time."

echo "================================================"

 

  1. 相关权限问题:
  • 要使www用户有执行shell脚本的权限:
vi /etc/passwd 将/sbin/nologin改为/bin/bash

 

  • 要将/root/.ssh/下的文件拷贝到www用户的宿主目录下:/home/www/.ssh/,因为web是以www用户来访问的;并将私钥加入到本地计算机的ssh-agent中:

➜ su www【切换到www用户】

➜ eval “$(ssh-agent -s)”

Agent pid 78370

➜ ssh-add /home/www/.ssh/id_rsa

Enter passphrase for /Users/Leo/.ssh/id_rsa: <myPassphrase>

Identity added: /Users/Leo/.ssh/id_rsa (/Users/Leo/.ssh/id_rsa)

  • 在git根目录下需要给隐藏目录.git 755的权限:

chmod -R 755 ./.git

git 的全局sudo -Hu www git config –global credential.helper store # 永久保存

sudo -Hu www git config –global user.name “name”

sudo -Hu www git config –global user.email “shample@gmail.com” # 邮箱请与github上一致

  • 修改ini文件:将system函数从禁用列表中删除

 

  1. 将外网可访问的http://xxx.xxx.com/hook.php配置到github后台的Web Hooks配置项中。