GitHub Actions 教程:定時傳送天氣郵件

阮一峰發表於2019-12-22

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

(完)

相關文章