진짜 개발자
본문 바로가기

Software Engineering/CICD (jenkins, etc)

CICD - Jenkins와 CodeDeploy를 이용한 CICD 구축하기 - 1 (아키텍처, 과정 소개)

728x90
jenkins + codedeploy

 

 

사전지식

https://galid1.tistory.com/459 - CI/CD 란 ?

https://galid1.tistory.com/743 - 로컬 PC에 Jenkins를 이용해 CICD 환경 구축하기

https://galid1.tistory.com/745 - codedeploy란?, codedeploy로 자동배포환경 구축하기

https://blog.ull.im/engineering/2019/06/25/git-workflow-for-ci-cd.html - cicd를 위한 git workflow 브랜치 전략

이전에 포스팅한 위 내용들을 먼저 참고하시면 이 글을 이해하시기 더욱 편리합니다.

 

 

 

아키텍쳐

저희가 구축할 아키텍쳐는 위그림과 같습니다. Docker를 이용해 설치한 Jenkins가 통합 즉, CI를 담당하며, CodeDeployCD역할을 맡아 EC2들에게 배포를 합니다. 통합 및 배포가 모두 완료되면, SNS를 통해 Slack의 개발자 채널에 알립니다.

 

자세한 과정은 아래에서 다시 설명드리겠습니다.

 

 

 

필요조건

  • Codedeploy Agent가 설치된 Ec2 서버 2대(Codedeploy와 S3에 접근가능한)
  • Load Balander
  • S3 버킷
  • CodeDeploy Application
  • Jenkins(+ AWS CodeDeploy Plugin)가 설치된 서버 1대 (CodeDeploy에 접근 가능한)

 

 

 

 

과정

Jenkins는 자동 테스트 및 빌드를 진행할 CI Tool로써 사용할 것이며, AWS Code deploy 는 자동배포를 진행할 CD Tool 로써 사용할 것입니다.

 

  1. 개발자가 소스코드를 GitHub에 업로드합니다.
  2. GitHub의 WebHook을 통해 Jenkins에게 알립니다.
  3. Jenkins에서 GitHub로부터 소스코드를 받아와 테스트 후 빌드를 합니다.
  4. Jenkins에서 빌드된 app과, appspec.yml 그리고 scripts를 번들링하여 S3 버킷에 업로드합니다.
  5. 업로드가 완료되면, CodeDeploy에게 배포 요청을 합니다.
  6. 배포가 시작되면 EC2에서 S3버킷으로부터 app과 appspec, scripts를 다운 받고, appspec에 기술된 내용을 바탕으로 script를 실행합니다.
  7. 배포가 완료되면 SNS가 알림을 받습니다.
  8. SNS가 Lambda를 트리거합니다.
  9. Slack에 존재하는 개발자 채널에 알립니다.

 

 

 

다음 포스팅에서는 위 내용을 바탕으로 CICD환경을 구축해보도록 하겠습니다.