본문 바로가기

AWS DevOps/AWS CICD 서비스

AWS CodeBuild

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는 다음과 같은 방식으로 동작한다.

 

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