목적


그동안 프로젝트 CI(Continuous Integration) 관리를 위하여 빌드서버를 따로 관리해야하는 번거로움이 있었는데, 
AWS에서 이러한 어려움을 덜어주기위해 AWS CodeBuild를 출시했다.
보편적으로 사용되고 있는 빌드툴인 젠킨스를 사용하기 위해서는 다소 복잡한 세팅과정과 빌드용 서버가 필요했다.
빌드를 위한 작업자와 서버에 들어가는 비용을 줄이기 위하여, AWS CodeBuild를 사용하려 한다.

빌드하고자하는 프로젝트의 환경은 Maven, Spring4, Github 이다.

AWS CodeBuild란?


CodeBuild는 빌드에 소요되는 시간(분당 $0.005)에 과금하며, 빌드용 서버 사양을 선택할 수 있다.
테스트 해본결과 보통 5분이면 빌드가 완료되었고, 가격으로 따지면 빌드당 $0.025이다. 왠만큼 큰 프로젝트가 아니면 저렴하게 사용할 수 있겠다.
소스 레파지토리는 AWS CodeCommit, GitHub, S3bucket를 사용할 수 있고 언어 대부분의 서버언어를 커버한다.
빌드 스펙은 YAML 양식을 사용하는데 상세 내용은 아래 세팅하기에서 다루겠다.
상세 스펙은 한글로 번역된 페이지를 첨부하여 대신한다.

 빌드 서버를 설치, 설정 및 확장 및 패치 등에 신경쓰지 않고, CodeBuild를 활용하여 개발 과정에서 유연상을 보장하고 여러 형태의 빌드 상태나 호환성의 불일치 문제를 해결할 수 있습니다. CodeBuild를 사용 하면, 사전에 빌드 서버를 프로비저닝 할 필요가 없으며, 대기중인 빌드를 쌓아 두는 대신에 빌드 볼륨을 활용할 수 있도록 자동으로 확장됩니다. 분당 $0.005부터 시작하는 가격으로 분당 기준으로 빌드 리소스에 비용을 지불하기 때문에 사용한 시간만 비용을 지불합니다.

세팅하기


빌드를 위한 서버세팅이 필요 없었기 때문에, 전체적인 빌드 세팅은 젠킨스보다 훨씬 간편했다. 
다만, 레퍼런스가 적고 ASIA쪽 리전은 서비스 이전이라 Oregon 리전을 사용해야하는 번거로움이 있었다.
  • CodeBuild 프로젝트 생성 (Configure your Project)
    • CodeBuild 서비스에서 Create Project를 클릭한다.
    • Project name은 아무거나 상관없다. 
  • Source: What to build
    • 소스코는 github에서 가져오려고한다. 간단하게 사용자 인증을 하면, 내 깃헙의 레파지토리를 볼 수 있다.
  • buildspec.yml 작성
    • 프로젝트 루트레벨에 buildspec.yml 이름의 파일을 생성한다.
    • 실직적으로 빌드를 위한 스크립트내용을 담고 있는 파일이다.

      version : 0.1 (빌드할 프로젝트의 버전)
      environment_variables : (환경 변수로 빌드 시 입력받을 수도 있지만 여기서도 받을 수 있다. 없어도 됨)
      phases : 빌드 단계별 설정으로 pre bulid 와 build만 작성했다.
      artifacts : 빌드 완료 후 결과물 경로를 위한 설정으로 AWS S3에 업로드하기 위한 필수조건이다.


  • Environment: How to build
    • 빌드 스크립트를 buildspec.yml를 통해 정의했다면 빌드 환경만 선택해 주면 된다.
    • OS는 현재 Ubuntu만 사용가능하다. (Java, jdk8 선택)


    • Artifacts: Where to put the artifacts from this build project
      • 빌드 후 생성되는 war 파일을 저장할 곳을 지정한다.
      • 같은 리전의 S3 저장소만 사용할 수 있음에 유의한다.
    • Service role & Advanced settings
      • 서비스 롤과 빌드 서버 성능, 환경변수값을 지정할 수 있다.
      • 자세한 설명은 생략한다.


빌드하기


이제 Source Version에 빌드할 브랜치명만 추가하면 프로젝트를 빌드할 수 있다.
빌드 과정과 로그가 친절하게 표시된다.


빌드과 완료되면 단계별 결과와 로그를 확인 할 수 있다.



빌드가 끝나면, 앞서 세팅해두었던 S3에 artifact가 저장되어있다. 완료~!

삽질내용,  앞으로 AWS CodeDeploy 연동 


buildspec.yml 을 정의하지 않고 커맨드라인으로 빌드 스크립트를 작성했더니, 빌드 완료 후 S3에 올릴 artifact를 찾지 못했다.
pom에 등록된 의존성 중에서 oracle 관련한 라이브러리를 가져오지 못했다. -> pom에 레파지토리 추가.

이제 CodeDeploy를 이용하여 무중단 자동 배포만 준비하면 된다. 
Jenkins를 알고 CodeBuild를 설정해서 그런지, 무척이나 쉽게 느껴졌다.
하루빨리 Seoul 리전에도 서비스 되길! 


+ Recent posts