LoginSignup
4
2

More than 3 years have passed since last update.

Github ActionsでLaravelのテストとECRへpushするまで

Last updated at Posted at 2019-12-02

目標

Laravelで作成したアプリに対して、Github Actionsを利用してテストの実行及びECRへのイメージのpushまで行います。

前提条件

  • Laravelアプリケーション作成済み
  • Laravel実行用イメージ作成済み
  • ECRのリポジトリ作成済み

Github Actionsについて

いわゆるCI / CDです。細かい部分は既に多くご紹介されているので省略いたします。
公式

Public Repositoryだと無料みたいですね。
PrivateだとFreeプランでは1ヶ月2000分までだとか。

Laravelのテスト実行

こちらは既にテンプレートが用意されており、変更するところといえば実行タイミングくらいでしょうか。MySQLやRedisが欲しい場合は別途追加する必要があります。
今回はテストなのでDBもsqliteで、実行タイミングもmasterへのpushという指定をしていますが、実際はかなり柔軟に設定できます。
リファレンス

name: Laravel

on:
  push:
    branches:
    - master

jobs:
  laravel-tests:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Copy .env
      run: php -r "file_exists('.env') || copy('.env.example', '.env');"
    - name: Install Dependencies
      run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
    - name: Generate key
      run: php artisan key:generate
    - name: Create Database
      run: |
        mkdir -p database
        touch database/search.sqlite
    - name: Execute tests (Unit and Feature tests) via PHPUnit
      env:
        DB_CONNECTION: sqlite
        DB_DATABASE: database/database.sqlite
      run: vendor/bin/phpunit

masterへのpushが完了すると、

Screen Shot 2019-12-02 at 15.08.02.png

という感じで結果を見ることができます。
特にテストも追加していないデフォルトの状態でテストを実行した場合、実行時間は合計35秒でした。このあと何回か実施したところ50秒くらいのもあったので、そんくらいのブレでおさまる感じみたいですね。

ECRへのpush

テストだけで終わるのもさみしいので、ECRへイメージをpushするところまでやりたいと思います。
こちらも既にテンプレートが用意されているというか、もっといえばECSへのデプロイまでやってくれるテンプレートがありましたので、まずはそのうちのECRへのイメージのpushのところを使ってやってみようと思います。


on:
  push:
    branches:
      - master

name: Deploy to Amazon ECS

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v1

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ap-northeast-1

    - name: Login to Amazon ECR
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1

    - name: Build, tag, and push image to Amazon ECR
      id: build-image
      env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        ECR_REPOSITORY: sample_repository
        IMAGE_TAG: ${{ github.sha }}
      run: |
        docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
        docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
        echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

変更するところはリポジトリ名です。今回は「sample_repository」というリポジトリ名にしているので、こちらを変更しています。

        ECR_REPOSITORY: sample_repository

また、「${{ secrets.AWS_ACCESS_KEY_ID }}」という形で利用できる変数は以下を参考に設定してみてください。今回設定するのは以下2点です。

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

登録手順

実行すると以下のようになるかなと思います。
Screen Shot 2019-12-02 at 15.27.46.png

終わりに

今回の設定のままだとイメージのタグが${{ github.sha }}で設定されてしまうので、ブランチのタグから取得するような形にするときれいにイメージを保存できそうですね。

4
2
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
4
2