2017-9-14 Frank
1.通过码云的wehooks添加URL为 http://mydomain/gitpull.php, 当有push的时候调用php链接。
2.创建php文件gitpull.php
system('sh /opt/scripts/gitpull.sh');
3.创建更新脚本
#!/bin/sh
cd /myproject
git pull
到这里貌似成功了,但是发现返回空白脚本没有执行。
这时候想应该是权限的问题。
给gitpull.sh一个最高权限
chmod 777 gitpull.sh
然而依然不执行。也没有报错,如果有错误提示会省事很多。后来问题解决了才发现是可以输出错误信息的!如下:
system('sh /opt/scripts/gitpull.sh 2>&1');
查看执行用户,php查看
echo shell_exec("id -a");
或者通过查看php配置文件
more /etc/php-fpm.d/www.conf
发现用户是apache,需要给该用户添加权限,通过visudo 添加
%apache ALL=(ALL:ALL) NOPASSWD:/usr/bin/git pull
保存并推出,注意测试时注意浏览器缓存。
因为之前用root更新的所以还要修改项目所属用户
chown -R apache:apache myproject
还需要为apache添加部署密钥,当然先要生成密钥,我们用sudo来避免该操作。
sudo /usr/bin/git pull
避免git自带环境变量影响,shell脚本还要添加
unset GIT_DIR
最终脚本是这样的
1.gitpull.php
$p = file_get_contents("php://input");
if(!empty($p)){
$p = json_decode($p,true) ;
if(!empty($p["password"])&&$p["password"]=="mypassword"){
echo "<pre>";
echo "start" ;
echo "<br/>" ;
$last_line = system('sh /opt/scripts/diancai_gitpull.sh 2>&1',$retval);
//exec('sh /opt/scripts/diancai_gitpull.sh') ;
echo "end" ;
echo "</pre>";
echo '<hr />Last line of the output: ' . $last_line . '<hr />Return value: ' . $retval;
}
}
2.gitpull.sh
#!/bin/sh
cd /myproject
unset GIT_DIR
sudo /usr/bin/git pull
参考
PHP中system()、exec()输出错误信息
gitlab webhook php exec 调用 shell 脚本。shell 脚本中调用 git pull 命令无法执行。
shell 脚本中git 命令不生效
发表评论 登录: