GitHub Actions에서 Laravel을 테스트하기 위해 MySQL을 사용합니다.

GitHub Actions에서 Laravel 테스트하는데 MySQL을 이용하는데 빠졌기 때문에 메모.

전제



이 기사 에서 사용한 Laravel 프로젝트와 GitHub Actions 워크플로우를 사용자 정의합니다.

절차



워크플로 작성



다음과 같이 워크플로를 만듭니다.
name: Laravel

on:
  push:
    branches:
    - main
    - feature/**
  pull_request:
    branches:
    - develop
    - main

jobs:
  laravel-tests:

    runs-on: ubuntu-latest

    services:
      mysql:
        image: mysql:5.7
        ports:
          - 3306:3306
        env:
          MYSQL_ROOT_PASSWORD:
          MYSQL_DATABASE: hoge_app
          MYSQL_USER: root
          MYSQL_PASSWORD:
          MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10

    steps:
    - uses: actions/checkout@v2
    - name: cache vendor
      id: cache
      uses: actions/cache@v1
      with:
        path: ./vendor
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-composer-
    - name: composer install
      if: steps.cache.outputs.cache-hit != 'true'
      run: composer install -n --prefer-dist
    - name: copy .env
      run: cp .env.example .env
    - name: generate key
      run: php artisan key:generate
    - name: migrate
      run: php artisan migrate
      env:
        DB_HOST: 127.0.0.1
    - name: Execute tests (Unit and Feature tests) via PHPUnit
      env:
        DB_HOST: 127.0.0.1
      run: vendor/bin/phpunit

MySQL 설정


services 에서 mysql 를 정의합니다. 환경 변수는 .env 의 내용을 반영할 수 없으므로 그대로 지정합니다.
GitHub의 Secrets를 이용하면 비밀번호는 그곳에서 지정할 수도 있지만 이번은 프로젝트의 .env.example의 내용과 동일하게 하고 있습니다.

GitHub의 Secrets를 활용하여 GitHub Actions에서 안전하게 기밀 정보를 처리하십시오 - Qiita
htps : // 이 m /로 ゔ ぉ ぺ ぺ ききかい / ms / 60b209c065f076d 또는 7 아 1
options 에서 MySQL이 시작되었는지 여부를 확인합니다.
    services:
      mysql:
        image: mysql:5.7
        ports:
          - 3306:3306
        env:
          MYSQL_ROOT_PASSWORD:
          MYSQL_DATABASE: hoge_app
          MYSQL_USER: root
          MYSQL_PASSWORD:
          MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10

마이그레이션 및 테스트


env 에서 DB_HOST 를 지정합니다. 개발 환경이라면 .env.example 에서 mysql 와 Docker 컨테이너의 이름을 지정하고 있지만 그렇다면 GitHub에서 연결할 수 없습니다.
    - name: migrate
      run: php artisan migrate
      env:
        DB_HOST: 127.0.0.1
    - name: Execute tests (Unit and Feature tests) via PHPUnit
      env:
        DB_HOST: 127.0.0.1
      run: vendor/bin/phpunit

로컬에서 동작 확인



이 도구를 이용하면 로컬 환경에서 동작을 확인할 수 있습니다.

nektos/act: Run your GitHub Actions locally 🚀
htps : // 기주 b. 코 m / 네 k와 s / 아 ct # 인 s 치치 온

1점 흠집이 있고 GitHub Actions가 제공하는 서비스 컨테이너가 nektos/act에서는 현재 미실장이 되기 때문에 로컬과 GitHub 사이에 차이가 있습니다.

서비스 컨테이너 정보 - GitHub Docs
htps : // / cs. 기주 b. 코 m / 자 / 아 c 치온 s / 구이 s / 아보 t-se r

Github actions - Services fails locally · Issue #247 · nektos/act
htps : // 기주 b. 코 m / 네 k와 s / 아 ct / 모두 s / 173

다만, 워크플로우로 DB_HOST: 127.0.0.1 라고 지정하는 것으로, 개발 환경의 MySQL에 접속할 수 있으므로, 개발 환경의 Docker 컨테이너를 기동한 채로, act 커멘드를 실행해 주면 로컬 환경에서도 워크플로우를 실행할 수 있습니다 .
> cd <プロジェクトのディレクトリ>
> ./vendor/bin/sail up -d
> act -P ubuntu-latest=nektos/act-environments-ubuntu:18.04


실행 결과를 보면, Run migrate 는 실행되고 있지만, 마이그레이션 자체는 실행되고 있지 않은 것을 확인할 수 있습니다. (개발 환경에서 마이그레이션이 완료된 경우)

개발 환경의 Docker 컨테이너를 떨어뜨리면 워크플로가 오류가 되는지 확인할 수 있습니다.
> ./vendor/bin/sail down
> act -P ubuntu-latest=nektos/act-environments-ubuntu:18.04



GitHub에서 동작 확인



워크플로를 GitHub 리포지토리로 푸시하여 워크플로가 작동하는지 확인합니다.
> git branch feature/use-mysql-on-github-actions
> git checkout feature/use-mysql-on-github-actions
> git add .github/workflows/unittest.yml
> git commit -m 'Fix: GitHub ActionsのワークフローでMySQLを利用するようにしました。'
> git push git push --set-upstream origin feature/use-mysql-on-github-actions

GitHub에서 확인하면 오류없이 테스트를 실행할 수 있는지 확인할 수 있습니다.




했어.

참고



GitHub Actions를 사용하여 Laravel 테스트를 자동화해 보았습니다. - Qiita
htps : // 코 m / 카이 _ 코 / ms / 4f850f7308 에 b0d3 에 0b48

GitHub의 Secrets를 활용하여 GitHub Actions에서 안전하게 기밀 정보를 처리하십시오 - Qiita
htps : // 이 m /로 ゔ ぉ ぺ ぺ ききかい / ms / 60b209c065f076d 또는 7 아 1

nektos/act: Run your GitHub Actions locally 🚀
htps : // 기주 b. 코 m / 네 k와 s / 아 ct # 인 s 치치 온

Number of ways to setup database in Github actions | by Darren Liew | Medium htps : // 메이 m. 이 m / @ daden / mbe r-f-y ys--sets p-dabase-in-gi-bu-b-c-chion s-2cd48df9

GitHub Actions를 사용하여 Laravel 응용 프로그램을 CI/CD로 만들기 | SEEDS Creators 'Blog | Co., Ltd.

Mysql service never comes up healthy in action - Code to Cloud/GitHub Actions - GitHub Support Community
htps //w w. 그래도 ds-std. 이. jp/b㎉g/c 후 rs/2020-08-19-233031/

좋은 웹페이지 즐겨찾기