인프라

CI/ CD + Github Actions & AWS EC2

wannaDevelopIt 2023. 1. 31. 17:03

출처 : 내일배움캠프

 

1) CI(Continuous Integration) : 지속적 통합 ~ 여러 개발자가 하나의 프로젝트를 같이 개발할 때 발생하는 불일치 최소화

-> CI를 제대로 구현하면 애플리케이션 변경 사항 반영 시 자동으로 빌드 및 테스트되어 잘못된 코드가 공유되는 것을 방지

코드의 신뢰성 증진

 

2) CD(Continuous Deployment) : 지속적 배포 ~ 프로젝트의 변경사항을 가상 환경에 자동으로 배포

-> CD를 구성해두면 변경사항을 배포할 때 사용하는 파이프 라인을 공유하여 번거로움을 없앨 수 있다

배포 플로우의 동기화

 

Github Actions : 깃헙에서 제공하는 CI/CD 툴

+JAVA CI with Gradle : gradle.yml 수정하기

on : 워크플로우 수행할 이벤트

jobs: 수행할 워크플로우

 

깃헙 액션을 사용해 AWS EC2에 배포하기

  1. Github Actions 에서 AWS 에 배포하는 방법
  2. AWS EC2 설정 추가
  3. AWS S3 버킷 생성
  4. AWS CodeDeploy 앱 생성 및 배포 설정
  5. Github Actions 에서 사용할 사용자 권한 추가
  6. AppSpec 파일 작성
  7. 배포 스크립트 작성
  8. Github Actions Workflow 작성
  9. Github 에서 push 로 배포하기

Main 브랜치에 Push 하면 자동으로 EC2까지 배포되는 Workflow ~ 소스코드를 압축하여 AWS 스토리지에 저장 후 서버에 전달해 실행한다

큰 흐름을 요약하면 다음과 같습니다.

  1. Github Actions 에서 코드 빌드 (테스트는 CI 에서 했다고 검증했다고 판단하여 생략)
  2. AWS 인증
  3. 코드 압축해서 AWS S3 에 업로드
  4. AWS CodeDeploy 실행하여 S3 에 있는 코드 EC2 에 배포

깃허브 프로젝트 코드를 AWS S3에 업로드 한 후 AWS EC2에서 끌어다 쓰는 것이 가장 핵심,

AWS CodeDeploy는 그걸 보조

 

EC2 설정 추가

1. Tag 추가(CodeDeploy에서 어떤 인스턴스에 실행할 지 구분하는 값)

2. IAM 역할 등록

3. EC2 서버에 CodeDeploy Agent 설치

 

AWS S3 생성

버킷 생성

일반 구성과 객체 소유권 설정

엑세스, 버킷 버전, 암호화 비활성화

CodeDeploy 생성

CodeDeploy 전용 IAM 역할 만들기

CodeDeploy 애플리케이션 생성

CodeDeploy 배포그룹 생성

Github Actions에서 사용할 IAM 사용자 추가

사용자 이름, 엑세스 유형, 접근 권한 설정

Access Key, Secret Key 생성

깃헙 레포지토리에서 시크릿 추가

AppSpec 파일 작성

files 섹션

permissions 섹션

hooks 섹션

배포 스크립트 작성

stop.sh

start.sh

build.gradle 파일 수정

깃헙 액션 워크플로우 작성

sample workflow -> deploy.yml 작성

깃헙 액션 사용하여 배포하기

repo에서 확인

AWS codedeploy에서 확인

EC2 서버에서 애플리케이션 실행 확인