Skip to content

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

微信截图_20210605183355

<!-- more -->

当一个程序员对算法、语言标准、底层、原生、英文文档这些词汇产生恐惧感的时候,他的技术生命已经走到尽头

markdown 的语法没办法复制图片,很烦,怎么办,用语雀做后台编辑

搞了一天多,终于折腾成功了。在看作者 github 的时候发现 ssh 在上面,给作者提醒了下,加了微信好友,才知道是 17 年毕业的。

哎,自惭形秽啊,大佬现在都这么年轻了么。以后前端的路该怎么走啊。

算了不感慨了,总结下吧。

  1. 用语雀发布文章
  2. 语雀触发 serveless 函数钩子
  3. servelee 函数触发 Travis 自动化构建
  4. travis 利用 yuque-hexo 拉取语雀上面的文章 md
  5. 重新 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 的环节。

https://juejin.im/post/5afe61f5f265da0b8d422a3e

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

https://segmentfault.com/a/1190000017797561