AWS Elastic BeanStalk, Jenkins 기반 CI/CD 구축
1.구성 소개
1.1 구성 아키텍처
1.2 구성 아키텍처 동작 과정
-
Github에 소스를 push를 한다.
-
Github는 Jenkins로 WebHook Trigger한다.
-
Jenkins는 소스를 war로 빌드 후, S3에 업로드한다. 그 후 Elastic Beanstalk으로 Deploy 명령을 내린다.
-
Eleastic Beanstalk은 S3에 업로드된 war파일로 각 EC2 서버에 배포한다.
2. 구성 방법
2.1. Eleastic Beanstalk 기본 구성
AWS Elastic Beanstalk은 애플리케이션 코드를 업로드하면 리소스 프로비저닝, 로드 밸런싱, 오토스케일링 및 모니터링 같은 모든 세부 정보를 자동으로 처리하여 배포할 수 있게 한다.
Elastic Beanstalk의 새로운 애플리케이션을 생성한다.
생성된 애플리케이션의 환경을 구성한다. 웹서버 환경에서 기본 Tomcat 플랫폼으로 선택한다. 추가 옵션 구성에서는 인스턴스, 로드밸런서, Auto Scaling 유형을 설정할 수 있다.
설정 완료 후, 생성과정 및 완료됨을 확인한다.
2.2. Eleastic Beanstalk 배포 환경 구성
대시보드에서 업로드 및 배포를 선택한다.
배포하고자 할 war파일을 업로드하고, 버전 레이블을 입력한 후 배포한다.
이벤트 탭에서 배포에 대한 진행사항을 확인한다.
배포가 모두 완료되면, URL에 접근해서 정상적으로 접속되는지 확인한다.
Elastic Beanstalk에서 제공하는 URL을 통하여 배포한 애플리케이션이 정상적으로 구동된다.
2.3. Eleastic Beanstalk 롤백 및 재배포
Eleastic Beanstalk 대시보드에서 생성한 애플리케이션 리스트를 확인한다.
애플리케이션 버전 탭에서는 그동안 배포된 애플리케이션이 표시된다.
롤백하고자 한다면, 버전을 선택 후 작업 > 배포를 선택한다. 이는 해당 버전으로 재배포된다.
2.4. S3 생성 및 설정
AWS에서 S3 버킷 만들기를 선택한다. 버킷 이름과 해당되는 리전을 선택한다.
S3 권한 탭의 편집에서 퍼블릭 액세스에 대한 비활성화를 선택한다.
2.5. Jenkins Pipeline 설정
Blue Ocean이라는 플러그인을 통해 GUI로 Pipeline 구성이 가능하다.
Jenkins 관리의 플러그인 관리 탭에서 Blue Ocean 플러그인을 다운로드한다.
새로운 Pipeline을 생성한다. GitHub을 선택하고, GitHub access token을 입력하여 연결한다.
2.6. GitHub Webhook 설정
GitHub에 push가 되면 Jenkins로 Webhook을 보낼 수 있도록 설정한다.
Settings의 Webhooks 탭에서 Add Webhook을 선택한다.
Payload URL에 http://Jenkins Server URL/github-webhook을 지정한다.
등록된 화면이다. GitHub으로 새로운 코드가 push되면, Jenkins로 Webhook 된다.
Github에서 새로운 소스가 push되면, Jenkins에 새로운 Build가 시작된다.
그 후, Elastic Beanstalk에서 새로운 배포가 진행된다.
3. 구현 결과
빠른 생산성을 지원하는 구성 아키텍처이다. AWS와 오픈소스를 함께 사용할경우, 본 아키텍처 기반으로 생각할 수 있다. Elastic Beanstalk은 PHP, Java, Python, Ruby, Node.js, .NET, Go 또는 도커 웹 애플리케이션이 있는 경우에 가장 적합하다. AWS 서비스(Elastic Beanstalk)와 오픈소스(Jenkins) 솔루션을 이용하여 통합과 배포 단계를 자동화하고 지속적인 배포 환경을 구성하는 것이 가능하다.