IT/AWS

AWS CodeBuild로 빌드 후 S3에 빌드 결과파일 업로드

twofootdog 2020. 2. 11. 16:14

이번 글에서는 AWS CodeCommit에 있는 스프링부트 소스코드를 AWS CodeBuild를 통해서 빌드를 수행한 후 빌드된 결과파일(아티팩트(JAR))을 S3에 업로드하는 실습을 진행해볼 것이다.

이 글의 순서는 다음과 같다.

 

  1. AWS CodeBuild란 무엇인가?
  2. 사전준비
  3. AWS CodeBuild 설정
  4. AWS CodeBuild 테스트

 


 

1. AWS CodeBuild란 무엇인가?

AWs CodeBuild란 클라우드의 완전 관리형 빌드 서비스로, 소스코드를 컴파일하고 단위테스트를 실행하며 배포할 준비가 완료된 아티팩트 파일을 생성한다. CodeBuild는 빌드서버를 프로비저닝 및 관리할 필요가 없으며 Maven, Gradle과 같은 널리 사용되는 프로그래밍 언어 및 도구에 맞게 사전 패키지된 빌드 환경을 제공한다. 

AWS CodeBuild는 다음과 같은 장점이 있다.

  1. 빌드 서버를 직접 설정(패치 및 업그레이드 등)하고 관리할 필요가 없다.
  2. 사전 빌드된 빌드환경을 제공하기 때문에 빌드스크립트 선택 및 작성 후 시작 가능하다.
  3. 빌드요구사항 충족을 위한 확장/축소가 가능하며 사용한 빌드 시간만큼만 비용을 지불한다
    (비용정보 : https://aws.amazon.com/ko/codebuild/pricing/)

 


 

2. 사전준비

이번 실습을 수행하기 위해서는 다음과 같은 준비가 되어 있어야 한다.

  1. AWS CodeCommit 저장소 생성(https://twofootdog.tistory.com/33 참고) 스프링부트 소스 업로드
  2. AWS S3 생성(https://twofootdog.tistory.com/36 참고)

 


 

3. AWS CodeBuild 설정

그럼 AWS CodeBuild 설정을 해보도록 하자. 설정 순서는 우선 1)AWS CodeBuild를 생성한 후 2)프로젝트 소스의 Root 디렉토리에 buildspec.yml파일을 생성하면 된다.

 

3-1. AWS CodeBuild 생성

AWS 홈페이지에서 [콘솔에 로그인] -> [CodeBuild] -> [빌드 프로젝트 생성]을 선택한다.

 

 

[프로젝트 구성]에서 [프로젝트 이름]을 입력한다.

 

 

[소스]에서는 [소스 공급자]를 AWS CodeCommit으로 선택하고(AWS CodeCommit의 소스를 빌드할 것이기 때문에), 

AWS CodeCommit의 리포지토리를 선택한다. [참조 유형]은 브랜치를 선택하고 [브랜치]는 master 브랜치를 선택하여 master 브랜치에 push된 소스를 빌드하도록 한다.

 

 

[환경]에서는 [운영 체제]로 Amazon Linux2를 선택하고, 그 외의 설정은 아래와 같이 선택한다.

 

 

[Buildspec]의 [빌드 사양]은 [buildspec 파일 사용]을 선택하고, buildspec 이름을 적는다.  해당 buildspec 파일은 프로젝트 소스(스프링부트) root 디렉토리에 작성할 것이다.

 

[아티팩트]에서는 빌드 후 생성되는 아티팩트에 대한 설정을 하는 부분으로 [유형]에는 아티팩트 파일이 올라갈 곳을 지정한다. 이 글에서는 Amazon S3를 넣었다.

[버킷 이름]에는 아티팩트가 들어갈 버킷 이름을 적는다.

[경로]에는 버킷 다음 디렉토리 명들을 적는다.

[이름]에는 [아티팩트 패키징] 분류에 따라 다른데, 아티팩트 패키징이 없으면 [경로]다음 디렉토리가 되며 (S3내의 [버킷명]/[경로]/[이름]/XXX.jar 로 파일이 생성된다), 아티팩트 패키징이 zip인 경우는 zip파일명이 된다([버킷명]/[경로]/이름.zip으로 jar파일이 패키징된다)

아티팩트 패키징이 왜 필요한지 codebuild만 공부할 때는 잘 몰랐는데, codedeploy를 할 때 zip이나 tar등으로 패키징 된 아티팩트 파일을 서버로 가져와서 배포를 하기 때문에 S3에 아티팩트를 저장하게 되는 경우 꼭 필요한 것 같다(이건 codedeploy를 공부하게 되면 자연스럽게 이해가 된다).

 

 

아티펙트에서 [추가 구성]을 클릭한 후 [캐시 유형]에 Amazon S3를 입력한다. 캐시는 서비스가 빌드 될 때 빌드에 필요한 의존성 파일들(예를 들면 maven dependency 등)을 저장해 놓고 빌드할 때 쓸 수 있게끔 한다. 

 

 

[로그]에서는 빌드 로그를 CloudWatch와 S3에 적재할 것인지를 선택한다. 해당하는 것을 선택한 후 [빌드 프로젝트 생성] 버튼을 클릭한다. 

 

 

그러면 다음과 같이 CodeBuild 프로젝트가 생성된다. 

 

 

3-2. buildspec.yml 생성

다음으로 AWS CodeBuild의 buildspec에서 정의한 buildspec.yml파일을 CodeCommit에 있는 스프링부트 소스 Root 디렉토리에 생성한다.

buildspec.yml : 

version: 0.2
phases:
  build:
    commands:
      - echo Build Starting on `date`
      - chmod +x ./gradlew
      - ./gradlew build
  post_build:
    commands:
      - echo $(basename ./build/libs/*.jar)
      - pwd
artifacts:
  files:
    - build/libs/*.jar
  discard-paths: yes
cache:
  paths:
    - '/root/.gradle/caches/**/*'

buildspec.yml 파일에 대해 간단히 설명하자면

  • version : 0.2 권장
  • phases.build.commands : 빌드 시 수행되는 명령어. gradlew에 실행권한을 준 후 gradlew build 수행
  • phases.post_build step.commands : 빌드 후 수행되는 명령어. build/libs에 있는 jar파일명 화면 출력
  • artifacts : 빌드결과파일. [discard-paths]에 yes값을 줘서 해당 빌드결과파일이 s3로 업로드 될 때 [files]에 기술된 path(build/libs)는 무시되고 파일명으로만 업로드 될 수 있도록 한다.
  • cache.paths : 이곳의 파일을 S3 cache에 등록. maven의 경우는 '/root/.m2/**/*'

 


 

4. AWS CodeBuild 테스트

프로젝트 빌드를 수행하려면 [빌드 시작] 버튼을 클릭한다.

 

그리고 다음 화면에서도 [빌드 시작] 버튼을 누른다.

 

 

빌드를 수행하면 [빌드 상태]가 나오며 [빌드 로그] 확인이 가능하다.

 

 

[콘솔에 로그인] -> [S3]에서 버킷을 확인해보면 빌드결과파일(codebuild 디렉토리 내)과 cache 및 log가 생성된 것을 확인할 수 있다. 성공!!

 


 

참고

https://jojoldu.tistory.com/282

 

2) AWS로 배포하기 시리즈 - 2. AWS Code Build로 빌드하기

지난 시간에 Code Deploy 사용하는 방법에 대해 설명드렸습니다. AWS와 같은 클라우드 서비스가 등장하기전까지 IDC 환경에선 젠킨스 혹은 TravisCI와 같은 CI Tool에서 Build & Test & Deploy를 다같이 처리했었..

jojoldu.tistory.com

https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-spec-ref.html

 

https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-spec-ref.html

CodeBuild의 빌드 사양 참조

docs.aws.amazon.com