이번 포스트에서는 L 사에 적용된Jenkins 를 사용하여 AutoScale 이 적용된 Application 을 CodeBuild, CodeDeploy 를 이용하여 Blue/Green 배포하는 방법에 대해 알아보겠습니다.
Architecture
Application의 변경 사항을 Source Repository(GitLab)에 push 합니다.
Jenkins 에서 수동으로 Build를 실행하여 Source Repository 의 모든 파일을 Jenkins의 Workspace 로 복제합니다.
CodeBuild Plugin 이 AWS CodeBuild 를 실행합니다.
Jenkins의 Workspace 에 복제된 source code 파일을 압축하여 사전 정의된 Amazon S3 버킷에 zip 파일로 upload 합니다.
4번 과정에서 업로드된 zip 파일을 CodeBuild 로 Build 한 결과물을 artifact.zip 파일로 S3 버킷에 다시 저장합니다.
AWS CLI create-deployment 명령어로 CodeDeploy 를 실행합니다.
CodeDeploy 는 5번 과정에서 S3 에 저장된 Build artifact 를 배포합니다.
CodeDeploy 에 설정된 내용으로 Blue/Green 배포가 진행됩니다.
Requierment
AWS Resource
AutoScaling Group
S3
CodeBuild
CodeDeploy
Jenkins
Jenkins 설치 및 Plugin 설치
Jenkins 구성
AWS Resource
AWS Resource 를 구성합니다.
Source 코드, 빌드 artifact, build cache 를 저장할 S3 버킷을 구성합니다.
CodeDeploy 에서 Blue Green 배포 시 사용할 AutoScaling Group 을 구성합니다.
CodeBuild 및 CodeDeploy 를 구성합니다.
S3
S3 버킷을 생성합니다.
gyko-demo-codebuild-bucket : codebuild 가 build 를 수행할 원본 소스코드가 저장될 버킷 gyko-demo-codebuild-cache-bucket : codebuild 의 cache 가 저장될 버킷 gyko-demo-codedeploy-bucket: codebuild 가 원본 소스로 빌드된 artifact 가 저장될 버킷(codedeploy 가 배포할 artifact)
AutoScaling Group
CodeDeploy 와 연결할 AutoScaling Group 을 생성합니다.
Target Group, ALB, 시작템플릿,Auto Scaling Group 을 생성하고 매핑합니다.
1. 대상 유형이 인스턴스인 Target 그룹을 생성하고 ALB Listener 에 등록합니다.
2. 사용자 데이터에 아래 내용을 추가하여 시작 템플릿을 생성합니다.
#!/bin/bash
# 필요한 패키지 설치
yum install -y ruby java-17-amazon-corretto jq
# 홈 디렉토리로 이동
cd /home/ec2-user/
# AWS CLI v2 다운로드 및 설치
curl -SsL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
# AWS CodeDeploy 에이전트 설치 및 활성화
wget -q https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
./install auto
systemctl --now enable codedeploy-agent
# app 디렉토리 생성
mkdir -p /home/ec2-user/app
3. 위에서 생성한 시작 템플릿과 로드밸런서를 매핑하여 Auto Scaling 그룹을 생성합니다.
CodeBuild
CodeBuild 를 구성합니다.
1. 소스는 위에서 생성한 S3 버킷을 지정합니다. 여기서 지정한 S3 버킷으로 Jenkins Workspace 에 저장한 Source Code가 zip 파일로 업로드 됩니다.
2. Buildspec 을 정의합니다.
buildspec 파일을 사용할 수 있고 직접 AWS Console 에 입력할 수 있습니다.