使用PHP脚本远程部署git项目

准备工作:

1.coding.net创建私有项目

2.安装了Web服务 Git服务的服务器

服务器端:

1.nginx、php-fpm统一用www用户 www 目录,这个可以通过修改配置文件实现。

[root@yz_test www]# ps -ef|grep nginx
root      7826     1  0 Jul01 ?        00:00:00 nginx: master process nginx
www       7827  7826  0 Jul01 ?        00:00:01 nginx: worker process
root      9482  9437  0 06:33 pts/0    00:00:00 grep nginx

[root@yz_test www]# ps -ef|grep php-fpm
root      7800     1  0 Jul01 ?        00:00:00 php-fpm: master process (/usr/local/php-5.6.22/etc/php-fpm.conf)
www       7801  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7802  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7803  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7804  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7805  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7806  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7807  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7808  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7809  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7810  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7811  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7812  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7813  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7814  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7815  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7816  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7817  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7818  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7819  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7820  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
root      9484  9437  0 06:34 pts/0    00:00:00 grep php-fpm

2.生成Git用户公钥:用于clone时认证权限

ssh-keygen -t rsa -C "wangzhenxian@foxmail.com"
# 然后一直回车就行
# 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径

3.生成部署公钥

 sudo -Hu www ssh-keygen -t rsa # 请选择 "no passphrase",一直回车下去
 sudo cat /home/www/.ssh/id_rsa.pub # 查看生成的密钥内容,复制全部

 4.准备钩子目录 项目目录

chown -R www:www /www/hook 
chown -R www:www /www/repos 
sudo -Hu www touch /mnt/www/hook/index.php
<?php

error_reporting(1);
// 生产环境web目录
$target = '/home/wwwroot/website.com';
$token = '您在coding填写的hook令牌';


$wwwUser = 'www';
$wwwGroup = 'www';

$json = json_decode(file_get_contents('php://input'),true);

if (empty($json['token'])||$json['token']!==$token) {
    exit('error request');
}

$repo = $json['repository']['name'];

$cmd = "sudo -Hu www cd $target && git pull";

shell_exec($cmd);

5.修改git配置和保存git用户名密码

sudo -Hu www git config --global credential.helper store # 永久保存
sudo -Hu www git config --global user.name "wangzhenxian" 
sudo -Hu www git config --global user.email "wangzhenxian@foxmail.com" # 邮箱请与conding上一致


在Coding.net
1.添加用户公钥

2.添加部署公钥

3.添加hook

个人感悟:

1.nginx .php-fpm 执行的用户组、用户保持统一

2.生产www用户的公钥,确保www用户在执行操作时 能从/home/www/.ssh 目录下到到公钥。

参阅:

http://blog.csdn.net/liu510817387/article/details/51594699

http://overtrue.me/articles/2015/01/how-to-deploy-project-with-git-hook.html

原文地址:https://www.cnblogs.com/zendwang/p/7105012.html