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

相關文章
相關標籤/搜索