Php+WebHook实现项目自动部署 - 关于Git自动部署方案

序言

测试环境:ubantu14、window10
测试Git平台:coding.net

“了解一下”

  • ①. git pull 了解一下
  • ②. Linux的SSH 了解一下
  • ③. Git的SSH公钥 了解一下
    一般自动部署,Git不用https,而是改为ssh。
    因为自动部署是自动输入账号密码,自动完成部署方案
    如果一定要用https,请如下操作,(即记住用户名和密码)
    打开当前项目git配置文件‘config’
    编辑[remote “origin”]这一项里的url
url = https://yourname:password@git.coding.net/yourusername/yourpro.git

要用到的

//部署用户公钥
ssh-keygen -t rsa -C "[email protected]"
//部署公钥
sudo -Hu www-data ssh-keygen -t rsa -C '[email protected]'
//切换用户并克隆
sudo -Hu www-data git clone git@git.coding.net:XXX/XX.git /var/www/cms  --depth=1

注:如果是www-data用户部署的公钥,应该去www-data用户的家目录去找.ssh文件夹下的id_rsa.pub

主要原理

Coding仓库处的webhook可以监控你当前项目的push和merge状态,如果你有push或merge请求,它会自动发送http post请求,你只要在它请求的url的文件内附脚本代码自动执行git pull操作即可。

Coding中webhook设置

Php+WebHook实现项目自动部署 - 关于Git自动部署方案_第1张图片

服务器中Php代码布置

在网站根目录下,coding.php附如下代码


$token = '你的token';
$post_data_origin = @file_get_contents("php://input");
$post_data = json_decode($post_data_origin, true);
if ($post_data['token'] != $token) {
    header("HTTP/1.1 403 Forbidden");
    die();
}
if ($post_data['ref'] != "refs/heads/master" && $post_data['merge_request']['target_branch'] != "master") {
    header("HTTP/1.1 417 Expectation Failed");
    die();
}
$pwd = '你的网站根目录';
$command = 'cd ' . $pwd . ' && git pull';
$output = shell_exec($command);
if ($output == null) {
    header("HTTP/1.1 501 Not Implemented");
    die();
} else {
    $remove_cache_command = 'rm -rf ' . $pwd . '_run_temp/*';
    shell_exec($remove_cache_command);
}
print $output;

参考
[注:欢迎大佬驾临指出错误]

你可能感兴趣的:(网站架构与性能优化)