Masayan tech blog.

  1. ブログ記事一覧>
  2. GitHub ActionsでLaravelプロジェクトのCI・CD環境を構築する

GitHub ActionsでLaravelプロジェクトのCI・CD環境を構築する

公開日

LaravelプロジェクトをGitHub ActionsでCI・CDする記事があまりなかったので、記事にしてみました。

環境

  • windows10
  • Laravel 8.x
  • PHP 8.x
  • node v14.17.4
  • npm 6.14.14
  • VsCode
  • gitbash 2.32.0.1

動作イメージ

リポジトリにymlファイルを含むプロジェクトをpushする

ymlファイルに記述したgithub actionsが作動(ビルドとテストがデプロイの条件になっている)

設定手順

ymlファイルのひな型を作成する

GitHubにLaravelのリモートリポジトリを作成して、ActionsタブからLaravelのワークフローテンプレートの[Set up this workflow]を押す

/.github/workflows配下にワークフローのyamlファイルが作られます

ymlファイルを編集する

最終的なymlファイルは以下の通りです。ポイントは、servicesでmysqlのdockerコンテナを起動している箇所くらいです。初見だとわかりにくいものはコメントに説明を記載しています

laravelのビルドjobが完了したらテストを実行し、その後xserverへデプロイするという手順です。

  • FTP_SERVER:ftpサーバのホスト
  • FTP_USERNAME:ftpサーバのアカウント名
  • FTP_PASSWORD:ftpサーバのパスワード
name: Laravel

on:
  push:
    branches: [ main ]

# 各ジョブは仮想環境の新しいインスタンスで実行されるので環境変数等は独立
jobs:
  laravel-build:
    runs-on: ubuntu-latest
    # ubuntu上でLaravelコンテナを起動して各ステップを実行(ubuntu等のランナーマシン上で直接jobを実行する方法もある)
    container:
      image: php:8.0-fpm
      volumes:
        - /__w/docker-laravel-phpunit-githubaction/docker-laravel-phpunit-githubaction:/var/www
      
    services:
      # このサービスコンテナ名で通信可能
      db-dl:
        image: mysql:latest
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: sample_db
        # dbサービスコンテナのTCPのポート: Dockerホストのポート(デフォルト3306をサービスコンテナのポートに指定する場合はports自体なくても可)
        ports
          - 3306:3310
        # ヘルスチェックをして問題なければ、stepsに進む
        options: >-
            --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
          
    steps:
      # Githubが公開するアクション actions/checkoutを利用すれば、ソースコードをチェックアウトできる
      - uses: actions/checkout@v2
      
      - name: Print php version
        run: |
          php -v
          
      - name: SetUp linux package
        run: |
             apt update && apt install -y git
             apt install -y zlib1g-dev mariadb-client vim libzip-dev
             docker-php-ext-install zip pdo_mysql
          
      # TODO: ハッシュ値の箇所は今後修正...
      - name: SetUp composer
        run: |
             php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
             php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
             php composer-setup.php
             php -r "unlink('composer-setup.php');"
             mv composer.phar /usr/local/bin/composer
           
      - name: SetUp laravel project
        run: |
             composer install
             cp ../.env.example .env
             php artisan key:generate
             php artisan migrate
             
        # working-directoryはrunを実行するディレクトリ(cdしなくて済む)
        working-directory: ./my-app
        
      - name: Run test
        run: vendor/bin/phpunit tests
        working-directory: ./my-app
    
  FTP-Deploy-Action:
    # buildのjobが完了してから開始する
    needs: laravel-build
    name: FTP-Deploy-Action
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - name: FTP-Deploy-Action
        uses: SamKirkland/FTP-Deploy-Action@2.0.0
        env:
          FTP_SERVER: ${{ secrets.FTP_HOST_NAME }}
          FTP_USERNAME: ${{ secrets.FTP_USER_NAME }}
          FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
          LOCAL_DIR: ./my-app
          REMOTE_DIR: /yourdomain

laravel.ymlをcommitすると、ワークフローが実行され、一覧に表示される

まとめ

いかがでしたでしょうか。本記事では、GitHub ActionsでLaravelプロジェクトのCI・CD環境を構築する手順について紹介しています。技術スタックごとにひな型となるymlファイルが用意されており、簡単な編集のみでプロジェクトごとの設定を準備できるためおすすめです。