[AWS] CodePipeline으로 CI/CD 구현하기
'AWS로 구현하는 MAS와 컨테이너 오캐스트레이션' 강의를
블로그를 통해 구매하시는 분들에게만 10%할인 중입니다.
이미지를 클릭하고, 아래 쿠폰번호를 입력해 주세요!
16861-259843d6c2d7
AWS CodeDeploy 및 CI/CD 에 대한 설명은 아래 글로 대신합니다.
CI/CD 파이프라인 구축을 위해 AWS CodePipeline 설정
CodePipeline이 CI/CD 파이프라인에서 담당할 과정은 다음과 같다
- 지정한 GitHub 리포지토리의 특정 브랜치에 대한 소스 코드의 변경 감지
- 변경 감지 시 빌드 공급자를 통한 빌드 (CodeBuild)
- 빌드 완료 시 배포 공급자를 통한 배포 (CodeDeploy)
- 파이프라인 과정 모니터링
- 파이프라인 과정 알림
AWS CodePipeline 파이프라인 생성
AWS CodePiepline 파이프라인 생성 과정은 총 5가지 스텝으로 되어있고 파이프라인 설정 선택, 소스코드의 변경을 감지할 소스 스테이지, 빌드 과정을 설정할 빌드 스테이지, 배포 과정을 설정할 배포 스테이지, 마지막 검토가 있다.
빌드 스테이지, 배포 스테이지는 건너뛰어 설정을 안 할 수 있고 추후에 추가가 가능하다.
Step 1 - 파이프라인 설정 선택
해당 스텝에서는 전반적인 파이프라인의 역할 및 보안관련 설정이 포함된다.
파이프라인의 이름을 지정하고 서비스 역할은 기존에 있다면 기존 서비스 역할을 선택하고 그렇지 않다면 '새 서비스 역할' 을 선택한다.
고급 설정
- 아티팩트 스토어
- 기본 위치 - codePipeline 에서 기본값으로 S3 버킷을 생성하여 해당 버킷에 아티팩트를 저장한다. 별다른 구성 없이 쉽게 아티팩트를 저장할 수 있다.
- 사용자 지정 위치 - 사용자가 원하는 S3 버킷에 아티팩트를 저장한다. 보안 및 접근 제어를 더 세밀하게 구성할 수 있고, 다른 파이프라인이나 AWS 서비스에서 동일한 버킷을 공유하여 아티팩트 재사용 등이 가능하다.
- 암호화 키
- 기본 AWS 관리형 키 - AWS에서 관리하는 키를 사용하여 CodePipeline이 자동으로 키를 생성하고 관리한다. 기본적인 보안 수준을 제공하며, 별다른 관리가 필요없다.
- 고객 관리형 키 - 사용자가 직접 키를 생성하여 관리하여 생성, 권한 부여 등을 직접 제어한다. 보다 세밀한 보안 요구사항을 적용할 수 있지만 추가적인 관리가 필요하다.
Step 2 - 소스 스테이지 추가
해당 스텝에서는 소스 공급자(GitHub) 및 공급받은 소스에 대한 변경 감지 옵션을 선택하다.
- 소스 공급자
- GitHub(버전 1) - GitHub API v3를 사용하는 이전에 사용되던 방식으로 인증 토큰을 사용해 통신한다. 대량의 변경 사항을 처리하는데 어려움이 있을 수 있고 GitHub 액션을 사용할 수 없다. 현재는 사용을 권장하지 않는다.
- GitHub(버전 2) - GitHub API v4를 사용하고 개별적인 사용자 권한을 통해 GitHub과 연결된다. 페이징이나 정렬과 같은 기능이 추가되었으며 대량의 변경 사항 처리가 향상되었고. GitHub액션을 사용할 수 있다. 해당 버전 사용을 권장.
- 연결 - 기존에 구성한 기존 연결이 있으면 선택하고 아니라면 'GitHub에 연결' 버튼을 통해 연결할 리포지토리에 대한 연결을 진행한다.
- 리포지토리 이름, 브랜치 이름 - 변경 감지 및 소스 공급을 할 리포지토리와 브랜치를 선택
- 변경 감지 옵션 - 체크 시 소스코드 변경을 감지하여 파이프라인이 시작된다.
- 출력 아티팩트 형식 - 파이프라인 실행 중 생성된 아티팩트의 형식을 지정. 파이프라인 결과와는 무방하고, 아티팩트의 전송 방식이나 구성을 변경함에 따라 선택이 바뀔 수 있다.
Step 3 - 빌드 스테이지 추가
해당 스텝에서는 빌드 공급자를(CodeBuild) 선택하고 해당 빌드 공급자의 빌드 방식에 대한 설정을 한다.
기존에 생성했던 CodeBuild의 프로젝트를 선택한다.
- 빌드 유형
- 단일 빌드 - 단일 CodeBuild 빌드 작업을 생성하고 실행한다. 빌드 단계가 실행될 때마다 하나의 빌드 작업이 생성되며, 해당 작업은 단일 개체로 처리된다. 빌드 작업이 직렬로 처리되며, 각 단계의 이전 빌드가 성공적으로 완료된 후 다음 빌드 단계가 실행된다.
- 배치 빌드 - 여러 개의 CodeBuild 빌드 작업을 배치로 생성하고 실행한다. 여러 빌드 작업을 동시에 실행하고, 병렬로 진행될 수 있다. 빌드 효율성을 높이고 시간을 단축시킬 수 있다.
Step 4 - 배포 스테이지 추가
해당 스텝에서는 배포 공급자(CodeDeploy)를 선택한다.
이전에 생성한 CodeDeploy의 애플리케이션 및 배포그룹을 선택한다.
Step 5 - 검토
해당 스텝에서는 이전 스텝에 설정한 내용에 대한 검토 후 '파이프라인 생성' 버튼을 통해 파이프라인을 생성한다.
파이프라인 실행
파이프라인 최초 생성 시 자동으로 실행이 되는데 이 때 상황에 따라 설정이 완료되지 않은 상태에서 실행이되어 권한의 문제가 발생할 수 있지만 재실행하면 해당 문제 없이 진행된다.
하지만 재 실행시에도 아래와 같은 접근 관련된 CodeDeploy의 에러가 발생할것다.
해당 에러는 S3버킷에 Build 아티팩트가 없을 때 발생하는데 해결하기위해서는 codeBuild가 빌드시에 사용할 buildspec.yml 을 수정해줘야한다.
version: 0.2
phases:
pre_build:
commands:
... 기존 코드
artifacts:
files:
- appspec.yml
- scripts/**/*
코드에서 아래의 artifacts 부분을 추가하면 files 에 해당하는 파일들을 zip 파일로 파이프라인 설정에 따라 CodeBuild가 Build 아티팩트를 생성하게된다.
수정사항을 적용하고 파이프라인의 빌드가 완료되면 다음과 같이 빌드 아티팩트 파일이 지정한 S3버킷에 생성된다.
다음과 같이 파이프라인 모든 과정이 성공되고 서버에는 새로운 이미지가 자동으로 실행된것을 확인할 수 있다.