Laravel을 CircleCI 2.0으로 자동 테스트하고 heroku에 자동 배포

소개



포트폴리오를 Laravel에서 만들었을 때, 테스트부터 배포까지를 CircleCI로 자동화했기 때문에 정리해 보았습니다.

전제 조건


  • heroku 계정을 만들고 Heroku CLI를 설치했습니다
  • heroku config:set에서 DB를 설정하고 Laravel 앱이 이미 heroku에 배포 할 수있는 상태입니다.
  • CircleCI와 GitHub를 연계

  • 배포까지의 흐름


  • GitHub의 원격 저장소에 push
  • 푸시를 후크로 CircleCI로 마이그레이션 및 시딩을 실행
  • 테스트 데이터가 들어있는 상태에서 테스트 실행
  • 문제가 없으면 heroku에 자동 배포

  • CircleCI용 데이터베이스 설정 추가



    사용할 Docker 이미지 (htps : // 후 b. 도 c r. 이 m/r/시 rc㎇시/mysql/)
    의 설정값을 Laravel config/database.php
    config/database.php
    'connections' => [
            'circle_test' => [
                'driver' => 'mysql',
                'host' => '127.0.0.1',
                'port' => '3306',
                'database' => 'circle_test',
                'username' => 'root',
                'password' => '',
                'charset' => 'utf8mb4',
                'collation' => 'utf8mb4_unicode_ci',
                'prefix' => '',
                'strict' => true,
                'engine' => null,
            ]
     ]
    

    .circleci/config.yml 만들기



    Larevel 프로젝트의 루트 디렉토리에.circleci/config.yml 만들기
    Laravel-project
      ├ .circleci
      │   └config.yml
      ├ app
      ├ bootstrap
      ├ config
      ├ database
      ・
      ・
      ・
    

    CircleCI에서 프로젝트를 만들 때 나오는 추천 설정을 기반으로
    일부 변경했습니다.

    .circleci/config.yml
    # PHP CircleCI 2.0 configuration file
    #
    # Check https://circleci.com/docs/2.0/language-php/ for more details
    #
    version: 2
    jobs:
      build:
        docker:
          # specify the version you desire here
          - image: circleci/php:7.2
          - image: circleci/mysql:5.7
    
          # Specify service dependencies here if necessary
          # CircleCI maintains a library of pre-built images
          # documented at https://circleci.com/docs/2.0/circleci-images/
          # - image: circleci/mysql:9.4
    
        environment:
          - APP_DEBUG: true
          - APP_ENV: testing
          - APP_KEY: APP_KEYを入れてください
          - DB_CONNECTION: circle_test
          - MYSQL_ALLOW_EMPTY_PASSWORD: true
    
        working_directory: ~/repo
    
        steps:
          - checkout
    
          # Install PHP Extension
          - run: sudo docker-php-ext-install pdo_mysql
    
          # Download and cache dependencies
          - restore_cache:
              keys:
              - v1-dependencies-{{ checksum "composer.json" }}
              # fallback to using the latest cache if no exact match is found
              - v1-dependencies-
    
          - run: composer install -n --prefer-dist
    
          - save_cache:
              paths:
                - ./vendor
              key: v1-dependencies-{{ checksum "composer.json" }}
    
          # run seeding
          - run: php artisan migrate
          - run: php artisan db:seed
    
          # run tests!
          - run: php ./vendor/bin/phpunit
    
          #heroku deploy
          - deploy:
              name: Deploy Master to Heroku
              command: |
                if [ "${CIRCLE_BRANCH}" == "master" ]; then
                  git push https://heroku:[email protected]/$HEROKU_APP_NAME.git master
                fi
    

    변경 부분



    Docker 이미지 지정



    DB에 MySQL을 사용하기 위해 MySQL Doker 이미지 지정
    docker:
      - image: circleci/php:7.2
      - image: circleci/mysql:5.7
    

    환경 변수 지정


    environment:
      - APP_DEBUG: true
      - APP_ENV: testing
      - APP_KEY: APP_KEYを入れてください
      - DB_CONNECTION: circle_test
      - MYSQL_ALLOW_EMPTY_PASSWORD: true
    

    PDO_MYSQL 설치



    DB를 사용한 테스트를 위해 PDO_MYSQL 설치
    # Install PHP Extension
      - run: sudo docker-php-ext-install pdo_mysql
    

    마이그레이션 및 시딩


    # run seeding
        - run: php artisan migrate
        - run: php artisan db:seed
    

    heroku에 배포


    #heroku deploy
          - deploy:
              name: Deploy Master to Heroku
              command: |
                if [ "${CIRCLE_BRANCH}" == "master" ]; then
                  git push https://heroku:[email protected]/$HEROKU_APP_NAME.git master
                fi
    

    HEROKU_API_KEY 및 HEROKU_APP_NAME 설정



    heroku에 로그인하고 Account Settings에서 API Key 복사


    CircleCI에서 프로젝트 이름 설정에 API Key를 붙여 넣기


    HEROKU_APP_NAME님이 heroku의 프로젝트 이름 입력

    GitHub에 push


    cd Laravel-project
    git init
    git remote add origin [GitHubで作成したリポジトリのURL]
    git remote -v
    でリモートリポジトリを設定
    
    git add .
    git commit -m "CircleCI"
    git push origin master
    

    실행 결과



    CircleCI에 로그인하고 프로젝트의 jobs가 SUCCESS이면 배포 성공

    좋은 웹페이지 즐겨찾기