更新: 暂时不用语雀,截图留念

<!-- more -->
当一个程序员对算法、语言标准、底层、原生、英文文档这些词汇产生恐惧感的时候,他的技术生命已经走到尽头
markdown 的语法没办法复制图片,很烦,怎么办,用语雀做后台编辑
搞了一天多,终于折腾成功了。在看作者 github 的时候发现 ssh 在上面,给作者提醒了下,加了微信好友,才知道是 17 年毕业的。
哎,自惭形秽啊,大佬现在都这么年轻了么。以后前端的路该怎么走啊。
算了不感慨了,总结下吧。
- 用语雀发布文章
- 语雀触发 serveless 函数钩子
- servelee 函数触发 Travis 自动化构建
- travis 利用 yuque-hexo 拉取语雀上面的文章 md
- 重新 hexo g 生成文章
哎,丢人。。。
Travis-CI 自动化发布文章
Travis CI 是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在 GitHub 托管的代码
本地写完文章 => push github => GitHub 触发 Travis CI 构建 => 执行命令 => 部署 => 完成
https://github.com/settings/tokens 生成 github 的 token,复制到https://www.travis-ci.org/wu529778790/wu529778790.github.io
的 setting
CI_TOKEN 是 github 的 Token
自动化部署脚本.travis.yml
js
language: node_js
node_js:
- 8.9.0
cache:
directories:
- node_modules
before_install:
- npm install hexo-cli -g
install:
- npm install
script:
- hexo clean
- hexo generate
after_script:
- cd ./public
- git init
- git config user.name "github用户名"
- git config user.email "github邮箱"
- git add .
- git commit -m "TravisCI 自动部署"
# Github Pages
- git push --force --quiet "https://${CI_TOKEN}@${GH_REF}" master:master
# Coding Pages
- git push --force --quiet "https://coding用户名:${CO_TOKEN}@${CO_REF}" master:master
branches:
only:
- indigo 这里替换你要监听的分支
env:
global:
# Github Pages
- GH_REF: github.com/lanpangzhi/lanpangzhi.github.io 这里替换你的github仓库地址
# Coding Pages
- CO_REF: git.coding.net/bule/bule.coding.me.git 这里替换你的coding仓库地址然后提交 github,travis-ci 就会自动构建了。 现在写博客只需要两步操作,第一步 hexo new "新的文章",第二步提交到 github。travis-ci 会帮你自动部署的。 省去了 hexo clean hexo g -d 的环节。
yuque-hexo
用 yuque-hexo 同步文章: https://github.com/x-cold/yuque-hexo
下载 npm
js
npm install yuque-hexo --save-dev修改 package.json,增加配置
js
"yuqueConfig": {
"baseUrl": "https://www.yuque.com/api/v2",
"login": "shenzujiudi",
"repo": "blog",
"mdNameFormat": "title",
"postPath": "source/_posts/yuque"
}增加命令
js
"scripts": {
"dev": "npm run sync && hexo s",
"sync": "yuque-hexo sync",
"clean:yuque": "yuque-hexo clean",
"deploy": "npm run sync && hexo clean && hexo g -d"
},serverless
php
<?php
function main_handler($event, $context) {
// 解析语雀post的数据
$update_title = '';
if($event->body){
$yuque_data= json_decode($event->body);
$update_title .= $yuque_data->data->title;
}
// default params
$repos = '22794509'; // 你的仓库id 或 slug
$token = ''; // 你的登录token
$message = date("Y/m/d").':yuque update:'.$update_title;
$branch = 'hexo';
// post params
$queryString = $event->queryString;
$q_token = $queryString->token ? $queryString->token : $token;
$q_repos = $queryString->repos ? $queryString->repos : $repos;
$q_message = $queryString->message ? $queryString->message : $message;
$q_branch = $queryString->branch ? $queryString->branch : 'hexo';
echo($q_token);
echo('===');
echo ($q_repos);
echo ('===');
echo ($q_message);
echo ('===');
echo ($q_branch);
echo ('===');
//request travis ci
$res_info = triggerTravisCI($q_repos, $q_token, $q_message, $q_branch);
$res_code = 0;
$res_message = '未知';
if($res_info['http_code']){
$res_code = $res_info['http_code'];
switch($res_info['http_code']){
case 200:
case 202:
$res_message = 'success';
break;
default:
$res_message = 'faild';
break;
}
}
$res = array(
'status'=>$res_code,
'message'=>$res_message
);
return $res;
}
/*
* @description travis api , trigger a build
* @param $repos string 仓库ID、slug
* @param $token string 登录验证token
* @param $message string 触发信息
* @param $branch string 分支
* @return $info array 回包信息
*/
function triggerTravisCI ($repos, $token, $message='yuque update', $branch='hexo') {
//初始化
$curl = curl_init();
//设置抓取的url
curl_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;
}
?>