Hexo 使用 circle ci 部署

前言

最近 github 发邮件提醒我大学时白嫖的两年 github 会员到期了,提醒我降级,降级现在好像也没太大影响,毕竟微软爸爸收购 github 后把私库都免费了,也没用过私库多人协作,也够用了。

唯一的问题是当初附赠的私有库的 Travis CI 的会员也不能用了,因为我的博客源文件放在私有库,所以必须找一个替代品(到期后变为了试用版,提供 100 次构建试用)。之前一直看到过 circle ci 有人推荐,看了下是支持私有库的。免费版和收费版只是同时构建任务数的差距而已,抽空折腾了下总算折腾好了。

配置 CI

之前配置 Travis CI 写的配置文件是 yaml 格式,非常简单,在此贴出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
language: node_js

node_js: stable

install:
- npm install -g firebase-tools
- npm install -g hexo-cli
- npm install
- sed -i s/'$DEPLOY_TOKEN'/$DEPLOY_TOKEN/g _config.yml
- git clone -b geekrainy https://github.com/geekrainy/hexo-theme-element.git themes/element

script:
- hexo azuresearch
- hexo d

after_success:
- firebase deploy --token=${FIREBASE_API_TOKEN}

branches:
only:
- master

做的事情不多,指定环境,下载依赖,安装主题,构建发布。

但是看了下 circle ci 的配置文件,是基于 Docker 的,概念比较多。研究一番,也写了出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version: 2
jobs:
build:
docker:
- image: circleci/node:8
working_directory: ~/rainylog-hexo
steps:
- checkout
- run:
command: |
git clone -b geekrainy https://github.com/geekrainy/hexo-theme-element.git themes/element
- restore_cache:
keys:
- dependencies-{{ checksum "package.json" }}
- dependencies-
- run:
command: yarn
- save_cache:
paths:
- node_modules
key: dependencies-{{ checksum "package.json" }}
- run:
command: |
yarn build
yarn deploy
workflows:
version: 2
build_and_deploy:
jobs:
- build:
filters:
branches:
only:
- master

这里的 working_directory 指定的是仓库目录,然后就要指定该 job 的一些命令步骤了。这里比较特别的是可以缓存依赖目录,下次构建的时候可以大大缩短构建时间。基于 package.json 的哈希来判定依赖是否有更新,看配置文件一目了然。

和 Travis CI 不同的是,这里如果全局安装 hexo-clifirebase-tools 并不能识别到 hexofirebase 命令。网上的解决方式又说用 sudo 的,有说把 Npm 的全局安装路径修改再添加到 circle 用户的环境变量的。还有说构建一个自己的 Docker 镜像。个人感觉比较麻烦。

我的方案是把这些应该全局安装的工具都安装到项目依赖中,写一个 npm script 调用即可。所以上述配置文件执行了 yarn buildyarn deploy,前者编译生成静态文件,后者发布到 firebase 中。npm script 的配置:

1
2
3
4
"scripts": {
"build": "hexo azuresearch",
"deploy": "firebase deploy --token=${FIREBASE_API_TOKEN}"
},

还有一个不同点是在 circle ci 中可以直接读取到配置的环境变量,不用再像之前的 Travis CI 的配置文件中那样去手动 sed 进去替换了,方便了不少。

至此便可以愉快的玩耍了,关于如何将静态文件部署到 firebase,官方文档讲的很清楚,在此就不展开啦。

-EOF-

本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处! © 雨落
  1. 1. 前言
  2. 2. 配置 CI