CI/CD_실전 적용하기

박민우·2022년 4월 13일
0

모아부자

목록 보기
3/9
post-thumbnail

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를 생성해야 한다.
  1. IAM 사용자 추가
  2. access 유형: 프로그래밍 방식 액세스
  3. S3FullAccessCodeDeployFullAccess 선택 / 생성
  4. 생성 후 발급되는 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에 배포한다.
profile
KingdomOfGod newPerson = new KingdomOfGod();

0개의 댓글