지금까지 구성한 CodeCommit, CodeBuild, CodeDeploy 및 CodePipeline 서비스를 활용하여 코드를 통합, 빌드 및 배포하는 방법을 알아보겠습니다.

이 문서에서는 배포 방식으로 Rolling Update를 활용하겠습니다.

사전 준비

ECS(Elastic Container Service) 구성

이 문서에서는 애플리케이션을 배포할 서버로 ECS(Elastic Container Service) 서비스를 사용합니다.

아래 문서를 참고하여 ECS 환경을 구성할 수 있습니다.

AWS ECS 구성 및 활용하기 #1 - 사전 준비 및 클러스터 생성하기

AWS ECS 구성 및 활용하기 #2 - 작업 정의 구성하기(ECS Task)

AWS ECS 구성 및 활용하기 #3 - 서비스(ECS Service) 구성하기

경고

이 문서에서는 서비스(ECS Service) 구성하기에서 배포 방식을 Rolling Update로 선택해야합니다.

Build spec 변경

  • CodeCommit Console 접속 > 왼쪽 메뉴의 소스 > 리포지토리

  • 리포지토리 리스트 > cicd-demo 선택

  • buildspec.yaml 파일 아래와 같이 편집

<buildspec.yaml>
version: 0.2 
 
phases: 
  install: 
    runtime-versions: 
      java: openjdk8 
      docker: 18 
  pre_build: 
    commands: 
      - echo Logging in to Amazon ECR... 
      - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION) 
  build: 
    commands: 
      - echo Build started on `date` 
      - echo Building the Docker image...    
      - mvn clean package        
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . 
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG 
  post_build: 
    commands: 
      - echo Build completed on `date` 
      - echo Pushing the Docker image... 
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG 
      - printf '[{"name":"cicd-demo","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json 
artifacts: 
  files:  
    - imagedefinitions.json 
cache: 
  paths: 
    - '/root/.m2/**/*' 

추가된 내용은 아래와 같습니다.

  • 이미지의 이름과 주소를 imagedefinitions.json 파일에 쓰기 및 생성
  • imagedefinitions.json 파일을 artifacts file에 추가

파이프라인 구성(Rolling Update)

  • CodePipeline 콘솔에 접속 > 왼쪽 메뉴의 파이프라인 > 파이프라인 선택
  • 메인 화면 > 파이프라인 생성 버튼 선택

파이프라인 설정 선택

  • 파이프라인 이름 > cicd-demo 입력
  • 서비스 역할 > 새 서비스 역할 선택
  • 역할 이름 > codepipeline-cicd-demo-role > 다음 버튼 선택

소스 스테이지 추가

  • 소스 공급자 > AWS CodeCommit 선택
  • 리포지토리 이름 > cicd-demo 선택
  • 브랜치 이름 > master 선택 > 다음 버튼 선택

빌드 스테이지 추가

  • 빌드 공급자 > AWS CodeBuild 선택
  • 프로젝트 이름 > cicd-demo 검색 및 선택 > 다음 버튼 선택

배포 스테이지 추가

  • 배포 공급자 > Amazon ECS 선택
  • 클러스터 이름 > cicd-demo 선택
  • 서비스 이름 > cicd-demo 선택
  • 이미지 정의 파일 > imagedefinitions.json 입력 > 다음 버튼 선택

검토

  • 파이프라인 검토 후 다음 파이프라인 생성 버튼 선택

파이프라인 실행

파이프라인을 생성하면 자동으로 소스코드 통합 > 빌드 > 배포 과정이 발생합니다.

이 후에는 1)수동으로 파이프라인을 실행하거나 2)CodeCommit의 소스코드 변경사항을 감지해 실행됩니다.

수동으로 파이프라인 실행

  • CodePipeline Console > 왼쪽 메뉴의 파이프라인 > 파이프라인 선택

  • 메인 화면의 파이프라인 리스트 > cicd-demo 선택

  • 변경사항 릴리스 버튼을 선택

변경사항에 의해 자동으로 실행

  • CodeCommit Console 접속 > 왼쪽 메뉴의 소스 > 리포지토리

  • 리포지토리 리스트 > cicd-demo 선택

  • src/main/resources/messages/messages.properties 파일 아래와 같이 편집

    메세지의 welcome 프로퍼티를 Welcome에서 Welcome(Version 2)로 변경 > 변경 사항 커밋 버튼 선택

  • CodePipeline Console > 왼쪽 메뉴의 파이프라인 > 파이프라인 선택

  • 메인 화면의 파이프라인 리스트 > cicd-demo 선택

    소스코드 변경을 감지하고 자동으로 빌드와 배포 파이프라인이 실행됨

  • 파이프라인의 배포 단계까지 완료되면 로드밸런서 주소로 접속해서 변경한 메세지가 반영되었는지 확인

다음으로 AWS에서 CI/CD 환경 구성 #5 - 파이프라인 구성(Blue/green), CodePipeline 문서에서 Blue/green deployment 방식의 파이프라인을 구성하는 방법을 살펴보겠습니다.