1. 개요

CodeBuild를 통해 빌드해보자.


2. 참고문서


3. CodeBuild 생성

3-1. 프로젝트 구성

  • 이름 입력

3-2. 빌드 대상

  • S3, CodeCommit 등에서 선택

3-3. 환경 이미지

  • CodeBuild가 제공하는 이미지를 사용하거나 도커 이미지 지정
  • 각 언어 별 버전 선택, 예를 들어 자바라면 6, 7, 8 중에 선택 가능하다.

3-4. 이 빌드 프로젝트의 아티팩트를 넣을 위치

  • S3 정보 입력
  • 그러면 해당 CodeBuild 정책에 다음과 같은 내용이 포함된다. (s3-codebuild-myapp 이라는 버킷 지정시임)
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::s3-codebuild-myapp/*"
            ],
            "Action": [
                "s3:PutObject"
            ]
        }

 

[ 참고 : 아티팩트란? (출처: https://www.lesstif.com/pages/viewpage.action?pageId=18219542) ]

아티팩트는 소프트웨어 개발 프로젝트를 진행하면서 생성하는 다양한 산출물을 의미한다. 각종 설계 문서, 유즈 케이스, UML 다이어그램, 소스 코드, 소스를 빌드하여 생성된 라이브러리나 실행 파일도 모두 아티팩트에 속한다. 자바 프로젝트를 빌드할 때 많이 사용되는 메이븐(maven) 에서는 빌드로 생성되는 프로젝트의 결과물을 의미하며 아티팩트는 자바 프로젝트의 성격에 따라 다르지만 일반적으로는 .jar, .war, .ear 등의 확장자를 갖게 된다. .jar 확장자를 갖는 자바 라이브러리는 아티팩트의 일종이므로 이번 장에서 라이브러리라고 할 경우 아티팩트와 동일한 의미로 이해하면 된다.

3-5. 역할 (Role) 설정


4. 문제 해결

4-1. buildspec.yml: no such file or directory

CodeCommit으로부터 빌드할 때 Repository 바로 아래에 buildspec.yml 파일이 존재하는지 확인이 필요하다.

version: 0.1

phases:
  post_build:
    commands:
      - echo Build completed on `date`
      - mvn package
artifacts:
  files:
    - target/myApp.war
  discard-paths: yes

4-2. No matching artifact paths found

[Container] 2018/01/12 04:32:40 Phase complete: POST_BUILD Success: true
[Container] 2018/01/12 04:32:40 Phase context status code: Message: 
[Container] 2018/01/12 04:32:40 Preparing to copy artifacts
[Container] 2018/01/12 04:32:40 Expanding base directory path: .
[Container] 2018/01/12 04:32:40 Assembling file list
[Container] 2018/01/12 04:32:40 Expanding .
[Container] 2018/01/12 04:32:40 Expanding artifact file paths for base directory .
[Container] 2018/01/12 04:32:40 Assembling file list
[Container] 2018/01/12 04:32:40 Expanding target/myApp.war
[Container] 2018/01/12 04:32:40 Skipping invalid artifact path target/ppp.war
[Container] 2018/01/12 04:32:40 Phase complete: UPLOAD_ARTIFACTS Success: false
[Container] 2018/01/12 04:32:40 Phase context status code: CLIENT_ERROR Message: No matching artifact paths found
[Container] 2018/01/12 04:32:43 Runtime error (*errors.errorString: No matching artifact paths found)