這兩天重新搗鼓了一下 Hexo 部落格, 用 Travis CI 做了自動部署。
做的過程中檢視了很多資料,基本上都是用在 CI 中用 Git、Hexo deploy 做的部署,還要加密 ssh-key 什麼的。我基於這做了一遍,對於 Travis CI 的檔案加密等等,有了更深的理解。這中間的配置,我覺得相當的麻煩。但是當我重新翻閱 Travis CI 的文件的時候,我發現其實 Travis CI 可以自動靜態檔案部署到 GitHub Pages。只需要非常簡單的配置,就可以了。
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN # travis-ci.org 控制皮膚上設定
on:
branch: master複製程式碼
這是最基本的配置。
skip_cleanup
的值必須為 true
不然會把你在構建時生成的檔案給刪除掉。
on: branch: master
的意思是當 master 分支有變化時,才執行這個部署。更多條件設定請參考 Deployment 。
GITHUB_TOKEN
的生成請參考 Creating a personal access token for the command line。 如果你的倉庫是公開的,那麼在給許可權的時候只需要給 public_repo
, 如果你的倉庫是私有的那就要給 repo
許可權,儘量給更少的許可權。然後在控制檯設定環境變數 GITHUB_TOKEN
值為剛才生成的 token。在新增環境變數的時候有個開關 Display value in build log 千萬不要開啟,不然別人就可以在 CI 的 log 裡面看到你的 token 了,就可以對你的公開倉庫進行任意修改。
接下來我們就要對這個基本配置做個修改,新增更多的設定來符合我們的需求。
local_dir
指的是是將要推送到 GitHub Pages 的目錄,預設的值為當前目錄。我們都知道 hexo generate
生成的目錄是 public
,所以我們要將 local_dir
的值設定為 public
repo
指的是 GitHub Pages 所在的程式碼倉庫,預設值為當前倉庫。
target_branch
指的是 GitHub Pages 所使用的分支,預設為 gh-pages
。
這裡有個問題,就是 Travis CI 使用 git push --force
來進行推送的,所以會清空歷史,所以一定要保證你的 repo
和 target_branch
設定的正確。原本我是做了保留歷史的配置的,改成這樣用 Travis CI deploy 來做的話,就沒有辦法保留歷史了。但是轉念一想,我只要保留 blog 倉庫的歷史就好啦,這些只是生成的程式碼,所以我認為使用 Travis CI 這樣的設定是合理的。
一般來說新增這三個配置就可以了。更多配置請參考 GitHub Pages Deployment
下面是我的配置資訊
language: node_js #指定環境為 Node.js
node_js:
- '7' #指定 Node.js 的版本為 7
before_install:
- export TZ='Asia/Shanghai' #設定時區 非必須
script:
- hexo generate #生成部落格
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN
local_dir: public
repo: zhangweijie-cn/zhangweijie-cn.github.io
target_branch: master
on:
branch: master複製程式碼
Travis CI 會自動幫我們安裝依賴,所以這些我們都不需要考慮。
當我們給 blog 所在倉庫 master 分支推送文章以後,GitHub Pages 就會自動構建和部署了。