[GitOps]Laravel Application을 GitHub Action을 이용해 Container Registry에 배포하기

Hoone·2021년 5월 29일
0
post-thumbnail

Dockerfile 작성

애플리케이션을 이미지로 배포하기 위해서 Dockerfile을 추가합니다.

Dockerfile

FROM wlgns5376/laravel8-base:php8.0-fpm

ENV APP_HOME /var/www/html

WORKDIR ${APP_HOME}

COPY . ${APP_HOME}

# Install PHP dependencies
RUN composer install --no-interaction --optimize-autoloader --no-dev --no-scripts

# Install NPM dependencies
RUN rm -rf package-lock.json \
        && npm install \
        && npm run prod \
        && rm -rf node_modules

RUN chown -R www-data:www-data storage bootstrap/cache

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

wlgns5376/laravel8-base:php8.0-fpm는 laravel 애플리케이션에 필요한 PHP 확장 모듈과 php-fpm이 포함된 이미지입니다.

이미지로 build될 때 필요하지 않는 파일이나 디렉토리는 .dockerignore에 추가합니다.

GitHub Container Registry

GitHub에서 서비스하는 Container Registry에 이미지를 올려서 배포해보겠습니다.
Container Registry는 현재 Beta버전이라 사용하기 위해서는 Feature preview를 활성화해야 합니다.

github-feature-preview

CD 작성 (Image build & push)

이제 애플리케이션을 이미지로 build하고 Container Registry로 push하는 CD 스크립트를 추가합니다.

cd.yml

name: CD

# main branch로 병합이 되면 작동합니다
on:
  push:
    branches: [ main ]

env:
  # 이미지 이름을 환경변수로 등록합니다.
  IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/example-app

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Check out code
        uses: actions/checkout@v2
      
      # Revision를 이미지의 태그로 만들기 위해 값을 생성합니다.
      - name: Get verion
        id: image
        run: |
          VERSION=$(echo ${{ github.sha }} | cut -c1-8)
          echo VERSION=$VERSION
          echo "::set-output name=version::$VERSION"
      # Container Registry에 로그인합니다.
      - name: Login to GitHub Packages Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      # 애플리케이션을 이미지로 build 하고 push합니다.
      - name: Push to GitHub Packages
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: |
            ${{ env.IMAGE_NAME }}:${{ steps.image.outputs.version }}

작성 후 main으로 push하면 아래와 같이 build가 실행됩니다.

github-cd-build-log
Package 탭에서 revision으로 태그가 생성된 이미지가 push된 것을 확인할 수 있습니다.
github-container-registry-pushed

Next

다음은 생성된 이미지로 쿠버네티스에 적용해보겠습니다.

References:

GitHub Container Registry: https://docs.github.com/en/packages/learn-github-packages/introduction-to-github-packages

profile
도움이 되고픈 개발자

2개의 댓글

comment-user-thumbnail
2023년 2월 7일

앞서서 작성한 ci파일과 여기에서 도커파일로 이미지 만드는거랑 무슨차이가 있는건지요?
ci파일은 혹시 도커로 이미지를 만들기전에 테스트하기위한 용도인가요?
실제 도커파일은 수동으로 이미지를 만들어주는거구요?
아무리봐도 어플리케이션 소스를 통합해서 빌드해주는건 안보여서요...ㅠ
ci는 소스를 최종 점검하고 테스트하기위한 용도이고, 이걸통과하면 소스를 머지해서....도커로 이미지를 수동으로 만드는건가요?
그럼 일반 웹어플리케이션 테스트는 안되겠네요?
감사합니다.

1개의 답글