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 的例子

(完)