💁🏻 CI/CD?
CI/CD(Continuous Integration / Continuous Deployment)는 소프트웨어 개발과 배포를 자동화하는 프로세스를 의미하는데 머지, 테스트, 빌드과정이 여기 포함된다. 오늘은 우선 github에서 제공하는 actions 기능을 사용해 main branch에 push 했을 때 aws에 접속하여 빌드하고 서비스를 재시작하는 워크플로우를 만들어 보려고한다.
👨🏻💻 Action?
Github Actions의 작업단위로 /.github/workeflows 디렉터리 내에서 *. yml 확장자로 만들 수 있다. 쉽게 설명하자면 ec2와 같은 가상컴퓨터가 레파지토리에 대한 다양한 이벤트(push, pull_request, issues 생성..)에 대해 YAML파일로 정의된 작업을 자동으로 실행할 수 있게 해 준다.
👩🏻🚀 Workflow&Secrets
우선 AWS EC2 서버에 접근할 수 있도록 키와 정보들을 GitHub Secets 설정에 추가해보자.
Setting -> Secrets and variables -> Actions -> New repository secret
Name | 설명 |
AWS_ACCESS_KEY_ID | AWS IAM 사용자의 액세스 키 |
AWS_SECRET_ACCESS_KEY | AWS IAM 사용자의 비밀 키 |
AWS_REGION | EC2가 위치한 리전 (예: ap-northeast-2) |
EC2_HOST | EC2의 퍼블릭 IP 주소 |
EC2_USERNAME | EC2에 접속할 사용자 이름 |
SSH_PRIVATE_KEY | EC2에 접속할 개인 키 |
위와 같이 설정해 주었다.
이제 deploy.yml 파일을 작성하자
name: Deploy to AWS EC2
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- 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: ${{ secrets.AWS_REGION }}
- name: Deploy to EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd ~/app # EC2에서 프로젝트 폴더로 이동
git pull origin main # 최신 코드 가져오기
npm install # 의존성 설치
npm run build # 빌드 실행
pm2 restart all # 애플리케이션 재시작
- name: 식별과 관리를 위한 이름 지정
- on: 트리거 조건 (push, pull_request, schedule 등)
- jobs: 하나 이상의 작업 정의
- runs-on: 실행 환경 지정 (ubuntu, windows, macos 등)
- steps: 순차적으로 실행할 작업 단계들
- uses: 미리 만들어진 액션 사용
- with: 액션에 전달할 매개변수들
- script: 실행할 셸 명령어들
커밋해보니 잘 동작하는것 같다.
'개발 > 개발로그' 카테고리의 다른 글
[React] 성냥퍼즐 웹 서비스 만들기 14일차 : Authentication (Zustand, React-Rounter) (0) | 2025.01.01 |
---|---|
[React] 성냥퍼즐 웹 서비스 만들기 13일차 (nodemailer, bcrypt, JWT) (0) | 2024.12.21 |
[React] 성냥퍼즐 웹 서비스 만들기 12일차 (ValidationPipe) (0) | 2024.12.19 |
[React] 성냥퍼즐 웹 서비스 만들기 11일차 (Mysql / Prisma / NestJS) (2) | 2024.12.17 |
[React] 간단한 성냥퍼즐 웹 서비스 만들기 10일차 (Nest.js) (0) | 2024.12.13 |