LoginSignup
0
0

More than 1 year has passed since last update.

Github ActionでCI回してSlack通知する

Last updated at Posted at 2022-07-04

Docker + Laravelの環境を作ったので、Github ActionでCI回してSlack通知するまでサクッと作る

前提

  • Docker + Laravel + MySQL の環境を構築済み
  • ディレクトリ構成
.
├── docker
│   ├── app
│   │   ├── Dockerfile
│   │   └── php.ini
│   └── db
│       ├── Dockerfile
│       └── my.cnf
├── src
│   └── project
└── docker-compose.yml
  • コンテナの起動
docker compose up -d
  • テスト
docker compose exec app php artisan test

手順

GitHub Action

Actionの設定

.github/workflows/ 以下に workflowsファイルを作成

vim .github/workflows/ci.yaml

GitHub Actionsのドキュメント を参考に
mainブランチにpushしたら、
checkoutして、コンテナの起動して、テストを走らせるワークフローを設定。

ci.yaml
name: artisan-test-action
on:
  push:
    branches:
      - main
jobs:
  artisan-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@main

      - name: setup
        run: |
          docker compose up -d
          docker compose exec app composer install
      - name: test
        run: docker compose exec app php artisan test

Action実行確認

変更をmainにpushしてActionが実行されるか
Githubの対象のレポジトリのActionsページを確認する。
スクリーンショット 2022-07-04 23.05.46.png

エラーとなった。

SQLSTATE[HY000] [2002] Connection refused 対応

上記 Actionだと SQLSTATE[HY000] [2002] Connection refused が出てエラーとなってしまう。
DBコンテナが起動完了する前に、テストを走らせようとしていることが原因。

こちらを参考に、Dockerコンテナのヘルスチェックを設定する
https://zenn.dev/snowcait/articles/0cc4a464610e61

docker-compose.yml
  db:
    build:
      context: .
      dockerfile: ./docker/db/Dockerfile
    healthcheck:
      test: ["CMD", "mysqladmin", "ping"]
      interval: 60s
      timeout: 5s
      retries: 1
    ports:
      - 3306:3306

ヘルスチェックが完了するのを待つように
--wait オプションを付ける

ci.yaml
      - name: setup
        run: |
          docker compose up -d --wait

Action正常実行確認

Github Actionによりテストが走り、正常完了することが確認できた。

Slack

Slackアプリの作成

webhookを使うために、Slackアプリの作成
https://api.slack.com/apps

Create an app > From an app manifest
App Manifest の設定画面で以下の内容を入力

display_information:
  name: {name}
settings:
  org_deploy_enabled: false
  socket_mode_enabled: false
  is_hosted: false
  token_rotation_enabled: false
features:
  bot_user:
    display_name: {display_name}
oauth_config:
  scopes:
    bot:
      - incoming-webhook

スクリーンショット 2022-07-01 10.43.30.png

上記画面に遷移するので、
Install to Workspace ボタン押下、
通知を受けるチャンセル選択してインストール完了。

アプリの画面から
Incoming Webhooks > Webhook URL 確認

GitHubの設定

GithubのSecretに確認したWebhook URLを追加
Settings > Secrets > Actions secrets > New repository secret

  • Name: SLACK_WEBHOOK_URL
  • Value: {確認したWebhook URL}

Actionの設定

workflowのファイルに slack通知を追加。
payloadに通知内容を設定する
参考: https://github.com/slackapi/slack-github-action

ci.yaml
      - name: notify slack
        uses: slackapi/slack-github-action@v1.19.0
        with:
          payload: |
            {
              "text": "テスト結果: ${{ job.status }}\n\n${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"
            }
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

Slack通知の動作確認

変更をmainにpushしてSlackに通知が来ること確認できました。
スクリーンショット 2022-07-01 11.29.32.png

実際は、

if: ${{ failure() }}

を付けてエラー時のみ通知にするのが良さそう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0