Skip to content
This repository has been archived by the owner on Jan 11, 2023. It is now read-only.

Deployment

Yukai Huang edited this page Aug 6, 2017 · 3 revisions

Continuous Deployment with TravisCI

開源專案當然就用 TravisCI 合適 😆 ,設定完 .travis.yml 基本專案環境後,還是得寫點 shell script。

可以參見 PR#2 以及 Issue#1 一些參考資料,簡單來說分成以下幾個步驟:

from https://github.com/Yukaii/ics-scheduler/pull/2#issue-176626991

每次 build 要做:

  • 爬下最新的 json
  • 跑 brunch build task
  • 把 public 資料夾推到 gh-pages branch

後續也做了一點修正,不過跟 PR 當時差不多。最新版請參見 .travis/deploy.sh

附帶一題,在 TravisCI 上我們可以指定建置的 git branch 是哪條。比如說,只有打上 production branch 的 commit,我們才讓 TravisCI 在建置完成後,推到 gh-pages branch。在 build script 這樣寫:

SOURCE_BRANCH="production"
TARGET_BRANCH="gh-pages"
OUTPUT_FOLDER="public"

#...
#...

# Pull requests and commits to other branches shouldn't try to deploy, just build to verify
if [ "$TRAVIS_PULL_REQUEST" != "false" -o "$TRAVIS_BRANCH" != "$SOURCE_BRANCH" ]; then
    echo "Skipping deploy; just doing a build."
    # do compile things...
    exit 0
fi

#...

Crawler Auto Run with TravisCI

既然 brunch 的 build task 都在 TravisCI 上面跑了,那爬蟲腳本當然也要免費利用一下,真是勤勉啊,腦袋在晃動啊 😅

可以參見 .travis/crawl_job.sh,流程大概如下:

  1. clone 專案
  2. bin 底下的每一隻爬蟲
  3. 把產生的資料包(如 ntust.json)打包,傳到 data branch 上

實作部分可以參考 PR#14

比較特別的是我模仿 gh-pages 儲存 static html 的形式,開了條 data branch,存放爬蟲抓下 JSON 檔壓縮後的 gzip,這樣即使不寫爬蟲,只要提供符合格式的檔案,就能直接讓本站支援產生該校的行事曆。至於為何會這樣設計?這說來話長啊 😅 。

TravisCI Build Auto Trigger

Architecture 的標記觸發 此段落有提到,本專案的 Git branch 對於 TravisCI 來說,可以用來觸發爬蟲任務及部屬任務。但又要如何觸發 TravisCI 的 Build 呢?

有幾種方式:

  1. 到 TravisCI 設定每天重跑的 cron jobs
  2. 該 branch 有新的 commit 被提交。GitHub 的 Webhook 會觸發 TravisCI Build
  3. 戳 TravisCI 的 HTTP API 啟動 Build Task

以第三種方法為例,如果要每天重跑 data-udpates 這條 branch,可以撰寫以下腳本:

# data-updates-build.sh
body='{
"request": {
  "branch":"data-updates"
}}'

curl -s -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Travis-API-Version: 3" \
  -H "Authorization: token YOUR_TRAVIS_TOKEN_HERE" \
  -d "$body" \
  https://api.travis-ci.org/repo/Yukaii%2Fics-scheduler/requests

然後編輯 crontab:

$ crontab -e
# 每週一四六 12 點跑
0 12 * * 1,4,6 /path/to/scripts/cron_jobs/data-updates-build.sh >/dev/null 2>&1

crontab 的寫法可以用 crontab.guru 這個網站校驗。

這樣你的主機就會定時戳 TravisCI API 觸發 Build Task 了 👍

Clone this wiki locally