弄完 ics-scheduler 專案後沒多久就開了 Travis Auto Build 的 issue 放置 Play。可惜我實在太懶,而現階段的部屬流程也很簡單: 建構、提交再推送。建構跑 jekyll build 指令,包成 bash script 更是秒秒鐘;提交完,fish 又有基於歷史的指令自動補全,推送的 git subtree 指令打到一半,後面的自動補完出來按個 enter 就好了。

自動化永遠不嫌多,把建構出的結果一起加到進版控系統追蹤也不夠優雅的,每次新增一篇文章 diff 又一大堆。正巧今天早上收信的時候,看到以前關注的 GitHub 議題:「將 jekyll-assets 整合到 github pages 官方 gem」有更新,留言提到 Travis 現在也有 GitHub Pages 自動部屬的預設配置了。機不可失,官方有支援,設定就簡單。來設定自動部屬吧 XD

設置

交互參照 Travis CI 的文件Jekyll 的文件,最後的 .travis.yml 長這樣:

language: ruby
rvm:
- 2.3.3
 
script: ./bin/cibuild
 
before_script:
 - chmod +x ./bin/cibuild
 
deploy:
  provider: pages
  skip_cleanup: true
  github_token: $GITHUB_TOKEN
  repo: Yukaii/yukaii.github.io
  local_dir: _site
  target_branch: master
  on:
    branch: master

分三段來看。

language: ruby

因為用的是 Jekyll,所以該有的 ruby 環境也要設定。Travis clone repo 下來之後便會自動 bundle install 裝完套件。

script & before_script

這部份就是建制網站,cibuild 這個腳本長這樣:

#!/usr/bin/env bash
 
set -e
 
JEKYLL_ENV=production bundle exec jekyll build

就是 jekyll build 指令啦。

deploy

最後 deploy 的部分,因為我部屬到 GitHub Pages 的 使用者頁面(User Site, username.github.io),所以 repotarget_branch 要額外設定。其它就照著 Travis 文件預設填就好了。

Jekyll 建制完的檔案預設會在 _site 目錄底下,所以 local_dir 也要設為 _site

No such file or directory @ rb_sysopen 錯誤

在 Travis CI 上面跑 Jekyll 就會炸掉 XDD 就照著 jekyll/jekyll#2938,在 _config.ymlexclude 加入 vendor 解掉。

成果

以後只要用線上的 Markdown 編輯器寫完文章(比如 HackMD ),再貼到 GitHub 線上 commit,部落格就能自動更新啦。也可以用 prose.io 這類的線上 GitHub 內容管理工具,編輯提交一手包,還有草稿可以用 :p

Travis 建構的缺點是 CI 服務裝完套件還是得花個幾分鐘,沒有以往那麼迅速。寫個文章而已嘛,還是可以忍受的,geek 到心理愉悅最重要(?)

(完)