基于Coding+WebHook+PHP脚本 实现web项目版本自动迭代部署

2018-06-06 15:50:46

前言

测试系统:ubantu16.04、window10 WebHook平台:coding.net
需要的系统环境:nginx,php7,git

“了解一下”

  • ①. 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/XX  --depth=1  

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

主要原理

Coding仓库处的webhook可以监控你当前项目的push和merge状态,如果你有push或merge请求,它会自动向你所在的URL作http请求,你只要在它请求的url的文件内附脚本自动执行代码git pull等操作即可更新版本和清除缓存等。

Coding中webhook配置

csdn

服务器中Php代码配置

根据你的url,在url的文件内编辑自动执行的脚本代码,以下是我的配置,我这里做了token验证,防止恶意代码执行。

<?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;  
我是如何搭建 Ghost 博客系统

前言 写博客,我喜欢 简洁、轻便的博客系统 用数据库做文章储存方式 专注于文字,支持Markdown编辑 在尝试了WordPress、hexo博客系统之后,Ghost让我眼前一亮。 搭建Ghost博客,主要实现了我以下功能: NodeJs驱动,Mysql保存数据,Nginx反向代理 实现Https安全访问 百度统计 做访问量统计 畅言 做博文评论系统 搭建环境 阿里云学生主机 Linux系统:Ubuntu 16.04 SSL证书是阿里云的免费CA证书 安装Ghost博客系统所需的系统环境 安装Nginx sudo apt-get install nginx 安装Node,Npm sudo apt-get install nodejs sudo apt-get install npm * 安装Nvm nvm用于控制node版本,因为下文运行ghost系统时,可能出现提醒node版本太高/低,nvm能自由切换版本