새소식

AWS

AWS EC2 Blue/Green Deployment (Feat. Jenkins, CodeBuild, CodeDeploy) - Part 1

  • -

 

이번 포스트에서는 L 사에 적용된 Jenkins 를 사용하여 AutoScale 이 적용된 Application 을 CodeBuild, CodeDeploy 를 이용하여 Blue/Green 배포하는 방법에 대해 알아보겠습니다.

 

Architecture

  1. Application의 변경 사항을 Source Repository(GitLab)에 push 합니다.
  2. Jenkins 에서 수동으로 Build를 실행하여 Source Repository 의 모든 파일을 Jenkins의 Workspace 로 복제합니다.
  3. CodeBuild Plugin 이 AWS CodeBuild 를 실행합니다.
  4. Jenkins의 Workspace 에 복제된 source code 파일을 압축하여 사전 정의된 Amazon S3 버킷에 zip 파일로 upload 합니다.
  5. 4번 과정에서 업로드된 zip 파일을 CodeBuild 로 Build 한 결과물을 artifact.zip 파일로 S3 버킷에 다시 저장합니다.
  6. AWS CLI create-deployment 명령어로 CodeDeploy 를 실행합니다.
  7. CodeDeploy 는 5번 과정에서 S3 에 저장된 Build artifact 를 배포합니다.
  8. CodeDeploy 에 설정된 내용으로 Blue/Green 배포가 진행됩니다.

 

Requierment

  1. AWS Resource
    1. AutoScaling Group
    2. S3
    3. CodeBuild
    4. CodeDeploy
  2. Jenkins
    1. Jenkins 설치 및 Plugin 설치
    2. 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 에 입력할 수 있습니다.

    이 예제에서는 빌드 명령 삽입으로 구성하겠습니다.

아래 내용을 빌드 명령에 입력합니다.

version: 0.2 
 
phases: 
  install: 
    runtime-versions: 
      java: corretto17 
  pre_build: 
    commands: 
      - echo build_number $CODEBUILD_BUILD_NUMBER
  build: 
    commands: 
      - echo Build started on `date` 
      - echo Building Start    
      - mvn clean package        
  post_build: 
    commands: 
      - echo Build completed on `date` 
artifacts:
  files:
    - target/demo-0.0.1-SNAPSHOT.jar
    - src/main/resources/codedeploy/*
    - src/main/resources/codedeploy/script/*
  name: "#${CODEBUILD_BUILD_NUMBER}-demo-application-$(date +%y%m%d%H%M).zip"
  discard-paths: yes 
cache: 
  paths: 
    - '/root/.m2/**/*'

 

3. 아티팩트를 아래와 같이 구성합니다.

    위 Buildspec 으로 빌드된 artifact 가 아래 구성한 S3 버킷에 저장됩니다.

 

4. Build 로그를 CloudWatch 로 보내도록 설정합니다.

 

CodeDeploy

AWS Console 에서 CodeDeploy 어플리케이션을 생성하고 배포 그룹을 셍성합니다.

배포 그룹은 아래와 같이 설정합니다.

 

AWS Resource 구성은 모두 완료 되었습니다.

다음 게시물에서 Jenkins 구성 및 Build Deploy 테스트를 진행하겠습니다.

 

2023.10.11 - [AWS] - AWS EC2 Blue/Green Deployment (Feat. Jenkins, CodeBuild, CodeDeploy) - Part 2

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.