초보자도 이해하는 AWS Code Pipeline CI/CD 환경 만들어보기

AWS Code 시리즈를 이용하여 Code Pipeline으로
2022.11.24

안녕하세요 클래스메소드의 수재입니다.
이번 글에서는 AWS Code 시리즈를 이용하여 CI/CD 환경을 만들어보려 합니다.

구성

Github 에 소스 코드가 푸시되면 자동으로 배포되도록 구성되어 있으며 다음과 같은 워크플로우로 진행됩니다.

  1. 유저가 깃 허브에 코드를 푸시하면 Code Pipeline에서 이를 트리거로 인식하여 작동합니다
  2. 소스 코드를 Code Build 에서 빌드하고 아티팩트를 S3에 저장합니다
  3. 아티팩트 저장까지 문제없이 끝났다면 Deploy에서 아티팩트를 확인하고 배포를 준비합니다
  4. 준비가 완료되면 EC2에 배포합니다

사전 조건

이번 글에서는 다음과 같은 사전 조건이 있습니다.

  • 이번 글에서 사용하는 소스 코드는 다음 공식 문서의 코드를 그대로 사용합니다. 따라서 글을 그대로 따라한다면 Maven 환경을 구축할 필요가 있습니다.
    • CodeDeploy sample for CodeBuild
    • 소스 코드까지 똑같이 따라할 필요는 없으므로 변화를 확인할 수 있는 정도의 소스 코드만 준비하면 됩니다.
    • 단 빌드 후에 appspec.yml이 아티팩트에 포함되어 있어야 합니다
  • 배포할 대상이 EC2 인 경우에는 필요한 인스턴스 프로필을 설정해줍니다
    • Code Deploy 관련 IAM 공식 문서
    • Code Deploy Agent를 주기적으로 업데이트 하거나 이번 작업을 하며 System Managers로 인스톨 하는 경우에는 EC2가 System Managers로 컨트롤 가능한 상태여야 합니다. 자세한 내용은 공식 문서를 참고해주세요.
  • 배포 대상을 구분할 수 있는 태그가 부여되어 있어야 합니다
  • Github를 이용할 수 있는 환경이 구성되어 있어야 합니다
    • Github의 리포지토리에 이미 소스 코드가 푸시되어 있다고 가정하고 작업을 진행합니다.
  • 아티팩트 등을 저장할 S3 버킷이 생성되어 있어야 합니다
    • 권한 등은 따로 설정할 필요가 없습니다
  • 콘솔 작업을 전제로 합니다

만들어보기

각 Code 서비스의 콘솔에서 Code Build나 Code Deploy를 작성해도 되지만 이번에는 Code Pipeline에서 작성해보도록 하겠습니다.

Code Build 프로젝트 생성

우선 코드를 빌드하기 위해 Code Build의 프로젝트를 먼저 생성해줍니다.
거의다 보면 설정할 수 있는 옵션이지만 몇 가지 중요한 부분만 설명하자면
이번 글에서는 깃 허브를 소스 프로바이더로 지정하였지만 필요하다면 S3나 Code Commit 등 필요한 서비스를 지정해줍니다.
이후에 파이프라인에 소스 스테이지를 추가하기 때문에 웹 훅은 체크를 해제합니다.

환경(Envirionment)는 필요한 빌드 서버의 OS를 선택해줍니다.
아래의 추가 설정(Additional configuration)에서 서버의 스펙이나 타임 아웃 등의 옵션도 선택할 수 있습니다. 스펙에 따라 요금이 다르니 확인하고 적절한 스펙을 선택하도록 합니다.
저는 다음과 같이 설정하였습니다.

그리고 아티팩트를 저장할 곳을 지정해줍니다.

생성한 후 빌드를 해봅니다. 문제가 없다면 이어서 Code Deploy로 넘어갑니다.

Code Deploy 어플리케이션 생성

Code Deploy의 어플리케이션을 생성합니다.

우선 배포에 사용할 IAM 역할을 생성합니다.
IAM 콘솔에서 역할에 들어간 후 역할을 생성합니다.
케이스에서 CodeDeploy를 선택합니다.

필요한 권한은 설정되어 있습니다.
마지막에 역할 이름만 설정해줍시다.

그리고 Code Deploy 콘솔의 어플리케이션에서 어플리케이션을 생성합니다.
어플리케이션 이름과 배포 할 대상만 선택하면 됩니다.

이후 배포 그룹을 생성합니다.
배포 그룹 이름과 방금 생성한 역할을 설정합니다.
그리고 배포할 환경과 방식, 배포 대상이 EC2인 경우 Agent의 인스톨, 업데이트 스케줄 등을 설정합니다.
저는 다음과 같은 설정이 되었습니다.

그리고 배포 작성(Create Deployment)를 눌러 배포를 작성합니다.
개정(Revision)이 있는 곳을 지정합니다. 혹시 이번 배포만 배포 방식을 변경할 필요가 있다면 배포 그룹 재정의(Deploy Group Override)에서 설정합니다.
문제없이 배포 되었다면 마지막으로 Code Pipeline을 생성합니다.

Code Pipeline 생성

Code Pipeline 콘솔에서 파이프라인 작성을 클릭합니다.
우선 파이프라인의 이름과 역할을 작성합니다.

소스 스테이지 설정

이번에는 Github를 소스 프로바이더로 설정하겠습니다.
[Github (Version2)]를 지정하고 Github 연결을 생성합니다. 연결은 연결 이름을 설정한 후, 기존 깃허브 앱이 없다면 새롭게 설정하고 연결하시면 됩니다.
문제없이 설정됐다면 다음과 같이 됩니다.

빌드 스테이지 설정

이어서 방금 생성했던 Code Build의 프로젝트를 선택합니다.

디플로이 스테이지 설정

배포 프로바이더를 Code Deploy로 선택하면 처음에 작성한 Code Deploy 어플리케이션을 선택할 수 있습니다.

여기까지 설정이 잘 끝났다면 다음을 눌러 내용을 확인한 후에 문제가 없다면 파이프라인을 생성합니다.
문제없이 끝났다면 배포까지 한번씩 실행됩니다. 배포를 원치 않는다면 중지를 눌러주세요.

배포 대상에도 제대로 반영이 되었는지 확인해봅니다.

깃 허브에 코드 업로드해보기

전체적인 파이프라인에 문제가 없다면 마지막으로 깃 허브에 코드를 수정하여 푸시해봅시다.
파이프라인이 웹 훅을 읽고 배포까지 문제없이 진행된다면 이번 작업은 완료입니다.

마무리

여러 서비스를 혼합해서 쓰다보니 중간중간에 필요한 IAM 등의 전제 조건이 완료되어 있지 않다면 실패하는 경우가 있습니다.
또한 buildspec이나 appspec 등을 잘못 쓰는 경우(확장자명이 이상한 경우도)에도 실패하는 경우가 있습니다.

테스트 코드가 필요한 경우에는 Code Build에 적용할 수 있으니 필요에 따라 이용하도록 합니다.
다음에는 Github Actions를 이용해서 CI/CD의 파이프라인을 관리하는 방법에 대하여 알아보도록 하곘습니다.

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 언제나 환영합니다. must01940 지메일로 연락 주시면 감사합니다!


본 블로그 게시글을 보시고 문의 사항이 있으신 분들은
클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !