GitHub Actions 教程:定時發送天氣郵件
- 2020 年 1 月 22 日
- 筆記
2019年11月,GitHub 正式開放了 GitHub Actions 這個功能,現在不用申請就能使用。

GitHub Actions 是一個 CI/CD(持續集成/持續部署)工具,但也可用作程式碼運行環境。功能非常強大,能夠玩出許多花樣。
我寫的《GitHub Actions 入門教程》 已經介紹了它的基本用法。本文緊接前一篇教程,給出一個簡單實用的例子:每天定時運行一次腳本,獲取天氣預報,然後發送電子郵件。
完整程式碼可以從 GitHub 倉庫 ruanyf/weather-action 獲取。
第一步:獲取天氣預報
網站 wttr.in 支援命令行請求天氣預報。
$ curl wttr.in
上面的命令會返回,你的 IP 地址所在位置的天氣。

它還允許 URL 裡面指定城市。
$ curl wttr.in/Shanghai
返回的數據可以通過curl
命令的-o
參數,保存成文件,以便後面發送。
$ curl -o result.html wttr.in/Shanghai
wttr. in 允許訂製天氣預報的格式和內容,詳見它的文檔,這裡就不展開了。最後封裝好的腳本weather.sh
,完整程式碼看這裡。
第二步:發送郵件
拿到天氣預報以後,只要放在郵件裡面,發出去就可以了。
我用的是網易 163 郵件的免費發送服務,需要在它的網站上開通,本地的配置請看下一步。
第三步:配置 GitHub Actions
觸發 GitHub Actions 需要在項目倉庫新建一個.github/workflows
子目錄,裡面是 YAML 格式配置文件,文件名可以隨便取。GitHub 只要發現配置文件,就會運行 Actions。
配置文件的第一部分是觸發條件。
name: 'GitHub Actions Weather Bot' on: push: schedule: - cron: '0 21 * * *'
上面程式碼中,name
欄位是配置文件的描述,on
欄位是觸發條件。我們指定兩種情況下觸發,第一種是程式碼 Push 進倉庫,第二種是定時任務,每天在國際標準時間21點(北京時間早上5點)運行。
接著,就是運行流程。
runs-on: ubuntu-latest steps: - name: 'Checkout codes' uses: actions/checkout@v1
上面程式碼中,運行環境指定為最新版的 Ubuntu。流程的第一步是從程式碼倉庫獲取程式碼。
拿到程式碼以後,就可以獲取天氣預報了。
- name: 'Get weather report' run: bash ./weather.sh
上面程式碼中,run
欄位就是所要運行的命令。
最後,發送郵件。
- name: 'Send mail' uses: dawidd6/action-send-mail@master with: serveraddress: smtp.163.com serverport: 465 username: ${{ secrets.MAILUSERNAME }} password: ${{ secrets.MAILPASSWORD }} subject: Shanghai Weather Report body: file://result.html to: [email protected] from: GitHub Actions content_type: text/html
上面程式碼中,發送郵件使用的是一個已經寫好的 action,只要配幾個參數就可以用。參數之中,郵件 SMTP 伺服器的用戶名和密碼,使用的是加密變數,需要在項目的settings/secrets
菜單裡面設置。
完整的配置文件看這裡。更具體的語法解釋可以參考《GitHub Actions 入門教程》。
寫好配置,推送到倉庫以後,就可以每天清早收到一封天氣預報郵件了。在這個基礎上不難擴展,可以定時執行各種腳本(比如每5分鐘檢查一次某個網站是否在線),然後將結果發到指定的渠道,這裡就有一個發到社交媒體 Telegram 的例子。
(完)