-
Notifications
You must be signed in to change notification settings - Fork 5
Deployment
開源專案當然就用 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
#...
既然 brunch
的 build task 都在 TravisCI 上面跑了,那爬蟲腳本當然也要免費利用一下,真是勤勉啊,腦袋在晃動啊 😅
可以參見 .travis/crawl_job.sh
,流程大概如下:
- clone 專案
- 跑
bin
底下的每一隻爬蟲 - 把產生的資料包(如
ntust.json
)打包,傳到data
branch 上
實作部分可以參考 PR#14。
比較特別的是我模仿 gh-pages
儲存 static html 的形式,開了條 data
branch,存放爬蟲抓下 JSON 檔壓縮後的 gzip,這樣即使不寫爬蟲,只要提供符合格式的檔案,就能直接讓本站支援產生該校的行事曆。至於為何會這樣設計?這說來話長啊 😅 。
在 Architecture 的標記觸發 此段落有提到,本專案的 Git branch 對於 TravisCI 來說,可以用來觸發爬蟲任務及部屬任務。但又要如何觸發 TravisCI 的 Build 呢?
有幾種方式:
- 到 TravisCI 設定每天重跑的 cron jobs
- 該 branch 有新的 commit 被提交。GitHub 的 Webhook 會觸發 TravisCI Build
- 戳 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 了 👍