CI/CD란?
- CI는 지속적인 통합(Continuous Integration)을 의미한다. 여러 명의 개발자가 동시에 개발할 때, 코드 작업을 하면 정기적으로 빌드 및 테스트 과정을 거쳐 공유 리포지토리에 통합된다.
- CD는 Continuous Delivery\ Continuous Deployment를 의미한다. 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리즈하는 것을 의미한다.
- 각자 작업한 코드들을 통합하고(CI), 자동으로 프로덕션 프로그램에 배포한다(CD)
github action / aws s3 / codedeploy를 사용
배포 과정
- aws에서 S3, IAM, CodeDeploy, ec2 설정
- github repository에 push/pr 후 테스트하면서 오류를 잡는다.
- 설정한 이벤트를 감지하면 github action workflow (gradle.yml)에 정의한 작업이 실행된다. (push / pr 모두 설정함)
- 빌드된 파일을 압축하여 s3 버킷에 푸시한다. (ZIP 압축파일)
- Codedeploy를 사용하여 s3에 있는 압축파일을 EC2 인스턴스로 배포한다.
- 배포 후 codedeploy agent가 AppSpec.yml 에 정의한 추가 작업을 실행한다.
- ec2에서 deploy.sh 파일을 읽어 ec2에 파일을 실행한다.
AWS CLI용 IAM user 생성하기
- IAM이란 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹서비스이다.
- EC2에서 CodeDeploy , S3서비스를 사용할 수 있도록 권한을 주어야 한다.
- github action workflow에서 빌드한 파일을 압축한 압축파일을 s3로 업로드하고 codedeploy를 실행하려면, 이 작업을 하기 위한 IAM User를 생성해야 한다.
- IAM 사용자 추가
- access 유형: 프로그래밍 방식 액세스
S3FullAccess
, CodeDeployFullAccess
선택 / 생성
- 생성 후 발급되는
access-key
와 secret-access-key
를 기억해야 한다. (workflow 실행할 때 입력해줘야 한다)
CodeDeploy란?
- CodeDeploy는 모든 AWS 인스턴스에 대한 코드 배포를 자동화하는 서비스다.
Code Deploy Agent 설치
- CodeDeploy 에이전트는 인스턴스를 CodeDeploy 배포해서 사용할 수 있게 해주는 소프트웨어 패키지이다.
- EC2 서버에 들어가서 codedeploy agent를 설치해준다.
appspec.yml & deploy.sh 추가하기
-
s3에 업로드하고 ec2로 파일을 옮기는 작업을 한 후 배포를 위해서 ec2 서버에서 실행해야 할 일들을 정의해야 한다.
-
appspec.yml
ec2에 설치했던 CodeDeploy agent에서 appspec.yml 파일을 보고 받아온 파일을 ec2 어디에 저장 (destination: /home/ubuntu/app/
)할지 그리고 무엇을 실행(location: deploy.sh
)할지 정의해 놓을 수 있다.
-
deploy.sh
CodeDeploy agent는 appspec.yml에서 훅에 정의해 놓은 AfterInstall , ApplicationStart
코드를 읽어 deploy.sh 파일을 실행한다.
수동 배포를 할 때는 로컬에서 파일을 빌드한 다음에 EC2로 카피했는데(FILEZILA사용),
자동 배포를 하면서 product 환경 변수를 어떻게 저장할까 하다가, EC2 폴더(/home/ubuntu/app/
)에 따로 저장하고 실행할 때 가져와서 사용하기로 했다.
S3버킷 사용이유
- 배포용 S3 생성
- CodeDeploy를 이용해 배포를 하려면 S3를 통하게된다.
- 프로젝트를 zip으로 압축 후 S3에 업로드하고
- CodeDeploy가 해당 파일경로를 이용해 배포대상(ec2)에 소스(압축파일)를 옮긴다. (그렇기 때문에 배포용 S3가 필요)
- S3를 생성 후 S3에 업로드한 파일을 CodeDeploy로 EC2에 배포한다.