-
Notifications
You must be signed in to change notification settings - Fork 0
[프로젝트] CD 파이프라인 구축
이은비 edited this page Jun 3, 2023
·
1 revision
Github Actions와 AWS S3, CodeDeploy를 이용해 배포를 진행합니다. 해당 도구를 이용하는 이유는 앞서 주말의집 서비스에서 이미 적용된 파이프라인이기 때문입니다. ( 동일한 파이프라인 방식을 따라가는 것이 팀의 일관성을 유지하는 방식이라고 생각했고, 유지보수에도 용이하기 때문입니다. )
아래 코드는 실제 CD에 사용 중인 yml 파일입니다. 각 코드가 의미하는 바는 주석으로 설명을 대체하겠습니다.
name: Deploy
on: # 이벤트 타켓 설정
push:
branches:
- main
env:
PROJECT_NAME: duaily-tech-client
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@master
- name: Check Node v # Node v 확인
run: node -v
- name: Cache node modules # 캐싱 처리 ( 속도 향상 )
uses: actions/cache@v1
with:
path: node_modules
key: ${{ runner.OS }}-build-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-build-
${{ runner.OS }}-
- name: Install # 빌드를 위한 패키지 매니저 설치 ( 로컬에서도 npm 사용 중 )
run: npm install
- name: Build
run: npm run build
- name: zip create # zip 파일 생성
run: zip -r ./$GITHUB_SHA.zip ./dist appspec.yml # appspec.yml 파일 별도로 작성 필요
shell: bash
- name: Configure AWS credentials # AWS S3로 접근을 위한 인증 과정 필요
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: ${{ secrets.AWS_REGION }}
- name: Upload to S3 # S3에 파일 업로드 ( 버킷 내에 서버/프론트엔드 폴더가 이미 존재하기에 폴더명으로 식별하고 있음 )
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://${{ secrets.S3_BUCKET_NAME }}/$PROJECT_NAME/$GITHUB_SHA.zip
- name: Code Deploy # CodeDeploy 배포
run: |
aws deploy create-deployment \
--application-name duaily-deploy \
--deployment-config-name CodeDeployDefault.AllAtOnce \
--deployment-group-name duaily-deploy-group-tech-client \
--s3-location bucket=${{ secrets.S3_BUCKET_NAME }},bundleType=zip,key=$PROJECT_NAME/$GITHUB_SHA.zip
위에 파일에서도 언급했듯이 appspec.yml 파일이 별도로 필요합니다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/back-office
overwrite: yes
file_exists_behavior: OVERWRITE
permissions:
- object: /
pattern: '**'
owner: root
group: root
mode: 775
AWS EC2 서버 내에 /home/ubuntu/back-office
경로에 현재 레포지토리 코드를 업로드할 예정입니다. 이는 ngnix에서 바라보는 곳이기도 합니다.
이때, file_exists_behavior: OVERWRITE
를 추가하지 않으면 오류가 발생합니다.
이유는, 이미 수동 배포로 현재 레포지토리의 코드가 업로드된 상태이기 때문에 동일한 폴더명이 존재함으로 오류가 발생합니다. 해결하기 위해서는 덮어쓰기를 허용해주어야 합니다.
이 외에 AWS 사이트에서 직접 처리해주어야 하는 작업들이 있습니다.
- S3에 버킷에서 프로젝트 명으로 폴더 생성
- CodeDeploy에서 deploy 그룹 새로 생성