不管是 FB 粉專,或是以前無名小站時代的部落格系統,都有提供排程發表文章的功能,讓寫手在靈感特別多的時候,或是行銷人員希望配合特定時程,可以預先寫好未來要發表的文章,並且在時間到的時候自動發表。
問題來了,如果是使用像 Hugo 這種靜態網站產生器,能否實現相同的功能呢?
答案是可以的,官方網站有提到:
How do I schedule posts?
- Set publishDate in the page Front Matter to a date in the future.
- Build and publish at intervals.
就是叫你把日期設定在未來,然後每隔一段時間部署就好。
這篇就是要來講我如何使用 GitHub Action 實現排程發表。
正文
之前的文章有提到我把 blog CD 轉換到 GitHub Action。
GitHub Action 的官方文件提到,可以使用 cronjob 格式來設定排程:
# .github/workflows/deploy.yml
on:
push:
branches:
- master
schedule:
- cron: '0 19 * * *'
# 下略
這邊的時間是 UTC,會在每天 19:00 UTC 跑一次部署,也就是 (19 + 8) % 24 = 台灣時間半夜三點跑 deploy job,重新部署我的 blog。
:誰會想在凌晨三點部署部落格
GitHub Action:歐好棒,三點了
我把兩個條件並列,就會變成 or 關係,任一個條件成立(push on master branch 或是每天的半夜三點),都會 trigger 這個 workflow,有了 CD 是不是很方便呢?
一個需要注意的是,如果你設定的 interval 太短,會自動被拉長到每五分鐘執行一次。
預覽未來文章
因為 Hugo 預設會忽略未來與草稿文章,可以分別用 -F
和 -D
兩個 flag 來讓 Hugo 把這些文章也 build 起來:
$ hugo serve -FD
想要知道有哪些未來文章可以使用 hugo list
:
$ hugo list future
同理,列出草稿:
$ hugo list drafts
本文原創部分採用
創用 CC 姓名標示-非商業性-禁止改作 4.0 國際授權條款
授權。