티스토리 뷰

개인공부/Devops

CICD - github actions, S3, Code deploy

날따라해봐요요롷게 2022. 5. 6. 16:36

CICD 란 무엇인가?

CI는 지속적인 통합(Continuous Integration)을 의미한다. 여러 명의 개발자가 동시에 개발할 때, 코드 작업을 하면 정기적으로 빌드 및 테스트 과정을 거쳐 공유 리포지토리에 통합된다.

CD는 Continuous Delivery\ Continuous Deployment를 의미한다. 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리즈하는 것을 의미한다.

각자 작업한 코드들을 통합하고(CI), 자동으로 프로덕션 프로그램에 배포한다(CD)


Github Actions / AWS S3 , Code Deploy를 사용한 배포 과정

  • aws에서 S3, IAM, CodeDeploy, ec2 설정
  • github repository에 push/pr 후 테스트하면서 오류를 잡는다.
  • 설정한 이벤트를 감지하면 github action workflow (gradle.yml)에 정의한 작업이 실행된다.
  • 빌드된 파일을 압축하여 s3 버킷에 푸시한다. (ZIP 압축파일)
  • Codedeploy를 사용하여 s3에 있는 압축파일을 EC2 인스턴스로 배포한다.
  • 배포 후 codedeploy agent가 AppSpec.yml 에 정의한 추가 작업을 실행한다.
  • ec2에서 deploy.sh 파일을 읽어 ec2에 파일을 실행한다.

AWS CLI용 IAM user 생성하기

IAM이란 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹서비스이다.

EC2에서 CodeDeploy , S3서비스를 사용할 수 있도록 권한을 주어야 한다.

github actions workflow에서 빌드한 파일을 압축한 압축파일을 s3로 업로드하고 codedeploy를 실행하려면, 이 작업을 하기 위한 IAM User를 생성해야 한다.

  1. IAM 사용자 추가
  2. access 유형: 프로그래밍 방식 액세스
  3. S3FullAccess, CodeDeployFullAccess 선택하기
  4. 생성
  5. 생성 후 발급되는 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에 업로드한 파일(JAR)을 CodeDeploy로 EC2에 배포한다.

 


'개인공부 > Devops' 카테고리의 다른 글

CICD - Github Actions 를 선택한 이유  (0) 2022.05.06
CICD - 트러블슈팅  (0) 2022.05.06
docker - TIME ZONE  (0) 2022.05.04
docker volume - WAS log  (0) 2022.05.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함