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 的例子。
(完)