這兩天從新搗鼓了一下 Hexo 博客, 用 Travis CI 作了自動部署。node
作的過程當中查看了不少資料,基本上都是用在 CI 中用 Git、Hexo deploy 作的部署,還要加密 ssh-key 什麼的。我基於這作了一遍,對於 Travis CI 的文件加密等等,有了更深的理解。這中間的配置,我以爲至關的麻煩。可是當我從新翻閱 Travis CI 的文檔的時候,我發現其實 Travis CI 能夠自動靜態文件部署到 GitHub Pages。只須要很是簡單的配置,就能夠了。git
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN # travis-ci.org 控制面板上設置
on:
branch: master複製代碼
這是最基本的配置。github
skip_cleanup
的值必須爲 true
否則會把你在構建時生成的文件給刪除掉。hexo
on: branch: master
的意思是當 master 分支有變化時,才執行這個部署。更多條件設置請參考 Deployment 。ssh
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 了,就能夠對你的公開倉庫進行任意修改。ide
接下來咱們就要對這個基本配置作個修改,添加更多的設置來符合咱們的需求。ui
local_dir
指的是是將要推送到 GitHub Pages 的目錄,默認的值爲當前目錄。咱們都知道 hexo generate
生成的目錄是 public
,因此咱們要將 local_dir
的值設置爲 public
加密
repo
指的是 GitHub Pages 所在的代碼倉庫,默認值爲當前倉庫。spa
target_branch
指的是 GitHub Pages 所使用的分支,默認爲 gh-pages
。code
這裏有個問題,就是 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 就會自動構建和部署了。