프로젝트를 하던 중, github action을 이용해 CI/CD 를 구현하라는 미션을 받았습니다.
의욕은 항상 넘쳤지만, github만 알고, github action, CI/CD 둘 다 하나도 모르기 때문에
정리를 하면서 공부를 해보려고 합니다.
어플리케이션을 제작~배포까지의 단계를 "자동화"를 해 사용자에게
효율적이고 빠르게 빈번히 배포를 하는것
: 버그 수정 혹은 새로 만드는 기능들이
main repository에 주기적으로 build되고,
테스트가 되어 merge 되는것
-> merge 후에 전부 정상적이라면 초록불
-> 오류가 있다면 빨간불
장점:
-CI를 통해서 주기적으로 merge된 코드의 변경사항들이
자동으로 build후 test를 통과하면 배포할 준비과정을 거치는데,
준비 된 release를 점검하는 과정에서, 수동적으로 점검을 한다면 Continuous Delivery,
자동적 점검 후, 배포를 한다면 Continuous Deployment
CI/CD를 구현하기 위해서는 보통 툴을 사용하는데,
Jenkins, Github Action이 있습니다.
저는 그 중, Github Action을 통해서 CI/CD를 설계하려고 합니다.
Elastic Compute Cloud
: EC2는 AWS에서 제공하는 서비스로,
컴퓨터를 통째로 빌려주는 컴퓨터 임대 서비스를 의미한다
EC2.pem 이란 서버의 비밀번호라고 생각하면 될 거 같다.
보안이 굉장히 중요하기 때문에, 우리가 일반적으로 생각하는 비밀번호가 아닌,
pem 파일로 키페어를 제공해준다.
인스턴스란? => 내가 빌린 컴퓨터를 뜻함
구글링을 통해 찾아본 결과,
출처: https://www.youtube.com/watch?v=UF2Giz9PE-E&t=482s
위와 같은 과정을 통해 CI/CD를 구축하는걸 찾아볼 수 있었다.
그림을 설명해보자면,
1. 깃허브로 소스코드를 push or pull request merge 를 하면
2. github action에서 test/build를 한 후, jar 파일 생성
3. 생성된 jar 파일을 압축하여 S3에 업로드
4. CodeDeploy에 배포 요청을 함
5. CodeDeploy에서 S3로부터 EC2로 파일을 옮기고
이를 실행해 spring boot 서버 실행
다음 포스팅에서는 이 과정을 이제 실제로 구축해보자
(수정)
AWS 계정을 프로젝트 리더분들에게만 공유하기로 했고,
요즘에 Docker를 많이 쓰는 추세라고 하셔서
S3를 통한 CodeDeploy를 쓰는 대신에 Docker를 통해서
CI/CD를 구축하기로 결정했습니다.