■ JITHub 개발일지 77일차
□ TIL(Today I Learned) ::
Github action을 활용한 CI/CD
- CI/CD란?
지속적 통합, 지속적 배포를 뜻하며 이를 통해 코드를 검증 및 통합하고 배포하는 일련의 과정을 말한다. 이를 제공하는 서비스들이 많지만 본 프로젝트에서는 github action을 사용했다.
- 현재 배포되어 있는 서비스는 프론트 엔드, 백엔드 두 개의 repository로 나뉘어있기 때문에 각각 CI/CD를 지정해주어야 한다.
- 아래는 먼저 프론트엔드의 배포 코드이다.
- 처음에 워크플로우를 짜주어야 하는데 yml파일을 잘 이해하지 못해 어려움이 있었으나, 아래 영상을 통해 많은 도움을 받을 수 있었다. (※ 참고 링크 : 유튜브) 생활코딩 - github.com - action)
- 위의 영상을 참고하여 작성한 프론트엔드 cd 코드이다.
S3서버에 접근하기 위하여 필요한 정보들을 옵션으로 입력해준다.
# GaGgaMaGga_FE/.github/workflows/cd_front.yml
name: CD-Front
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: S3 Deploy
run: |
aws s3 cp \
--recursive \
--region ap-northeast-2 \
/home/runner/work/GaGgaMaGga_FE/GaGgaMaGga_FE s3://gaggamagga.shop
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
- name: Create CloudFront Cache Invalidation
uses: chetan/invalidate-cloudfront-action@master
env:
DISTRIBUTION: ${{ secrets.AWS_DISTRIBUTION_ID }}
PATHS: '/*'
AWS_REGION: 'eu-central-1'
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- 코드를 보면 secret 키들이 많이 보이는데 이는 아래 Settings - Secrets - Actions에서 지정해줄 수 있었다.
- 이제 백엔드 레포지토리의 코드이다. 현재 백엔드는 도커를 통해 연결해야 하므로 이에 알맞게 수정해주었으며 , ssh를 사용하였다.
# GaGgaMaGga_BE/.github/workflows/gaggamaggaCD.yml
name: gaggamagga CD
on:
push:
branches: ['main']
jobs:
deploy:
name: CD Pipeline
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10.8"]
steps:
- name: Deploy
uses: appleboy/ssh-action@v0.1.5
with:
key: ${{ secrets.EC2_KEY }}
host: ${{ secrets.EC2_IP }}
username: ${{ secrets.EC2_NAME }}
port: ${{ secrets.EC2_PORT }}
script: |
cd ${{ secrets.EC2_PATH }}
git pull origin main
cd ../../
sudo docker compose restart backend
- 백엔드에서는 CI에서 통합할 때 마다 테스트코드를 실행시킬 수 있도록 하여, 작업이 끝난 후 merge할 때 테스트코드가 동작 하여 이상이 없는지 확인할 수 있도록 하였다.
# GaGgaMaGga_BE/.github/workflows/gaggamaggaCI.yml
name: gaggamagga CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: ["3.10.8"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Decrypt secrets.json
run: gpg --quiet --batch --yes --decrypt --passphrase="$PASS_PHRASE" --output $HOME/secrets.json secrets.json.gpg
env:
PASS_PHRASE: ${{ secrets.PASS_PHRASE }}
- name: Move secrets.json
run: mv $HOME/secrets.json /home/runner/work/GaGgaMaGga_BE/GaGgaMaGga_BE
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run User App Tests
run: |
python manage.py test users
- name: Run Place App Tests
run: |
python manage.py test places
- name: Run Review App Tests
run: |
python manage.py test reviews
- name: Run Notification App Tests
run: |
python manage.py test notification
반응형
'DEV > Web 개발' 카테고리의 다른 글
Web개발 :: Code Review _ User 관리 기능 _TIL78 (0) | 2022.12.28 |
---|---|
Web 개발 :: 12월 넷째주 WIL17 (0) | 2022.12.28 |
Web개발 :: Pagination, Crawling, Localstorage _TIL76 (1) | 2022.12.20 |
Web개발 :: 데이터 전처리, Django TestCode 작성 _TIL75 (1) | 2022.12.20 |
Web 개발 :: 12월 셋째주 WIL16 (0) | 2022.12.19 |
댓글