Wercker 自動化部署 Hugo 網站

wercker.yaml 最小化設置的嘗試

架好這個網站後的第一篇文章提到,我是用 Wercker 做自動化部署。

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 生成的,我覺得這樣叫比較合理而已。