hexo 是当下一个比较流行的静态网站生成器,通常用户的使用方法都是将 hexo 项目的文件放到本地,而后编写文章,最后运行部署的命令将网站部署到一些代码托管网站(如:github)。可是,这样的使用方法有时会带来一些不便。node
首先,若是我想在另一台设备上面写博客,必须将整个项目拷贝过来,完成以后要保持两台设备的内容是一致的,否则就会致使部署以后有不一样的地方。git
在这种状况下通常会将整个项目都托管到 github 上面。可是这又会致使另一个问题,每次有改动的时候不但要部署博客,还要提交项目的代码,这又增长了操做的步骤。github
以前也有很多文章用不一样的方法解决上述的问题,例如利用 Dropbox 同步或者利用 Github 的 Webhooks 进行自动部署。这些方法须要付出必定的成本,由于都须要利用到一台 VPS 去完成。而今有一个更加简单并且免费的方法去完成 hexo 的自动部署,就是利用 Travis CI。npm
顾名思义,Travis CI 是一个持续集成(Continuous integration,简称CI)的工具。它能够在公共的 Github 仓库上无偿使用。缓存
首先,要在 Github 上创建一个代码仓库,要将本身 hexo 博客 push 到上面。hexo 项目做为运行部署的项目,而后 Github Page 的项目做为部署的目标项目。ruby
第二步,咱们须要有一个 Travis CI 的帐号,直接进入 Travis CI 官网,用本身的 Github 帐号受权登陆便可。bash
而后能够看到当前帐号的全部代码仓库,接下来将博客项目的状态设置为启用。网络
第三步,建立一个部署在 Travis CI 上面的 SSH key 利用这个 SSH key 可让 Travis CI 向咱们本身的项目提交代码(也就是将博客部署到 gh-page
)。hexo
$ ssh-keygen -t rsa -C "youremail@example.com"
获得 id_rsa.pub
和 id_rsa
,而后将有 pub
后缀的配置到 gh-page
的 Deploy key。ssh
记得要将 Allow write access
的选项选上,这样 Travis CI 才能得到 push 代码的权限。
刚才讲公钥文件配置好了,而后就要配置私钥文件,在 hexo 项目下面创建一个 .travis
的文件夹来放置须要配置的文件。
首先要安装 travis 命令行工具(若是在国内的网络环境下建议安装以前先换源)。
$ gem install travis
用命令行工具登陆:
$ travis login --auto
而后将刚刚生成的 id_rsa
复制到 .travis
文件夹,用命令行工具进行加密:
$ travis encrypt-file id_rsa --add
这个时候会生成加密以后的秘钥文件 id_rsa.enc
,原来的文件 id_rsa
就能够删掉了。
这时能够看到终端输出了一段
openssl aes-256-cbc -K $encrypted_xxxxxxxxxxx_key -iv $encrypted_xxxxxxxxxxx_iv
这样格式的信息,这是 travis 用来解密 id_rsa.enc
的 key,先保存起来,后面配置 .travis.yml
会用到它。
为了让 git 默认链接 SSH 还要建立一个 ssh_config
文件。在 .travis
文件夹下建立一个 ssh_config
文件,输入如下内容:
Host github.com User git StrictHostKeyChecking no IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
如今进入 travis CI 设置页面
能够看到刚刚 travis 命令行生成的解密 key
顺便把上面的开关打开
这样,当向项目 push 代码的时候 travis CI 就会根据 .travis.yml
的内容去部署咱们的项目了。
最后就要配置 .travis.yml
。在项目的根目录建立 .travis.yml
文件。
# 配置语言及相应版本 language: node_js node_js: - "4"
# 项目所在分支 branches: only: - master
# 配置环境 before_install: # 替换为刚才生成的解密信息 - openssl aes-256-cbc -K $encrypted_xxxxxxxxxxxx_key -iv $encrypted_xxxxxxxxxxxx_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d # 改变文件权限 - chmod 600 ~/.ssh/id_rsa # 配置 ssh - eval $(ssh-agent) - ssh-add ~/.ssh/id_rsa - cp .travis/ssh_config ~/.ssh/config # 配置 git 替换为本身的信息 - git config --global user.name 'acwong' - git config --global user.email acwong00@gmail.com # 安装依赖 install: - npm install hexo-cli -g - npm install # 部署的命令 script: - npm run deploy # hexo clean && hexo g -d
好了如今只要向项目 push 代码就能够触发部署了,进入https://travis-ci.org就能够看到部署的过程了。
在部署了一遍以后发现,运行 npm install
安装 node 的库时候占据了部署的很大一部分时间,这里有一个技巧,能够将 node_modules
缓存起来,这样能够节省部署的时间。
# .travis.yml 配置 cache: directories: - node_modules
.travis.yml
的完整代码能够看个人 .travis.yml
文件。博客的完整代码能够看这里。
感谢您的阅读,有问题欢迎与我交流。
本文同步于个人我的博客 http://blog.acwong.org/2016/03/20/auto-deploy-hexo-with-travis-CI/