---
layout: post
title: 用 Travis CI 自動部署 Jekyll 部落格到 GitHub Pages
published: true
date: 2017-08-01
---
# 用 Travis CI 自動部署 Jekyll 部落格到 GitHub Pages
弄完 [ics-scheduler](https://github.com/Yukaii/ics-scheduler) 專案後沒多久就開了 [Travis Auto Build 的 issue](https://github.com/Yukaii/Blog/issues/2) 放置 Play。可惜我實在太懶,而現階段的部屬流程也很簡單: 建構、提交再推送。建構跑 `jekyll build` 指令,包成 bash script 更是秒秒鐘;提交完,fish 又有基於歷史的指令自動補全,推送的 `git subtree` 指令打到一半,後面的自動補完出來按個 enter 就好了。
自動化永遠不嫌多,把建構出的結果一起加到進版控系統追蹤也不夠優雅的,每次新增一篇文章 diff 又一大堆。正巧今天早上收信的時候,看到以前關注的 GitHub 議題:「[將 jekyll-assets 整合到 github pages 官方 gem](https://github.com/github/pages-gem/issues/189#issuecomment-319070628)」有更新,留言提到 [Travis 現在也有 GitHub Pages 自動部屬的預設配置](https://docs.travis-ci.com/user/deployment/pages)了。機不可失,官方有支援,設定就簡單。來設定自動部屬吧 XD
## 設置
交互參照 [Travis CI 的文件](https://docs.travis-ci.com/user/deployment/pages)及 [Jekyll 的文件](https://jekyllrb.com/docs/continuous-integration/travis-ci/),最後的 `.travis.yml` 長這樣:
```yaml= [1,5,7-8]
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 這個腳本長這樣:
```bash
#!/usr/bin/env bash
set -e
JEKYLL_ENV=production bundle exec jekyll build
```
就是 jekyll build 指令啦。
### `deploy`
最後 deploy 的部分,因為我部屬到 GitHub Pages 的 使用者頁面(User Site, **username**.github.io),所以 `repo` 和 `target_branch` 要額外設定。其它就照著 [Travis 文件](https://docs.travis-ci.com/user/deployment/pages)預設填就好了。
Jekyll 建制完的檔案預設會在 `_site` 目錄底下,所以 `local_dir` 也要設為 `_site`
## `No such file or directory @ rb_sysopen` 錯誤
在 Travis CI 上面跑 Jekyll 就會炸掉 XDD 就照著 [jekyll/jekyll#2938]( https://github.com/jekyll/jekyll/issues/2938),在 `_config.yml` 的 `exclude` 加入 `vendor` 解掉。
## 成果
以後只要用線上的 Markdown 編輯器寫完文章(比如 [HackMD](https://hackmd.io) ),再貼到 GitHub 線上 commit,部落格就能自動更新啦。也可以用 [prose.io](http://prose.io) 這類的線上 GitHub 內容管理工具,編輯提交一手包,還有草稿可以用 :p
Travis 建構的缺點是 CI 服務裝完套件還是得花個幾分鐘,沒有以往那麼迅速。寫個文章而已嘛,還是可以忍受的,geek 到心理愉悅最重要(?)
(完)