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 "i@hyperdai.com"
//部署公钥
sudo -Hu www-data ssh-keygen -t rsa -C 'i@hyperdai.com'
//切换用户并克隆
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代码布置

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

<?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;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值