一、需要设置gitee无需密码可以拉取代码到本地,操作步骤详见:生成/添加SSH公钥
二、设置 Linux免输入密码使用sudo git 命令:
因为我们的PHP执行其实是使用的www用户。这个我们是可以自行设置的。默认都是www用户。
那么PHP中执行git也是使用www用户。让www用户免密码执行git的语句是/etc/sudoers 文件中的
www ALL=NOPASSWD:/usr/bin/git
如果未找到,执行以下命令添加:
sed -i '$a\www ALL=NOPASSWD:/usr/bin/git' /etc/sudoers
sed -i '$a\apache ALL=NOPASSWD:/usr/bin/git' /etc/sudoers (有的php-fpm默认用户是apache)
三、在钉钉群聊添加自定义webhook机器人,复制webhook地址(第四步用到)
四、在项目的公共访问目录添加脚本, e.g. pull_code.php
//exit("nouse");
//此脚本用于gitee仓库有推送时更新某分支代码到某项目文件夹,并发送钉钉消息通知代码更新完成
$path = "/var/www/somehow";//todo:改为实际项目文件夹
$branch = "dev";//todo:改为实际拉取分支
$webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxx";//todo:改为第三步中的钉钉webhook
$message = shell_exec("cd ".$path.";sudo git pull origin ".$branch.";2
if (strpos($message,'up-to-date')){
echo "ignore";//不用更新代码
}else{
echo "Ding\r\n";
$data = array ('msgtype' => 'text','text' => array ('content' => $message));
echo request_by_curl($webhook, json_encode($data));
//shell_exec("cd ".$path.";composer install;2
}
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
// curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
// curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>
五、在项目的 WebHooks 设置 添加第四步添加的脚本,一般是 http://你的项目url/pull_code.php
选择事件一般勾选两个:Push 和 Pull Request