AWS CodeBuild는 소프트웨어 개발에 필요한 소스코드를 컴파일하는 단계에서부터 테스트 후 소프트웨어 배포까지의 단계를 지원하는 완전 관리형 지속적 통합(Continuous Integration)서비스
CodeBuild를 사용하면 자체 빌드 서버가 필요하지 않으며, 빌드 서버를 프로비저닝하거나, 운영/관리 및 확장을 수행할 필요가 없다.
AWS CodeBuild는 빌드를 수행할 볼륨에 따라 인프라가 자동으로 확장 및 축소를 지원하여, 제출되는 빌드에 대해 죽각적으로 처리되므로, 여러 빌드를 동시에 처리할 수 있기 때문에 빌드를 위해 대기하지 않고 빠르고 효율적으로 빌드 작업을 수행한다.
AWS CodeBuild는 Apache Maven, Gradle 등과 같이 널리 사용되는 프로그래밍 언어 및 빌드 도구에 맞게 사전 패키지된 빌드 환경을 제공한다. 사전에 정의된 빌드 환경을 생성하여, CodeBuild에서 지원하는 사전 패키지 형태의 빌드 도구와 런타임을 활용하여, 자체 빌드 도구의 런타임을 AWS CodeBuidl에서 사용할 수 있다.
AWS CodeBuild는 AWS KMS(Key Management Service)를 이용하여 빌드 아티팩트가 암호화되며, AWS IAM(Identity and Access Management)을 통해 권한을 관리할 수 있다. AWS Code 서비스와의 연동을 통해 CI/CD를 위한 완전 자동화 소프트웨어 릴리스 워크플로를 생성하거나 기존 CI/CD 워크플로우에 통합하는 것이 가능
구분 | 내용 |
서비스명 | AWS CodeBuild |
설명 | 소스코드의 컴파일 단계부터 테스트 후 배포 단계까지를 지속적으로 지원하는 완전관리형 지속적 통합 서비스 |
주요 특징 | - 소스 컴파일, 테스트, S/W 패키지를 생성하는 완전 관리형 빌드 서비스 - 지속적인 스케일 조정 및 여러 빌드 동시에 처리 지원 - Docker 이미지를 통한 사용자 요구에 맞는 사용자 지정 빌드 환경 제공 - 사용하는 컴퓨팅 리소스에 대해 분 단위 과금 - CodePipeline, Jenkins와 통합하여 서비스 활용 가능 |
ㅁ AWS CodeBuild 주요 기능
ㅇ 코드에 대한 빌드와 테스트
- AWS CodeBuild는 빌드 작업을 수행하기 위해 사전에 구성된 빌드 환경에서 작업을 수행한다. 이를 위해 소스코드의 위치와 빌드를 위한 설정을 선택해야 한다.
- AWS CodeBuild는 코드를 Build할 것이며, 아티팩트를 Amazon S3 버킷에 저장하거나 아티팩트 저장소에 업로드한다.
- AWS CodeBuild는 Java, Node.js, Python, Go, Ruby, Android 및 Docker를 위한 사전 구성된 빌드 환경을 제공한다.
- Docker 이미지 또는 퍼블릭 Docker Hub에 업로드하거나 Amazon ECR(EC2 Container Registry)를 관리하기 위해 런타임과 도구를 패키징하여 자신만의 빌드 환경을 구성 할 수 있다.
ㅇ 구성 설정
- AWS CodeBuild는 단위 테스트, 코드 패키지 및 Build-To-Package 설치와 같은 명령을 지정할 수 있다.
- 빌드 사양 파일(buildspec.yml) YAML로 구성하여 각 단계에서 수행할 명령어를 정의할 수 있으며, 수행 단계별로 실행하도록 구성할 수 있다.
- 개발 요구에 가장 적합한 컴퓨팅 유형을 선택할 수 있고, 빌드에 최적화된 성능을 발휘하기 위해 빌드에 필요한 사양을 지정할 수 있다.
- CodeCommit, Amazon S3, GitHub와의 연결을 통해 빌드를 시작할 수 있으며, AWS CodePiepline과 연결하여 커밋이 발생할 때마다 자동으로 빌드를 수행할 수 있다.
ㅇ 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Delivery) 워크플로우
- AWS CodeBuild는 AWS를 활용하여 지속적인 통합과 지속적인 배포를 구현할 수 있는 기반을 제공한다.
- 이를통해 개발자는 더욱 자주 소스를 배포할 수 있으며, 소스코드의 컴파일 단계부터 테스트 후 배포 단계까지를 지속적으로 지원하는 완전관리형 지속적 통합 서비스
- 기존에 사용되던 다양한 Tool과의 연동을 통해 기존 워크플로우에 손쉽게 통합할 수 있다.
ㅇ 빌드 프로세스에 대한 모니터링
- AWS CodeBuild는 AWS Management Console, SDK, AWS CLI 및 API에서 빌드에 대한 상세 내역을 확인할 수 있다.
- Build ARN, Build Project, Repository, 시작 및 종료 시간, 빌드 상태 등의 빌드 정보 손쉽게 확인 가능
ㅁ AWS CodeBuild 기대 효과
구분 | 내용 |
완전 관리형 빌드 서비스 | - 빌드 서버와 소프트웨어 설정, 업데이트, 패치 및 관리 필요 없음 - 소프트웨어 설치, 업데이트 또는 관리 필요 없음 |
자동으로 확장 | - 빌드 볼륨 변화에 따른 요구사항을 충족하기 위해 지속적으로 확장 - 빌드 요청이 생성되면 즉시 빌드 처리 - 동시에 빌드를 실행할 수 있으므로, 빌드를 위한 대기열이 필요하지 않음 |
CI/CD 지원 | - CI/CD 수행을 위한 완전 자동형 S/W 릴리스 워크플로우의 필수 구성 요소 - AWS CodeBuild를 기존 CI/CD 워크플로우에 통합 가능 |
순쉬운 확장 | - AWS CodeBuild와 함께 사전에 패키지된 빌드 도구 활용 가능 - 자체 빌드 도구와 런타임을 AWS CodeBuild에서 사용 가능 |
사용한 만큼 지불 | - 빌드를 완료하는 데 소요되는 시간(분)만큼 비용 지불 - 빌드를 수행하지 않으면 요금을 부과하지 않음 |
높은 보안성 | - 빌드 아티팩트는 AWS KM에 의해 관리되는 고객별 키로 암호화 - IAM과 통합되어 프로젝트 구축에 세분화된 권한 할당 가능 |
ㅁ AWS CodeBuild의 실행 방법 및 동작 방식
- AWS CodeBuild를 실행하는 방법은 AWS CodeBuild 콘솔을 사용하거나 AWS CodePiepline 콘솔을 사용하여 CodeBuild를 실행
- AWS Command Line Interface(AWS CLI) 또는 AWS SdK를 사용하여 CodeBuild를 실행할 수 있다.
- AWS CodePipeline의 파이프라인 빌드 또는 테스트를 위한 워크플로우에 AWS CodeBuild를 추가하여 소스코드 빌드 또는 테스트 목적으로 이용할 수 있다.
- AWS CodeBuild 콘솔에서 리포지토리, 빌드 프로젝트, 배포 애플리케이션 및 파이프라인과 같은 리소스를 신속하게 검색하고 확인할 수 있다.
- AWS CodeBuild는 다음과 같은 방식으로 동작한다.
단계 | 내용 |
Source Control | - CodeCommit, GitHub, S3 등의 소스 관리 툴에서 데이터 불러오기 |
Build Project | - Source Control 부터 소스를 가져와 빌드 프로젝트 수행 - Build Project는 CodeBuild에서 빌드 실행 방식 정의 - Build Project는 소스코드 위치, 빌드 환경, 실행할 빌드 명령 및 빌드 출력을 저장할 위치 등의 정보 포함 - Build Environment는 OS, 프로그래밍 언어 실행 시간 및 CodeBuild에서 빌드를 실행하는데 사용되는 도구와 인증서, 권한 등 다양한 환경 정보를 선택함 |
Build Environment | - CodeBuild가 Build Project를 사용하여 Build Environment 생성 - CodeBuild가 빌드 환경에 소스코드 다운로드 - Build Project에 정의된대로 또는 소스코드에 직접 포함된 buildspec 실행 --> buildspec는 CodeBuild가 빌드를 실행하는 데 사용하는 YAML 형식의 빌드 명령 및 관련 설정의 모음 |
S3 Bucket | - Build Environment에서 Output을 Amazon S3 Bucket에 업로드 - Build Environment은 사용자가 buildspec에 지정한 작업 수행 |
Notifications | - Amazon SNS 주제에 빌드 알림을 전송하거나, 빌드가 실행되는 동안 빌드 정보를 CodeBuild 및 Amazon CloudWatch Logs에 전송 |
Destroy Build Environment | - 빌드 작업이 완료된 후 Build Environment을 삭제하고 Clean Up 작업 수행 |
ㅁ AWS CodeBuild의 Build Spec
- 빌드 사양(Build SpeC)은 AWS CodeBuild가 빌드를 실행하는데 사용하는 YAML 형식의 빌드 명령 및 관련 설정의 모음
- 소스 코드의 일부로 빌드 사양을 포함할 수 있으며, 빌드 프로젝트를 생성할 때 빌드 사양을 정의할 수 있다.
- 빌드 사양(buildspec.yml) 파일의 이름에 관계 없이 빌드 프로젝트에 대해 하나의 빌드 사양만 지정할 수 있으며, 빌드 사양은 YAML 형식의 파일로 다음과 같이 구성 가능
version 0.1
# 빌드 단계에서 사용할 변수 정의
environment_variables :
plaintext:
JAVA_HOME: "/usr/lib/jvm/java -8 -openjdk -amd64"
# 빌드 단계에서 사용할 수 있는 작업의 예
phase:
# install 명령을 사용하여 환경 준비나 패키지 설치 수행
install:
commands:
- apt-get update -y
- apt-get install -y maven
# pre_build에서 구문 확인 및 기존 정보 확인
pre_build:
commands:
- echo. Nothing to do in the pre_build phase ...
# build에서 빌드 도구 및 명령어 실행
build:
commands:
- echo Build started on `date`
- mvn install
# post_build에서 추가적인 앱 테스트 및 저장소로 컨테이너 이미지 저장
post_build
commands:
- echo Build completed on `date`
# S3에 아티팩트 생성 및 저장
artifacts :
type: zip
files:
- target/messageUtil -1.0.jar
discard -paths: yes
Phase | Description | Example |
install | 환경 준비나 패키지 설치 작업 수행 | 테스트 프레임워크 설치 |
pre_build | 로그인 단계 또는 종속성 설치와 같은 빌드 전에 실행할 명령 |
Amazon ECR 로그인 후 Ruby 또는 npm 실행 |
build | 컴파일 또는 실행 테스트와 같은 빌드 실행 | sbt, Mocha, RSpec 빌드 |
post_build | 빌드의 성공 또는 실패에 따라 명령 실행 | JAR via Maven 빌드 또는 Amazon ECR로 Docker이미지 푸시 |
'AWS DevOps > AWS CICD 서비스' 카테고리의 다른 글
AWS CodePipeline (0) | 2021.02.21 |
---|---|
AWS CodeDeploy (0) | 2021.02.21 |
AWS CodeCommit (0) | 2021.02.20 |
CI/CD를 위한 도구들 (0) | 2021.02.20 |
CD(Continuous Delivery/Continuous Deployment) - 지속적인 전달 및 배포 (0) | 2021.02.20 |