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/