🔖
GitHub Actionsの処理結果をメールで通知する: Gmailの使用
概要
GitHub Actionsの処理結果をメールで通知する機会がありましたので、その備忘録です。
今回はGmailを使います。以下が参考になりました。
Gmailの設定
以下に記載があります。2段階認証を有効にして、アプリパスワードを作成します。
アプリパスワードの設定例は以下です。
ローカルでの動作確認
act
を使って、ローカル環境でGitHub Actionsを実行します。
あるリポジトリで以下のようなファイルを作成します。
.github/workflows/notify.yml
name: Notification Workflow
on: [push]
jobs:
send-mail:
runs-on: ubuntu-latest
steps:
- name: Send mail
if: success() # この行はデプロイが成功した場合にのみメールを送信するようにします
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{secrets.MAIL_USERNAME}}
password: ${{secrets.MAIL_PASSWORD}}
subject: Deployment Completed - ${{ github.repository }}
to: ${{secrets.MAIL_TO}}
from: ${{ secrets.MAIL_FROM }}
body: |
Hello,
The deployment process for the repository ${{ github.repository }} has been successfully completed.
Commit: ${{ github.sha }}
Commit link: https://github.com/${{ github.repository }}/commit/${{ github.sha }}
Branch: ${{ github.ref }}
Best regards,
${{ secrets.MAIL_FROM }}
以下のようなコマンドでシークレットを使うことができました。
act push --secret-file .secrets
そのため、以下のようなファイルを用意します。
.secrets
MAIL_USERNAME=xxx@gmail.com
MAIL_PASSWORD=aaaa bbbb cccc dddd
MAIL_TO=abc@example.org,def@example.org
MAIL_FROM=送信者名
結果、以下のようにメールを送信することができました。
% act push --secret-file .secrets
WARN ⚠ You are using Apple M-series chip and you have not specified container architecture, you might encounter issues while running act. If so, try running it with '--container-architecture linux/amd64'. ⚠
[Notification Workflow/send-mail] 🚀 Start image=catthehacker/ubuntu:act-latest
[Notification Workflow/send-mail] 🐳 docker pull image=catthehacker/ubuntu:act-latest platform= username= forcePull=true
[Notification Workflow/send-mail] using DockerAuthConfig authentication for docker pull
[Notification Workflow/send-mail] 🐳 docker create image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[]
[Notification Workflow/send-mail] 🐳 docker run image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[]
[Notification Workflow/send-mail] ☁ git clone 'https://github.com/dawidd6/action-send-mail' # ref=v3
[Notification Workflow/send-mail] ⭐ Run Main Send mail
[Notification Workflow/send-mail] 🐳 docker cp src=/xxx/.cache/act/dawidd6-action-send-mail@v3/ dst=/var/run/act/actions/dawidd6-action-send-mail@v3/
[Notification Workflow/send-mail] 🐳 docker exec cmd=[node /var/run/act/actions/dawidd6-action-send-mail@v3/main.js] user= workdir=
[Notification Workflow/send-mail] ✅ Success - Main Send mail
[Notification Workflow/send-mail] 🏁 Job succeeded
Deployment Completed - xxx
xxx <xxx@gmail.com> 2024年1月19日 19:52
To: xxx
Hello,
The deployment process for the repository xxx has been successfully completed.
Commit: xxx
Commit link: https://github.com/nakamura196/ge_editor/commit/xxx
Branch: refs/heads/main
Best regards,
失敗時の挙動確認
失敗時の挙動確認にあたっては、以下のようにrun: exit 1
を使うとよいようでした。
.github/workflows/notify.yml
name: Notification Workflow
on: [push]
jobs:
send-mail:
runs-on: ubuntu-latest
steps:
- name: Intentional Fail
run: exit 1
- name: Send mail
if: success() # この行はデプロイが成功した場合にのみメールを送信するようにします
(省略)
- name: Send Failure Mail
if: failure()
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: Deployment Failed - ${{ github.repository }}
to: ${{ secrets.MAIL_TO }}
from: ${{ secrets.MAIL_FROM }} # <user@example.com>
body: |
Hello,
There was a failure in the deployment process for the repository ${{ github.repository }}.
Commit: ${{ github.sha }}
Commit link: https://github.com/${{ github.repository }}/commit/${{ github.sha }}
Branch: ${{ github.ref }}
Please check the GitHub Actions logs for more details.
Best regards,
${{ secrets.MAIL_FROM }}
シークレットの登録
ローカル環境での検証が終わったら、変更内容をGitHubにpushします。その際、GitHub CLIのgh
コマンドを使って、以下のようにシークレットを登録しました。
gh secret set MAIL_USERNAME --body "xxx@gmail.com"
gh secret set MAIL_PASSWORD --body "aaaa bbbb cccc dddd"
gh secret set MAIL_TO --body "abc@example.org,def@example.org"
gh secret set MAIL_FROM --body "送信者名"
まとめ
Slackなどに通知するほうが一般的かと思いますが、参考になりましたら幸いです。
Discussion