[Django] Github-actions를 이용한 CI/CD 파이프 라인 구축하기(2) - github actions 사용하기

dj-yang·2021년 7월 27일
0

django

목록 보기
6/7
post-thumbnail

서론

전에 작성한 글에 이어서 실제로 github-action을 사용해보자!

시리즈
[Django] Github-actions를 이용한 CI/CD 파이프 라인 구축하기(1) - AWS SETTING
[Django] Github-actions를 이용한 CI/CD 파이프 라인 구축하기(3) - elastic beanstalk

본론

장고 프로젝트 생성

장고의 별다른 기능을 사용하는 것이 아닌 로켓만 띄울 생각이니 기본적인 프로젝트 명령어가 필요하다.

# 가상환경 생성
> python3 -m venv myvenv
# 가상환경 실행
> source myvenv/bin/activate
# django 설치
> pip install django

# 장고 프로젝트 생성 및 실생
> django-admin startproject cicdproject
> cd cicdproject
/cicdproject > python3 manage.py runserver

장고 프로젝트 생성에 성공했다.

우선 패키지 관리를 위해 pip freeze를 사용하자.

bash: pip freeze > requirements.txt

github repository 생성

github-actions를 사용하려는 생각을 가지신 분이면.. 이미 github을 사용 중일테니 각자 진행하자..

repositoty가 생성되었다면 settings -> Secrets -> New repository secret에 들어가서 AWS IAM을 통해 만들었던 Access Key 들을 입력한다.

aws_secret_access_key도 같은 방식으로 설정해준다.

github-actions

github은 커밋 내용 중에 .github/workflows에 있는 파일을 자동으로 실행한다. 따라서 해당 폴더를 장고 프로젝트 내에 만들어야 한다.

# ../cicdproject/.gitgub/workflows/custom_config.yml
name: CI-CD pipeline to AWS
env:
  EB_S3_BUCKET_NAME: ["만들었던 S3 bucket 이름"]
  EB_APPLICATION_NAME: ["만들었던 Application 이름"]
  EB_ENVIRONMENT_NAME: ["만들었던 환경 이름"] # 보통 앱 이름에 -env 형태로 자동 생성
  DEPLOY_PACKAGE_NAME: "django-app-${{ github.sha }}.zip"
  AWS_REGION_NAME: ["Application이 위치하는 지역"] # ex) ap-northeast-2

on:
  push:
    branches:
        - master
        
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Git clone on our repo
        uses: actions/checkout@v2
      
      - name: Create zip deployment package
        run: zip -r ${{ env.DEPLOY_PACKAGE_NAME }} ./ -x *.git*
      
      - 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: ${{ env.AWS_REGION_NAME }}
        
      - name: Copying file to S3
        run: aws s3 cp ${{ env.DEPLOY_PACKAGE_NAME }} s3://${{ env.EB_S3_BUCKET_NAME }}/
        
      - name: Print message on success finish
        run: echo "CI part finished successfully"
        
  deploy:
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - 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: ${{ env.AWS_REGION_NAME }}
          
      - name: Create new EBL app ver
        run: |
          aws elasticbeanstalk create-application-version \
          --application-name ${{ env.EB_APPLICATION_NAME }} \
          --source-bundle S3Bucket="${{ env.EB_S3_BUCKET_NAME }}",S3Key="${{ env.DEPLOY_PACKAGE_NAME }}" \
          --version-label "${{ github.sha }}"
          
      - name: Deploy new app
        run: aws elasticbeanstalk update-environment --environment-name ${{ env.EB_ENVIRONMENT_NAME }} --version-label "${{ github.sha }}"
      - name: Print message on success finish
        run: echo "CD part finished successfully"

어플리케이션을 Elastic Beanstalk에서 사용할 수 있게 압축파일로 만들고 해당 압축 파일을 EB에게 보내는 github-actions 명령어들이다.

우선 이 상태로 github에 push를 해서 내 repositoty가 해당 파일을 잘 참조하고 있는 지 확인해보자.

내 repository -> Actions에서 확인할 수 있다.

아마 위에서 자신이 직접 설정해야하는 부분에서만 실수를 안했다면 정상적으로 github이 actions 를 실행한 것을 확인할 수 있다.

이제 AWS Elastic Beanstalk에서 다시 한번 내 환경으로 가기를 클릭해보겠다.

... 처음 Elastic Beanstalk에서 만들어준 화면과 다르지만 에러가 발생한다..

직접 EC2와 같은 인스턴스를 이용해서 배포를 해보셨다면 자주 보였을 화면이 뜨는 이유는 아직 Elastic Beanstalk에 대한 부분을 설정하지 않았기 때문이다.

우리는 현재 github actions가 정상적으로 실행될 수 있는 부분까지만 설정했다.

다음 글에서는 이제 배포 환경에서도 정상적으로 어플리케이션이 동작해서 로켓을 띄울 수 있도록 해볼 생각이다.

시리즈
[Django] Github-actions를 이용한 CI/CD 파이프 라인 구축하기(1) - AWS SETTING
[Django] Github-actions를 이용한 CI/CD 파이프 라인 구축하기(3) - elastic beanstalk


참고

profile
비전공자가 고통받으며 개발합니다

0개의 댓글