标题:
[教程]
CentOS利用WebHook实现PHP自动部署Git代码,其他系统原理相同
[打印本页]
作者:
hjp1011
时间:
2016-12-3 19:34
标题:
CentOS利用WebHook实现PHP自动部署Git代码,其他系统原理相同
编辑权限:
vim /etc/sudoers
CentOS利用WebHook实现PHP自动部署Git代码,其他系统原理相同
在服务器查看apache2(我用的apache服务)执行用户,执行代码:ps -ef | grep httpd #我的服务名是httpd,这里根据自己真实的写,比如有的是apache2。
我apache的运行用户是www
然后编辑权限:
在
root ALL=(ALL) ALL
下加
www ALL=(ALL) NOPASSWD: /usr/bin/git
1. 生成公钥
公钥有两个:1. git用户公钥,2. 部署公钥:
用户公钥
ssh-keygen -t rsa -C "youname@163.com"
# 然后一直回车就行
# 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径
部署公钥
sudo -Hu www ssh-keygen -t rsa # 请选择 “no passphrase”,一直回车下去
#www用户的主目录可以vi /etc/passwd 修改成/home/www,然后在www下建立.ssh目录
例如:www:x:1000:1000::/home/www:/sbin/nologin
2. 准备钩子文件
创建和修改目录权限:
mkdir /home/wwwroot/website.com/hook
chown -R www:www /home/wwwroot/website.com/hook
写入钩子文件:
sudo -Hu www touch /home/wwwroot/website.com/hook/index.php
<?php
$hook = str_replace('\"','"',$_POST['hook']);//码云webhook返回的json数据对引号都转义了,替换一下。
$json = json_decode($hook,true);
$target = '/www/web/hook/public_html/repos/weshop';
$token = '码云上新建钩子时的密码';
$cmd = "cd $target; sudo -Hu www git pull";
if ($json['password'] != $token) {
exit('error request');
}
else
echo shell_exec($cmd);
?>
确保你的hook文件可以访问:http://example.com/hook/index.php,钩子准备完成。
3.修改git配置和保存git用户名密码(这步看情况吧)
sudo -Hu www git config --global credential.helper store # 永久保存
sudo -Hu www git config --global user.name "Bantes"
sudo -Hu www git config --global user.email "admin@xsooo.com" # 邮箱请与conding上一致
在GIT网站配置公钥
1.添加用户公钥
复制/root/.ssh/id_rsa.pub内容到个人设置页的SSH公钥里添加即可(https://coding.net/user/account/setting/keys)
2.添加部署公钥
复制/home/www/.ssh/id_rsa.pub的内容并添加到部署公钥:
选择项目 > 设置 > 部署公钥 > 新建 > 粘贴到下面框并确认
3.添加hook
初始化
1.我们需要先在服务器上clone一次,以后都可以实现自动部署了:
sudo -Hu www git clone https://git.coding.net/yourname/yourgit.git /home/wwwroot/website.com/ --depth=1
这个时候应该会要求你输入一次Coding的帐号和密码,因为上面我们设置了永久保存用户名和密码,所以之后再执行git就不会要求输入用户名和密码了。
**!!注意,这里初始化clone必须要用www用户**
2.往Coding.net提交一次代码测试:
在本地clone的仓库执行:
git commit -am "test hook" --allow-empty
git push
OK,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。
欢迎光临 WDlinux官方论坛 (http://wdlinux.cn/bbs/)
Powered by Discuz! 7.2