用 Travis CI 自动部署 hexo

前言

hexo 是当下一个比较流行的静态网站生成器,通常用户的使用方法都是将 hexo 项目的文件放到本地,而后编写文章,最后运行部署的命令将网站部署到一些代码托管网站(如:github)。可是,这样的使用方法有时会带来一些不便。node

首先,若是我想在另一台设备上面写博客,必须将整个项目拷贝过来,完成以后要保持两台设备的内容是一致的,否则就会致使部署以后有不一样的地方。git

在这种状况下通常会将整个项目都托管到 github 上面。可是这又会致使另一个问题,每次有改动的时候不但要部署博客,还要提交项目的代码,这又增长了操做的步骤。github

以前也有很多文章用不一样的方法解决上述的问题,例如利用 Dropbox 同步或者利用 Github 的 Webhooks 进行自动部署。这些方法须要付出必定的成本,由于都须要利用到一台 VPS 去完成。而今有一个更加简单并且免费的方法去完成 hexo 的自动部署,就是利用 Travis CI。npm

Travis CI

顾名思义,Travis CI 是一个持续集成(Continuous integration,简称CI)的工具。它能够在公共的 Github 仓库上无偿使用。缓存

构建

在 Github 创建代码库

首先,要在 Github 上创建一个代码仓库,要将本身 hexo 博客 push 到上面。hexo 项目做为运行部署的项目,而后 Github Page 的项目做为部署的目标项目。ruby

开启 Travis CI

第二步,咱们须要有一个 Travis CI 的帐号,直接进入 Travis CI 官网,用本身的 Github 帐号受权登陆便可。bash

而后能够看到当前帐号的全部代码仓库,接下来将博客项目的状态设置为启用。网络

2016-03_travis-on.png

建立 SSH key

第三步,建立一个部署在 Travis CI 上面的 SSH key 利用这个 SSH key 可让 Travis CI 向咱们本身的项目提交代码(也就是将博客部署到 gh-page)。hexo

$ ssh-keygen -t rsa -C "youremail@example.com"

获得 id_rsa.pubid_rsa,而后将有 pub 后缀的配置到 gh-page 的 Deploy key。ssh

2016-03_deploy-key.png

记得要将 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 设置页面

2016-03_travis-setting.png

能够看到刚刚 travis 命令行生成的解密 key

2016-03_environment-variables.png

顺便把上面的开关打开

2016-03_trun-on-travis-setting.png

这样,当向项目 push 代码的时候 travis CI 就会根据 .travis.yml 的内容去部署咱们的项目了。

.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/

相关文章
相关标签/搜索