架好這個網站後的第一篇文章提到,我是用 Wercker 做自動化部署。
其實相關的說明很多,Hugo 官方說明也很詳細,看得懂英文的可以參考,看不懂的看這篇簡中的也行。
不過這篇特別談的是 wercker.yaml
到底要寫什麼?
上面的官方說明附上了這個 script:
box: debian
build:
steps:
- arjen/hugo-build:
version: "0.17"
theme: herring-cove
flags: --buildDrafts=true
deploy:
steps:
- install-packages:
packages: git ssh-client
- lukevivier/gh-pages@0.2.1:
token: $GIT_TOKEN
domain: hugo-wercker.ig.nore.me
basedir: public
好像複製貼上改一改就可以了,不過遇到了一些問題。畢竟上面那段說明寫的時候,hugo 才 0.17 版,現在這篇文章是用 0.57 版在 build 的,雖然還是一堆 bug 讓我有點想跳槽…。
Git Submodule 設置
首先,我的 theme 是 blackburn,不過其實我有用 submodule 放在我 local 端的 theme 資料夾裡(而且被我改了不少…):
(結果用了 Markdown 還是想插入 gist XDDDDD)
所以 theme
那行可以拔掉。
另外,因為使用了 git submodule,根據 Wercker 官方的說明,必須要手動把 submodule 給 clone
下來(其實也是原本 git clone
的特性,並不會自動幫導入 submodule),要在 wercker.yml
把這一步寫入:
- script:
name: install git
code: |
apt-get update
apt-get install git -y
- add-ssh-key:
keyname: KEY_NAME
host: github.com
- add-to-known_hosts:
hostname: github.com
fingerprint: 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
- script:
name: initialize git submodules
code: |
git submodule update --init --recursive
不過在 KKStream 搞過一些簡單的 CI/CD 之後(你看在 KKStream 什麼都可以學,還不過來當 intern 嗎 XD),回來看到自己的 wercker.yml
就覺得好像不需要這麼多步驟,真的需要再加一次 ssh key 嗎?還要加一次 known_hosts 嗎?不然一開始 build 的時候,怎麼把檔案從我的 private repo 拉下來的?所以就嘗試刪掉…就成功了 XD
順便把 install git
那步,用 Wercker 自帶的 install-packages
取代。
- install-packages:
packages: git
於是就變成這樣了:
至於為什麼 $GIT_TOKEN
變成 $GITHUB_TOKEN
?那就是個環境變數名字,存在 Environment 那格裡面的,所有 pipeline 共用的變數。因為 TOKEN 是在 GitHub 生成的,我覺得這樣叫比較合理而已。