github与七牛云持续集成

2016-11-22

七牛云的CDN提供API刷新缓存服务,我们可以使用github的webhooks来触发刷新。

1.首先配置github的hook:

在项目里找到settings->Webhooks

设置:Payload URL 项为我们服务器的地址,然后保存

2.生成token,如下:

echo "/v2/tune/refresh" |openssl dgst -binary -hmac "用户SK" -sha1 |base64 | tr + - | tr / _

3.编写服务端脚本,来触发七牛API:

比如我用PHP来触发http://git.malu.me:

<?php
#七牛刷新缓存函数
function refresh_qiniu($path){
         $message = exec('curl -X POST -H "Authorization: QBox <用户AK>:<生成的token>" http://fusion.qiniuapi.com/v2/tune/refresh -d \''.json_encode($path).'\' -H \'Content-Type: application/json\' 2>&1');
         return $message;
}
$getin = file_get_contents("php://input");
#追加写入日志
file_put_contents('file.log',$getin, FILE_APPEND|LOCK_EX);
$getinarr = json_decode($getin);
$getinarr = $getinarr->commits[0];
$path = array();
#添加文章
if(!empty($getinarr->added) || !empty($getinarr->removed)){
   echo '刷page:';
   $path['urls']=array('http://git.malu.me','http://git.malu.me/index.html');
   $path['dirs']=array('http://git.malu.me/page/*');
   echo refresh_qiniu($path);
}
#修改文章
if(!empty($getinarr->modified)){
   echo '刷url:';
   foreach($getinarr->modified as $key=>$value){
      //echo $value;
      #匹配出文章名
      if(preg_match('/-\d\d-\d\d-(.*?)\.md/is', $value, $out)){
         //var_dump($out);
         echo $out[1];
         #对中文编码
         $renewurl = 'http://git.malu.me/'.urlencode($out[1]).'/';
         $path['urls']=array($renewurl);
         echo refresh_qiniu($path);
      }   
   }   
}