Hexo+Github+语雀+yuque-hexo+travis-ci+serverless打造全自动持续集成个人博客,云写作,自动部署,完美体验~1.Hexo+痛Github的要点1.为什么要用hexo+github?作为一个程序员,博客绝对是必须的,github也是必须的。所以:hexo+github=高端2.痛苦的写作经历使用hexo,你会面临以下问题:如何管理博客源码?图片在哪里?如何编写降价文件?相信很多人都在使用本地编辑器来写博客。经历真的很痛苦。比如vscode,可视化插件马马虎虎,图片不能复制粘贴。如果要插入图片,必须先将其另存为文件,放在本地。然后再引用,什么?你说七牛云存储?复制粘贴怎么能酷呢?当然博客源码可以使用travis-ci进行持续集成。想写博客或者换电脑,写完clone源码仓库推送,就可以算了。但是,相对于独立站点的博客,比如wordpress,我还是觉得写作体验有点不爽。3.脑洞大开:一次偶然的机会,朋友安利语雀,一个文档写作平台,觉得这就是完美的写作体验,各种UI和编辑器都很舒服~给个图吧:markdown编辑器也很酷:so差不多了,我就想问问有没有办法在语雀里面写,写完后自动同步到Github博客?年轻人要有激情,说到做到,结合severless、yuque-hexo、travis-ci花了一天时间,终于跑通了编写、发布、自动部署的全过程~2.总体具体方案流程:语雀发布文章webhook调用serverless功能serverless发起请求触发构建任务travis-ci同步语雀文章构建hexogithub生成静态页面展示1.如何部署hexo+github+triavs-cihexo,如何集成travis-ci等等等等,我就不说了。网上有很多类似的文章~比如:使用Hexo+Github+TravisCI搭建自动发布的静态博客系统GitHubpages+Hexo搭建自己的个人博客那么如何同步语雀的文章呢?答案是:yuque-hexo这是一个开源库:https://github.com/x-cold/yuque-hexo使用方法也很简单:1)修改package.json,添加配置:"yuqueConfig":{"baseUrl":"https://www.yuque.com/api/v2","login":"u46795","repo":"blog","mdNameFormat":"title","postPath":"source/_posts/yuque"},2)添加命令:"scripts":{"sync":"yuque-hexosync","clean:yuque":"yuque-hexoclean","deploy":"npmrunsync&&hexoclean&&hexog-d",},附上我的package.json文件。2、Serverless目前阿里云和腾讯云都有Serverless服务,免费额度够用。配置方法如下:1)创建一个函数2)Serverless函数示例:body){$yuque_data=json_decode($event->body);$update_title.=$yuque_data->data->title;}//默认参数$repos='xxxx';//你的仓库id或slug$token='xxxxxx';//你的登录令牌$message=date("Y/m/d").':yuqueupdate:'.$update_title;$branch='主人';//后置参数$queryString=$event->queryString;$q_token=$queryString->token?$查询字符串->令牌:$令牌;$q_repos=$queryString->回购?$queryString->repos:$repos;$q_message=$queryString->消息?$查询字符串->消息:$消息;$q_branch=$queryString->分支?$queryString->branch:'master';回声($q_token);回声('===');回声($q_repos);echo('===');回声($q_message);echo('===');回声($q_branch);echo('===');//请求travisci$res_info=triggerTravisCI($q_repos,$q_token,$q_message,$q_branch);$res_code=0;$res_message='未知';如果($res_info['http_code']){$res_code=$res_info['http_code'];switch($res_info['http_code']){案例200:案例202:$res_message='成功';休息;默认值:$res_message='失败';休息;}}$res=array('status'=>$res_code,'message'=>$res_message);return$res;}/**@descriptiontravisapi,触发构建*@param$reposstring仓库ID,slug*@param$tokenstring登录验证token*@param$messagestring触发信息*@param$branchstringbranch*@return$info数组返回包信息*/functiontriggerTravisCI($repos,$token,$message='yuqueupdate',$branch='master'){//初始化$curl=curl_init();//设置抓取的urlcurl_setopt($curl,CURLOPT_URL,'https://api.travis-ci.org/repo/'.$repos.'/requests');//设置获取的信息以文件流的形式返回,而不是直接输出curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//设置post方式提交curl_setopt($curl,CURLOPT_CUSTOMREQUEST,"POST");//设置post数据$post_data=json_encode(array("request"=>array("message"=>$message,"branch"=>$branch)));$header=array('Content-Type:application/json','Travis-API-Version:3','Authorization:token'.$token,'Content-Length:'.strlen($post_data));curl_setopt($curl,CURLOPT_HTTPHEADER,$header);curl_setopt($curl,CURLOPT_POSTFIELDS,$post_data);//执行命令$data=curl_exec($curl);$info=curl_getinfo($curl);//关闭URL请求curl_close($curl);return$info;}?>这里有几个需要获取的参数:travislogintoken,在travis-ci.org中设置接口获取:仓库ID或extension,使用findder或postman发起请求:ID和slug即可从https://api.travis-ci.org/owner/Ghostdar/repos返回包中获取。3)配置触发方式,一般会得到这样一个api:https://service-s08f6nvk-1251...3、语雀配置配置一个仓库webhook:可以选择全部更新触发或者活动触发,活动触发表示发布一个需要选中选项才能触发webhook。详情请参考语雀文档:https://www.yuque.com/yuque/developer/doc-webhook;填写serverless生成的API,链接后可以添加参数:token登录tokenrepos仓库idmessage提交信息分支分支示例:https://service-s08f6nvk-1251833201.ap-guangzhou.apigateway.myqcloud.com/release/xxx?repos=xxx&token=xxx&message=xxx&branch=xxx如果链接没有参数,就写在serverless函数中。4.开始发布或更新文章发布或更新文章后,我们进入travis-ci,可以看到触发了一个构建请求:构建完成后,已经正常显示在我们的博客上了~附Blog地址:https://ghostdar.github.io/,不好意思求个star~3.其他思路1.githubapi可以用github的api。每当更新一篇文章,自动生成commit,触发travis-ciBuild,但是感觉工作量太大,所以放弃了~2。需要探索的travis-ci。目前,我使用的方法是触发构建。其实还可以做更多的自定义配置~要不要研究一下呢?主要是我懒~当然如果有更好的解决方案欢迎大家交流~最后:再次感谢雨雀开发webhook,@阴激大神的yuque-hexo插件~附上地址:yuque-hexo:https://github.com/x-cold/yuque-hexoyuque-blog:https://github.com/x-cold/yuque-blog
