CodeBuild 시작하기 - AWS CodeBuild

CodeBuild 시작하기

다음 자습서에서는 AWS CodeBuild를 사용하여 샘플 소스 코드 입력 파일 집합을 배포 가능한 소스 코드 버전으로 빌드합니다.

두 자습서의 입력과 결과는 동일하지만 한 자습서는 AWS CodeBuild 콘솔을 사용하고 다른 자습서는 AWS CLI를 사용합니다.

중요

AWS 루트 계정을 사용하여 이 자습서를 완료하지 않는 것이 좋습니다.

콘솔을 사용하여 AWS CodeBuild 시작하기

이 자습서에서는 AWS CodeBuild를 사용하여 샘플 소스 코드 입력 파일 모음(빌드 입력 결과물 또는 빌드 입력)을 소스 코드의 배포 가능한 버전(빌드 출력 결과물 또는 빌드 출력)으로 빌드합니다. 특히, CodeBuild가 일반적인 빌드 도구인 Apache Maven을 사용하여 Java 클래스 파일 세트를 Java Archive(JAR) 파일에 빌드하도록 명령을 지정합니다. 이 자습서는 Apache Maven이나 Java에 익숙하지 않아도 완료할 수 있습니다.

CodeBuild 콘솔, AWS CodePipeline, AWS CLI 또는 AWS SDK를 통해 CodeBuild 작업을 수행할 수 있습니다. 이 자습서는 CodeBuild 콘솔을 사용하는 방법을 설명합니다. CodePipeline 사용에 대한 자세한 내용은 CodePipeline에서 CodeBuild 사용 섹션을 참조하세요.

중요

이 자습서의 단계에서는 AWS 계정에 요금이 부과될 수 있는 리소스(예: S3 버킷)를 생성해야 합니다. 여기에는 CodeBuild 및 AWS 리소스에 대한 가능한 요금 및 Amazon S3, AWS KMS, CloudWatch Logs와 관련된 작업이 포함됩니다. 자세한 내용은 AWS CodeBuild 요금, Amazon S3 요금, AWS Key Management Service 요금Amazon CloudWatch 요금을 참조하세요.

1단계: 소스 코드 생성

(콘솔을 사용하여 AWS CodeBuild 시작하기의 일부)

이 단계에서는 CodeBuild가 출력 버킷을 빌드하도록 할 소스 코드를 생성합니다. 이 소스 코드는 두 개의 Java 클래스 파일 및 Apache Maven Project Object Model(POM) 파일로 구성됩니다.

  1. 로컬 컴퓨터나 인스턴스의 빈 디렉터리에 다음 디렉터리 구조를 생성합니다.

    (root directory name) `-- src |-- main | `-- java `-- test `-- java
  2. 원하는 텍스트 편집기를 사용하여 다음 파일을 생성하고 이름을 MessageUtil.java로 지정한 다음 이를 src/main/java 디렉터리에 저장합니다.

    public class MessageUtil { private String message; public MessageUtil(String message) { this.message = message; } public String printMessage() { System.out.println(message); return message; } public String salutationMessage() { message = "Hi!" + message; System.out.println(message); return message; } }

    이 클래스 파일은 자신에게 전달되는 문자열을 출력으로 생성합니다. MessageUtil 생성자는 문자열을 설정합니다. printMessage 메서드는 출력을 생성합니다. salutationMessage 메서드는 Hi! 다음에 문자열을 출력합니다.

  3. 다음 파일을 생성하고 이름을 TestMessageUtil.java로 지정한 다음 이를 /src/test/java 디렉터리에 저장합니다.

    import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.assertEquals; public class TestMessageUtil { String message = "Robert"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testPrintMessage() { System.out.println("Inside testPrintMessage()"); assertEquals(message,messageUtil.printMessage()); } @Test public void testSalutationMessage() { System.out.println("Inside testSalutationMessage()"); message = "Hi!" + "Robert"; assertEquals(message,messageUtil.salutationMessage()); } }

    이 클래스 파일은 MessageUtil 클래스의 message 변수를 Robert로 설정합니다. 그런 다음 테스트를 수행하여 RobertHi!Robert 문자열이 출력에 나타나는지 여부를 확인하여 message 변수가 성공적으로 설정되었는지를 확인합니다.

  4. 다음 파일을 생성하고 이름을 pom.xml로 지정한 다음 이를 루트(최상위) 디렉터리에 저장합니다.

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>messageUtil</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Message Utility Java Sample App</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> </plugins> </build> </project>

    Apache Maven은 이 파일의 지침을 따라 MessageUtil.javaTestMessageUtil.java 파일을 messageUtil-1.0.jar이라는 파일로 변환한 다음 지정된 테스트를 실행합니다.

이때 다음과 같이 디렉터리 구조가 나타나야 합니다.

(root directory name) |-- pom.xml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java

2단계: buildspec 파일 생성

(이전 단계: 1단계: 소스 코드 생성)

이 단계에서는 빌드 사양 파일을 생성합니다. buildspec은 CodeBuild가 빌드를 실행하는 데 사용하는 YAML 형식의 빌드 명령 및 관련 설정의 모음입니다. 빌드 사양 없이는 CodeBuild가 빌드 입력을 빌드 출력으로 성공적으로 변환할 수 없으며, 빌드 환경의 빌드 출력 아티팩트를 찾아 출력 버킷에 업로드할 수도 없습니다.

다음 파일을 생성하고 이름을 buildspec.yml로 지정한 다음 이를 루트(최상위) 디렉터리에 저장합니다.

version: 0.2 phases: install: runtime-versions: java: corretto11 pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - mvn install post_build: commands: - echo Build completed on `date` artifacts: files: - target/messageUtil-1.0.jar
중요

빌드 사양 선언은 올바른 YAML이어야 하므로 빌드 사양 선언의 공백이 중요합니다. 빌드 사양 선언의 공백 수가 YAML과 맞지 않으면 빌드가 즉시 실패할 수 있습니다. YAML 검사기를 사용하여 빌드 사양 선언이 올바른 YAML인지 여부를 테스트할 수 있습니다.

참고

소스 코드에 빌드 사양 파일을 포함하는 대신, 빌드 프로젝트를 생성할 때 빌드 명령을 별도로 선언할 수 있습니다. 이 방법은 매번 소스 코드 리포지토리를 업데이트하지 않아도 되도록 여러 개의 빌드 명령이 있는 소스 코드를 빌드하려는 경우 유용합니다. 자세한 내용은 buildspec 구문 단원을 참조하십시오.

이 빌드 사양 선언에서:

  • version은 사용 중인 빌드 사양 표준의 버전을 나타냅니다. 이 빌드 사양 선언은 최신 버전인 0.2을 사용합니다.

  • phases는 CodeBuild가 명령을 실행하도록 지시할 수 있는 빌드 단계를 나타냅니다. 여기에서는 이 빌드 단계가 install, pre_build, buildpost_build로 나열되어 있습니다. 이 빌드 단계 이름의 철자는 변경할 수 없으며 추가로 빌드 단계 이름을 생성할 수도 없습니다.

    이 예제에서는 build 단계 중에 CodeBuild가 mvn install 명령을 실행합니다. 이 명령은 Apache Maven이 Java 클래스 파일을 컴파일 및 테스트하고 컴파일된 Java 클래스 파일을 빌드 출력 결과물에 패키지하도록 지시합니다. 그리고 몇 가지 echo 명령을 각 빌드 단계에 추가하여 이 연습을 마치게 됩니다. 이 자습서의 뒷부분에서 자세한 빌드 정보를 확인할 때 이러한 echo 명령의 출력을 확인하면 CodeBuild가 명령을 실행하는 방법 및 명령 실행 순서를 이해하는 데 많은 도움이 됩니다. (이 예에는 모든 빌드 단계가 포함되어 있지만, 해당 단계에서 아무 명령도 실행하지 않으려면 빌드 단계를 포함하지 않아도 됩니다.) 빌드 단계마다, CodeBuild는 처음부터 끝까지 한 번에 하나씩 나열된 순서로 지정된 각 명령을 실행합니다.

  • artifacts는 CodeBuild가 출력 버킷에 업로드하는 빌드 출력 아티팩트 세트를 나타냅니다. files는 빌드 출력에 포함할 파일을 나타냅니다. CodeBuild는 빌드 환경에 target 상대 디렉터리에 있는 단일 messageUtil-1.0.jar 파일을 업로드합니다. 파일 이름 messageUtil-1.0.jar 및 디렉터리 이름 target은 Apache Maven이 이 예제에서만 빌드 출력 결과물을 생성 및 저장하는 방식에 따라 달라집니다. 사용자 자체 빌드에서는 이러한 파일 이름과 디렉터리가 다릅니다.

자세한 내용은 buildspec 참조을 참조하세요.

이때 다음과 같이 디렉터리 구조가 나타나야 합니다.

(root directory name) |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java

3단계: 두 개의 S3 버킷 생성

(이전 단계: 2단계: buildspec 파일 생성)

한 개의 버킷을 사용하여 이 실습을 수행할 수도 있지만, 두 개의 버킷을 사용해야 빌드 입력이 들어오는 위치 및 빌드 출력이 나가는 위치를 쉽게 확인할 수 있습니다.

  • 이러한 버킷 중 하나(입력 버킷)는 빌드 입력을 저장합니다. 이 자습서에서 이 입력 버킷의 이름은 codebuild-region-ID-account-ID-input-bucket입니다. 여기서 region-ID는 버킷의 AWS 리전이고 account-ID는 AWS 계정 ID입니다.

  • 다른 버킷(출력 버킷)은 빌드 출력을 저장합니다. 이 자습서에서 이 출력 버킷의 이름은 codebuild-region-ID-account-ID-output-bucket입니다.

이러한 버킷에 대해 다른 이름을 선택한 경우 이 자습서 전체에서 해당 이름을 사용해야 합니다.

이 두 버킷은 빌드와 같은 AWS 리전에 있어야 합니다. 예를 들어, CodeBuild가 미국 동부(오하이오) 리전에서 빌드를 실행하도록 명령을 지정하는 경우, 이러한 버킷도 미국 동부(오하이오) 리전에 있어야 합니다.

자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 버킷 생성을 참조하세요.

참고

CodeBuild는 CodeCommit, GitHub 및 Bitbucket 리포지토리에 저장된 빌드 입력도 지원하지만 이 자습서에서는 그에 대한 사용 방법을 다루지 않습니다. 자세한 내용은 빌드 계획 단원을 참조하십시오.

4단계: 소스 코드 및 buildspec 파일 업로드

(이전 단계: 3단계: 두 개의 S3 버킷 생성)

이 단계에서는 소스 코드 및 빌드 사양 파일을 입력 버킷에 추가합니다.

사용하는 운영 체제의 zip 유틸리티를 사용하여 MessageUtil.java, TestMessageUtil.java, pom.xmlbuildspec.yml을 포함하는 MessageUtil.zip이라는 파일을 생성합니다.

MessageUtil.zip 파일의 디렉터리 구조가 다음과 같이 나타나야 합니다.

MessageUtil.zip |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
중요

(root directory name) 디렉터리는 포함하지 말고, (root directory name) 디렉터리 안에 있는 디렉터리 및 파일만 포함하십시오.

MessageUtil.zip 파일을 codebuild-region-ID-account-ID-input-bucket이라는 입력 버킷에 업로드합니다.

중요

CodeCommit, GitHub 및 Bitbucket 리포지토리의 경우 일반적으로 buildspec.yml이라는 빌드 사양 파일을 각 리포지토리의 루트(최상위)에 저장하거나 빌드 사양 선언을 빌드 프로젝트 정의의 일부로 포함해야 합니다. 리포지토리의 소스 코드 및 빌드 사양 파일을 포함하는 ZIP 파일은 생성하지 마십시오.

S3 버킷에만 저장된 빌드 입력의 경우, 일반적으로 루트(최상위)에 소스 코드 및 buildspec.yml이라는 빌드 사양 파일을 포함하는 ZIP 파일을 생성하거나 빌드 사양 선언을 빌드 프로젝트 정의의 일부로 포함해야 합니다.

빌드 사양 파일에 다른 이름을 사용하거나 루트가 아닌 위치에서 빌드 사양을 참조하려면 빌드 사양 재정의를 빌드 프로젝트 정의의 일부로 지정할 수 있습니다. 자세한 내용은 buildspec 파일 이름 및 스토리지 위치 단원을 참조하십시오.

5단계: 빌드 프로젝트 생성

(이전 단계: 4단계: 소스 코드 및 buildspec 파일 업로드)

이 단계에서는 AWS CodeBuild가 빌드를 실행하는 데 사용할 빌드 프로젝트를 생성합니다. 이 빌드 프로젝트에는 소스 코드를 가져올 위치, 사용할 빌드 환경, 실행할 빌드 명령 및 빌드 출력을 저장할 위치를 비롯하여 빌드 실행 방법에 대한 정보가 포함되어 있습니다. 빌드 환경은 CodeBuild가 빌드를 실행하는 데 사용하는 운영 체제, 프로그래밍 언어 런타임 및 도구의 조합을 나타냅니다. 빌드 환경은 도커 이미지로 표현됩니다. 자세한 정보는 Docker Docs 웹 사이트에서 Docker 개요 주제를 참조하십시오.

이 빌드 환경의 경우 사용자가 CodeBuild가 JDK(Java Development Kit) 버전 및 Apache Maven을 포함하는 도커 이미지를 사용하도록 지시합니다.

빌드 프로젝트를 생성하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/codesuite/codebuild/home에서 AWS CodeBuild 콘솔을 엽니다.

  2. AWS 리전 선택기를 사용하여 CodeBuild가 지원되는 AWS 리전을 선택합니다. 자세한 내용은 Amazon Web Services 일반 참조AWS CodeBuild 엔드포인트 및 할당량을 참조하세요.

  3. CodeBuild 정보 페이지가 나타나면 빌드 프로젝트 생성을 선택합니다. 그렇지 않을 경우, 탐색 창에서 빌드를 확장한 후 빌드 프로젝트를 선택하고 빌드 프로젝트 생성을 선택합니다.

  4. 빌드 프로젝트 만들기 페이지의 프로젝트 구성에서 프로젝트 이름에 이 빌드 프로젝트의 이름(이 예에서는 codebuild-demo-project)을 입력합니다. 각 AWS 계정에서 빌드 프로젝트 이름은 고유해야 합니다. 다른 이름을 사용하는 경우 이 자습서 전체에서 해당 이름을 사용해야 합니다.

    참고

    빌드 프로젝트 생성 페이지에 You are not authorized to perform this operation.와 같은 오류 메시지가 표시될 수 있습니다. 빌드 프로젝트를 생성할 권한이 없는 사용자로 AWS Management Console에 로그인했기 때문일 가능성이 큽니다. 이 문제를 해결하려면 AWS Management Console에서 로그아웃한 후, 다음 IAM 엔터티 중 하나에 속한 보안 인증을 사용하여 다시 로그인합니다.

    • AWS 계정의 관리자 사용자. 자세한 내용은 사용 설명서에서 첫 번째 AWS 계정 루트 사용자 및 그룹 생성을 참조하세요.

    • 해당 사용자 또는 사용자가 속한 IAM 그룹에 연결된 AWSCodeBuildAdminAccess, AmazonS3ReadOnlyAccessIAMFullAccess 관리형 정책을 사용하는 AWS 계정의 사용자. AWS 계정에 이러한 권한이 있는 사용자 또는 그룹이 없으며, 이러한 권한을 사용자나 그룹에 추가할 수 없는 경우, AWS 계정 관리자에게 지원을 요청하세요. 자세한 내용은 AWS CodeBuild에 대한 AWS 관리형(미리 정의된) 정책 단원을 참조하십시오.

    두 옵션 모두 이 자습서를 완료할 수 있도록 빌드 프로젝트를 생성할 수 있는 관리자 권한이 포함되어 있습니다. 작업을 완료하는 데 필요한 최소 권한을 항상 사용하는 것이 좋습니다. 자세한 내용은 AWS CodeBuild 권한 참조 단원을 참조하십시오.

  5. 소스소스 공급자에서 Amazon S3를 선택합니다.

  6. 버킷에서 codebuild-region-ID-account-ID-input-bucket을 선택합니다.

  7. S3 object key(S3 객체 키)MessageUtil.zip을 입력합니다.

  8. 환경환경 이미지에서 관리형 이미지를 선택된 상태로 둡니다.

  9. 운영 체제에서 Amazon Linux를 선택합니다.

  10. 런타임에서 표준을 선택합니다.

  11. 이미지의 경우 aws/codebuild/amazonlinux2-x86_64-standard:corretto11을 선택합니다.

  12. 서비스 역할에서 새 서비스 역할을 선택된 상태로 두고, 역할 이름도 변경하지 않고 그대로 둡니다.

  13. Buildspec(빌드 사양)에서 Use a buildspec file(빌드 사양 파일 사용)을 선택된 상태로 둡니다.

  14. 아티팩트에서 유형으로 Amazon S3를 선택합니다.

  15. 버킷 이름에서 codebuild-region-ID-account-ID-output-bucket을 선택합니다.

  16. 이름경로는 비워 둡니다.

  17. 빌드 프로젝트 생성을 선택합니다.

6단계: 빌드 실행

(이전 단계: 5단계: 빌드 프로젝트 생성)

이 단계에서는 빌드 프로젝트의 설정으로 빌드를 실행하도록 AWS CodeBuild에 지시를 내립니다.

빌드를 실행하려면
  1. https://console.aws.amazon.com/codesuite/codebuild/home에서 AWS CodeBuild 콘솔을 엽니다.

  2. 탐색 창에서 프로젝트 빌드를 선택합니다.

  3. 빌드 프로젝트 목록에서 codebuild-demo-project를 선택한 후 빌드 시작을 선택합니다. 빌드가 즉시 시작됩니다.

7단계: 요약된 빌드 정보 보기

(이전 단계: 6단계: 빌드 실행)

이 단계에서는 빌드 상태에 대한 요약 정보를 확인합니다.

요약된 빌드 정보를 보려면

  1. codebuild-demo-project:<build-ID> 페이지가 표시되지 않으면, 탐색 모음에서 빌드 이력을 선택합니다. 그런 다음, 빌드 프로젝트 목록에서 프로젝트에 대해 codebuild-demo-project에 대한 빌드 실행 링크를 선택합니다. 일치하는 링크가 하나만 있어야 합니다. (이전에 이 자습서를 완료한 경우 완료됨 열에서 가장 최근 값이 포함된 링크를 선택합니다.)

  2. 빌드 상태 페이지의 단계 세부 정보에는 다음과 같은 빌드 단계가 표시되고 상태 열에 성공이 표시되어야 합니다.

    • SUBMITTED

    • 대기됨

    • PROVISIONING

    • DOWNLOAD_SOURCE

    • INSTALL

    • PRE_BUILD

    • BUILD

    • POST_BUILD

    • UPLOAD_ARTIFACTS

    • FINALIZING

    • COMPLETED

    빌드 상태에, 성공이 표시되어야 합니다.

    대신 진행 중이 표시되면 새로 고침 단추를 선택합니다.

  3. 각 빌드 단계 옆에 있는 기간 값은 빌드 단계가 지속되는 기간을 나타냅니다. 종료 시간 값은 빌드 단계가 종료되었음을 나타냅니다.

8단계: 자세한 빌드 정보 보기

(이전 단계: 7단계: 요약된 빌드 정보 보기)

이 단계에서는 CloudWatch Logs의 빌드에 대한 자세한 정보를 확인합니다.

참고

중요한 정보를 보호하기 위해 CodeBuild 로그에 다음 항목이 숨겨져 있습니다.

자세한 빌드 정보를 보려면
  1. 이전 단계의 빌드 세부 정보 페이지가 계속 표시된 상태에서 [Build logs]에 빌드 로그의 마지막 10,000행이 표시되어 있습니다. CloudWatch Logs에 전체 빌드 로그를 표시하려면 전체 로그 보기 링크를 선택합니다.

  2. CloudWatch Logs 로그 스트림에서 로그 이벤트를 찾아 볼 수 있습니다. 기본적으로 가장 최근의 로그 이벤트 세트만 표시됩니다. 이전의 로그 이벤트를 보려면 목록의 처음으로 스크롤합니다.

  3. 이 자습서에서는 대부분의 로그 이벤트에 CodeBuild가 빌드 종속성 파일을 빌드 환경에 다운로드 및 설치하는 작업에 대한 자세한 정보가 들어 있는데, 대부분의 사용자에게 필요하지 않은 정보입니다. [Filter events]를 사용하면 표시되는 정보를 줄일 수 있습니다. 예를 들어, 필터 이벤트"[INFO]"를 입력하면 [INFO]를 포함하는 이벤트만 표시됩니다. 자세한 내용은 Amazon CloudWatch Logs 사용 설명서의 필터 및 패턴 구문을 참조하세요.

9단계: 빌드 출력 아티팩트 가져오기

(이전 단계: 8단계: 자세한 빌드 정보 보기)

이 단계에서는 CodeBuild가 빌드하고 출력 버킷에 업로드한 messageUtil-1.0.jar 파일을 가져옵니다.

CodeBuild 콘솔 또는 Amazon S3 콘솔을 사용하여 이 단계를 완료할 수 있습니다.

빌드 출력 결과물을 가져오려면(AWS CodeBuild 콘솔)
  1. CodeBuild 콘솔이 여전히 열려 있고 이전 단계의 빌드 세부 정보 페이지가 계속 표시된 상태에서 빌드 세부 정보 탭을 선택하고 아티팩트 섹션으로 스크롤합니다.

    참고

    빌드 세부 정보 페이지가 표시되지 않으면, 탐색 모음에서 빌드 이력을 선택한 다음, 빌드 실행 링크를 선택합니다.

  2. Amazon S3 폴더로 연결되는 링크는 아티팩트 업로드 위치 아래에 있습니다. 이 링크를 클릭하면 messageUtil-1.0.jar 빌드 출력 아티팩트 파일을 찾는 Amazon S3의 폴더가 열립니다.

빌드 출력 아티팩트를 가져오려면(Amazon S3 콘솔)
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. codebuild-region-ID-account-ID-output-bucket를 엽니다.

  3. codebuild-demo-project 폴더를 엽니다.

  4. target 폴더를 엽니다. 이 폴더에서 messageUtil-1.0.jar 빌드 출력 결과물 파일을 찾을 수 있습니다.

10단계: S3 버킷 삭제

(이전 단계: 9단계: 빌드 출력 아티팩트 가져오기)

AWS 계정에 계속하여 요금이 부과되지 않도록 이 자습서에서 사용한 입력 및 출력 버킷을 삭제할 수 있습니다. 지침을 보려면 Amazon Simple Storage Service 사용 설명서에서 버킷 삭제 또는 비우기를 참조하세요.

IAM 사용자 또는 관리자 IAM 사용자를 통해 이러한 버킷을 삭제하는 경우 사용자에게 추가 액세스 권한이 있어야 합니다. 사용자의 기존 액세스 정책에 마커 사이의 다음 명령문(### BEGIN ADDING STATEMENT HERE ###### END ADDING STATEMENTS HERE ###)을 추가합니다.

이 명령문의 줄임표(...)는 간결하게 나타내기 위해 사용됩니다. 기존 액세스 정책의 어떤 명령문도 제거하지 마십시오. 이러한 줄임표는 정책에 입력하지 않아야 합니다.

{ "Version": "2012-10-17", "Id": "...", "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Effect": "Allow", "Action": [ "s3:DeleteBucket", "s3:DeleteObject" ], "Resource": "*" } ### END ADDING STATEMENT HERE ### ] }

마무리

이 자습서에서는 AWS CodeBuild를 사용하여 Java 클래스 파일 세트를 JAR 파일에 빌드했습니다. 그리고 빌드 결과를 확인했습니다.

이제 자신의 시나리오에서 CodeBuild를 사용해 볼 수 있습니다. 빌드 계획의 지침을 따르세요. 아직 시도해 볼 준비가 되지 않은 것 같으면 샘플 몇 가지를 더 빌드해 볼 수 있습니다. 자세한 내용은 CodeBuild용 사용 사례 기반 샘플 단원을 참조하십시오.

AWS CLI를 사용하여 AWS CodeBuild 시작하기

이 자습서에서는 AWS CodeBuild를 사용하여 샘플 소스 코드 입력 파일 모음(빌드 입력 결과물 또는 빌드 입력이라고 함)을 소스 코드의 배포 가능한 버전(빌드 출력 결과물 또는 빌드 출력이라고 함)으로 빌드합니다. 특히, CodeBuild가 일반적인 빌드 도구인 Apache Maven을 사용하여 Java 클래스 파일 세트를 Java Archive(JAR) 파일에 빌드하도록 명령을 지정합니다. 이 자습서는 Apache Maven이나 Java에 익숙하지 않아도 완료할 수 있습니다.

CodeBuild 콘솔, AWS CodePipeline, AWS CLI 또는 AWS SDK를 통해 CodeBuild 작업을 수행할 수 있습니다. 이 자습서에서는 AWS CLI에서 CodeBuild를 사용하는 방법을 보여 줍니다. CodePipeline 사용에 대한 자세한 내용은 CodePipeline에서 CodeBuild 사용 섹션을 참조하세요.

중요

이 자습서의 단계에서는 AWS 계정에 요금이 부과될 수 있는 리소스(예: S3 버킷)를 생성해야 합니다. 여기에는 CodeBuild 및 AWS 리소스에 대한 가능한 요금 및 Amazon S3, AWS KMS, CloudWatch Logs와 관련된 작업이 포함됩니다. 자세한 내용은 CodeBuild 요금, Amazon S3 요금, AWS Key Management Service 요금Amazon CloudWatch 요금을 참조하세요.

1단계: 소스 코드 생성

(AWS CLI를 사용하여 AWS CodeBuild 시작하기의 일부)

이 단계에서는 CodeBuild가 출력 버킷을 빌드하도록 할 소스 코드를 생성합니다. 이 소스 코드는 두 개의 Java 클래스 파일 및 Apache Maven Project Object Model(POM) 파일로 구성됩니다.

  1. 로컬 컴퓨터나 인스턴스의 빈 디렉터리에 다음 디렉터리 구조를 생성합니다.

    (root directory name) `-- src |-- main | `-- java `-- test `-- java
  2. 원하는 텍스트 편집기를 사용하여 다음 파일을 생성하고 이름을 MessageUtil.java로 지정한 다음 이를 src/main/java 디렉터리에 저장합니다.

    public class MessageUtil { private String message; public MessageUtil(String message) { this.message = message; } public String printMessage() { System.out.println(message); return message; } public String salutationMessage() { message = "Hi!" + message; System.out.println(message); return message; } }

    이 클래스 파일은 자신에게 전달되는 문자열을 출력으로 생성합니다. MessageUtil 생성자는 문자열을 설정합니다. printMessage 메서드는 출력을 생성합니다. salutationMessage 메서드는 Hi! 다음에 문자열을 출력합니다.

  3. 다음 파일을 생성하고 이름을 TestMessageUtil.java로 지정한 다음 이를 /src/test/java 디렉터리에 저장합니다.

    import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.assertEquals; public class TestMessageUtil { String message = "Robert"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testPrintMessage() { System.out.println("Inside testPrintMessage()"); assertEquals(message,messageUtil.printMessage()); } @Test public void testSalutationMessage() { System.out.println("Inside testSalutationMessage()"); message = "Hi!" + "Robert"; assertEquals(message,messageUtil.salutationMessage()); } }

    이 클래스 파일은 MessageUtil 클래스의 message 변수를 Robert로 설정합니다. 그런 다음 테스트를 수행하여 RobertHi!Robert 문자열이 출력에 나타나는지 여부를 확인하여 message 변수가 성공적으로 설정되었는지를 확인합니다.

  4. 다음 파일을 생성하고 이름을 pom.xml로 지정한 다음 이를 루트(최상위) 디렉터리에 저장합니다.

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>messageUtil</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Message Utility Java Sample App</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> </plugins> </build> </project>

    Apache Maven은 이 파일의 지침을 따라 MessageUtil.javaTestMessageUtil.java 파일을 messageUtil-1.0.jar이라는 파일로 변환한 다음 지정된 테스트를 실행합니다.

이때 다음과 같이 디렉터리 구조가 나타나야 합니다.

(root directory name) |-- pom.xml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java

2단계: buildspec 파일 생성

(이전 단계: 1단계: 소스 코드 생성)

이 단계에서는 빌드 사양 파일을 생성합니다. buildspec은 CodeBuild가 빌드를 실행하는 데 사용하는 YAML 형식의 빌드 명령 및 관련 설정의 모음입니다. 빌드 사양 없이는 CodeBuild가 빌드 입력을 빌드 출력으로 성공적으로 변환할 수 없으며, 빌드 환경의 빌드 출력 아티팩트를 찾아 출력 버킷에 업로드할 수도 없습니다.

다음 파일을 생성하고 이름을 buildspec.yml로 지정한 다음 이를 루트(최상위) 디렉터리에 저장합니다.

version: 0.2 phases: install: runtime-versions: java: corretto11 pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - mvn install post_build: commands: - echo Build completed on `date` artifacts: files: - target/messageUtil-1.0.jar
중요

빌드 사양 선언은 올바른 YAML이어야 하므로 빌드 사양 선언의 공백이 중요합니다. 빌드 사양 선언의 공백 수가 YAML과 맞지 않으면 빌드가 즉시 실패할 수 있습니다. YAML 검사기를 사용하여 빌드 사양 선언이 올바른 YAML인지 여부를 테스트할 수 있습니다.

참고

소스 코드에 빌드 사양 파일을 포함하는 대신, 빌드 프로젝트를 생성할 때 빌드 명령을 별도로 선언할 수 있습니다. 이 방법은 매번 소스 코드 리포지토리를 업데이트하지 않아도 되도록 여러 개의 빌드 명령이 있는 소스 코드를 빌드하려는 경우 유용합니다. 자세한 내용은 buildspec 구문 단원을 참조하십시오.

이 빌드 사양 선언에서:

  • version은 사용 중인 빌드 사양 표준의 버전을 나타냅니다. 이 빌드 사양 선언은 최신 버전인 0.2을 사용합니다.

  • phases는 CodeBuild가 명령을 실행하도록 지시할 수 있는 빌드 단계를 나타냅니다. 여기에서는 이 빌드 단계가 install, pre_build, buildpost_build로 나열되어 있습니다. 이 빌드 단계 이름의 철자는 변경할 수 없으며 추가로 빌드 단계 이름을 생성할 수도 없습니다.

    이 예제에서는 build 단계 중에 CodeBuild가 mvn install 명령을 실행합니다. 이 명령은 Apache Maven이 Java 클래스 파일을 컴파일 및 테스트하고 컴파일된 Java 클래스 파일을 빌드 출력 결과물에 패키지하도록 지시합니다. 그리고 몇 가지 echo 명령을 각 빌드 단계에 추가하여 이 연습을 마치게 됩니다. 이 자습서의 뒷부분에서 자세한 빌드 정보를 확인할 때 이러한 echo 명령의 출력을 확인하면 CodeBuild가 명령을 실행하는 방법 및 명령 실행 순서를 이해하는 데 많은 도움이 됩니다. (이 예에는 모든 빌드 단계가 포함되어 있지만, 해당 단계에서 아무 명령도 실행하지 않으려면 빌드 단계를 포함하지 않아도 됩니다.) 빌드 단계마다, CodeBuild는 처음부터 끝까지 한 번에 하나씩 나열된 순서로 지정된 각 명령을 실행합니다.

  • artifacts는 CodeBuild가 출력 버킷에 업로드하는 빌드 출력 아티팩트 세트를 나타냅니다. files는 빌드 출력에 포함할 파일을 나타냅니다. CodeBuild는 빌드 환경에 target 상대 디렉터리에 있는 단일 messageUtil-1.0.jar 파일을 업로드합니다. 파일 이름 messageUtil-1.0.jar 및 디렉터리 이름 target은 Apache Maven이 이 예제에서만 빌드 출력 결과물을 생성 및 저장하는 방식에 따라 달라집니다. 사용자 자체 빌드에서는 이러한 파일 이름과 디렉터리가 다릅니다.

자세한 내용은 buildspec 참조을 참조하세요.

이때 다음과 같이 디렉터리 구조가 나타나야 합니다.

(root directory name) |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java

3단계: 두 개의 S3 버킷 생성

(이전 단계: 2단계: buildspec 파일 생성)

한 개의 버킷을 사용하여 이 실습을 수행할 수도 있지만, 두 개의 버킷을 사용해야 빌드 입력이 들어오는 위치 및 빌드 출력이 나가는 위치를 쉽게 확인할 수 있습니다.

  • 이러한 버킷 중 하나(입력 버킷)는 빌드 입력을 저장합니다. 이 자습서에서 이 입력 버킷의 이름은 codebuild-region-ID-account-ID-input-bucket입니다. 여기서 region-ID는 버킷의 AWS 리전이고 account-ID는 AWS 계정 ID입니다.

  • 다른 버킷(출력 버킷)은 빌드 출력을 저장합니다. 이 자습서에서 이 출력 버킷의 이름은 codebuild-region-ID-account-ID-output-bucket입니다.

이러한 버킷에 대해 다른 이름을 선택한 경우 이 자습서 전체에서 해당 이름을 사용해야 합니다.

이 두 버킷은 빌드와 같은 AWS 리전에 있어야 합니다. 예를 들어, CodeBuild가 미국 동부(오하이오) 리전에서 빌드를 실행하도록 명령을 지정하는 경우, 이러한 버킷도 미국 동부(오하이오) 리전에 있어야 합니다.

자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 버킷 생성을 참조하세요.

참고

CodeBuild는 CodeCommit, GitHub 및 Bitbucket 리포지토리에 저장된 빌드 입력도 지원하지만 이 자습서에서는 그에 대한 사용 방법을 다루지 않습니다. 자세한 내용은 빌드 계획 단원을 참조하십시오.

4단계: 소스 코드 및 buildspec 파일 업로드

(이전 단계: 3단계: 두 개의 S3 버킷 생성)

이 단계에서는 소스 코드 및 빌드 사양 파일을 입력 버킷에 추가합니다.

사용하는 운영 체제의 zip 유틸리티를 사용하여 MessageUtil.java, TestMessageUtil.java, pom.xmlbuildspec.yml을 포함하는 MessageUtil.zip이라는 파일을 생성합니다.

MessageUtil.zip 파일의 디렉터리 구조가 다음과 같이 나타나야 합니다.

MessageUtil.zip |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
중요

(root directory name) 디렉터리는 포함하지 말고, (root directory name) 디렉터리 안에 있는 디렉터리 및 파일만 포함하십시오.

MessageUtil.zip 파일을 codebuild-region-ID-account-ID-input-bucket이라는 입력 버킷에 업로드합니다.

중요

CodeCommit, GitHub 및 Bitbucket 리포지토리의 경우 일반적으로 buildspec.yml이라는 빌드 사양 파일을 각 리포지토리의 루트(최상위)에 저장하거나 빌드 사양 선언을 빌드 프로젝트 정의의 일부로 포함해야 합니다. 리포지토리의 소스 코드 및 빌드 사양 파일을 포함하는 ZIP 파일은 생성하지 마십시오.

S3 버킷에만 저장된 빌드 입력의 경우, 일반적으로 루트(최상위)에 소스 코드 및 buildspec.yml이라는 빌드 사양 파일을 포함하는 ZIP 파일을 생성하거나 빌드 사양 선언을 빌드 프로젝트 정의의 일부로 포함해야 합니다.

빌드 사양 파일에 다른 이름을 사용하거나 루트가 아닌 위치에서 빌드 사양을 참조하려면 빌드 사양 재정의를 빌드 프로젝트 정의의 일부로 지정할 수 있습니다. 자세한 내용은 buildspec 파일 이름 및 스토리지 위치 단원을 참조하십시오.

5단계: 빌드 프로젝트 생성

(이전 단계: 4단계: 소스 코드 및 buildspec 파일 업로드)

이 단계에서는 AWS CodeBuild가 빌드를 실행하는 데 사용할 빌드 프로젝트를 생성합니다. 이 빌드 프로젝트에는 소스 코드를 가져올 위치, 사용할 빌드 환경, 실행할 빌드 명령 및 빌드 출력을 저장할 위치를 비롯하여 빌드 실행 방법에 대한 정보가 포함되어 있습니다. 빌드 환경은 CodeBuild가 빌드를 실행하는 데 사용하는 운영 체제, 프로그래밍 언어 런타임 및 도구의 조합을 나타냅니다. 빌드 환경은 도커 이미지로 표현됩니다. 자세한 정보는 Docker Docs 웹 사이트에서 Docker 개요 주제를 참조하십시오.

이 빌드 환경의 경우 사용자가 CodeBuild가 JDK(Java Development Kit) 버전 및 Apache Maven을 포함하는 도커 이미지를 사용하도록 지시합니다.

빌드 프로젝트를 생성하려면
  1. AWS CLI를 사용하여 다음 create-project 명령을 실행합니다.

    aws codebuild create-project --generate-cli-skeleton

    JSON 형식 데이터가 출력에 표시됩니다. AWS CLI가 설치된 로컬 컴퓨터 또는 인스턴스의 위치에 있는 create-project.json이라는 파일에 데이터를 복사합니다. 다른 파일 이름을 사용하기로 선택하는 경우 이 자습서 전체에서 해당 이름을 사용해야 합니다.

    복사된 데이터를 다음 형식으로 수정한 다음 결과를 저장합니다.

    { "name": "codebuild-demo-project", "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID-account-ID-output-bucket" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:5.0", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "serviceIAMRole" }

    serviceIAMRole을 CodeBuild 서비스 역할의 Amazon 리소스 이름(ARN)으로 바꿉니다(예: arn:aws:iam::account-ID:role/role-name). 파일을 만들려면 CodeBuild가 다른 AWS 서비스와 상호 작용하도록 허용 섹션을 참조하세요.

    이 데이터에서:

    • name은 이 빌드 프로젝트에 대한 필수 식별자를 나타냅니다(이 예에서는 codebuild-demo-project). 빌드 프로젝트 이름은 계정에 있는 모든 빌드 프로젝트에서 고유해야 합니다.

    • sourcetype은 소스 코드의 리포지토리 유형을 나타내는 필수 값입니다(이 예에서는 Amazon S3 버킷의 경우 S3).

    • sourcelocation은 소스 코드의 경로를 나타냅니다(이 예에서는 입력 버킷 이름과 그 뒤의 ZIP 파일 이름).

    • artifactstype은 빌드 출력 아티팩트의 리포지토리 유형을 나타내는 필수 값입니다(이 예에서는 Amazon S3 버킷의 경우 S3).

    • artifactslocation은 앞에서 생성하거나 지정한 출력 버킷의 이름을 나타냅니다(이 예에서는 codebuild-region-ID-account-ID-output-bucket).

    • environmenttype은 빌드 환경의 유형을 나타내는 필수 값입니다(이 예에서는 LINUX_CONTAINER).

    • environmentimage는 도커 이미지 리포지토리 유형에서 지정한 대로 이 빌드 프로젝트에서 사용할 도커 이미지 이름 및 태그 조합을 나타내는 필수 값입니다(이 예에서는 CodeBuild 도커 이미지 리포지토리의 도커 이미지의 경우 aws/codebuild/standard:5.0). aws/codebuild/standard는 도커 이미지의 이름입니다. 5.0은 도커 이미지의 태그입니다.

      자신의 시나리오에서 사용할 수 있는 더 많은 도커 이미지를 찾으려면 빌드 환경 참조 단원을 참조하십시오.

    • environmentcomputeType은 CodeBuild가 사용할 컴퓨팅 리소스를 나타내는 필수 값입니다(이 예에서는 BUILD_GENERAL1_SMALL).

    참고

    원래의 JSON 형식 데이터에서 사용 가능한 다른 값으로, description, buildspec, auth (typeresource 포함), path, namespaceType, name(artifacts의 경우), packaging, environmentVariables(namevalue 포함), timeoutInMinutes, encryptionKeytags(keyvalue 포함) 등이 있으며 선택 사항입니다. 이러한 값은 이 자습서에서 사용되지 않으므로 여기서는 다루지 않습니다. 자세한 내용은 빌드 프로젝트 생성(AWS CLI) 단원을 참조하십시오.

  2. 방금 저장한 파일이 들어 있는 디렉터리로 전환한 다음, create-project 명령을 다시 실행합니다.

    aws codebuild create-project --cli-input-json file://create-project.json

    이 명령이 제대로 실행되면 다음과 비슷한 데이터가 출력에 표시됩니다.

    { "project": { "name": "codebuild-demo-project", "serviceRole": "serviceIAMRole", "tags": [], "artifacts": { "packaging": "NONE", "type": "S3", "location": "codebuild-region-ID-account-ID-output-bucket", "name": "message-util.zip" }, "lastModified": 1472661575.244, "timeoutInMinutes": 60, "created": 1472661575.244, "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/standard:5.0", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "encryptionKey": "arn:aws:kms:region-ID:account-ID:alias/aws/s3", "arn": "arn:aws:codebuild:region-ID:account-ID:project/codebuild-demo-project" } }
    • project는 이 빌드 프로젝트에 대한 정보를 나타냅니다.

      • tags는 선언된 태그를 나타냅니다.

      • packaging은 빌드 출력 결과물이 출력 버킷에 저장되는 방식을 나타냅니다. NONE은 폴더가 출력 버킷 내부에 생성됨을 의미합니다. 빌드 출력 결과물이 해당 폴더에 저장됩니다.

      • lastModified는 빌드 프로젝트에 대한 정보가 마지막으로 변경된 시간을 Unix 시간 형식으로 나타냅니다.

      • timeoutInMinutes는 빌드가 완료되지 않는 경우 CodeBuild가 해당 빌드를 중지할 시간(분)을 나타냅니다. (기본값은 60분입니다.)

      • created는 빌드 프로젝트가 생성된 시간을 Unix 시간 형식으로 나타냅니다.

      • environmentVariables는 선언된 환경 변수로, 빌드 중에 CodeBuild가 사용할 수 있는 환경 변수를 나타냅니다.

      • encryptionKey는 CodeBuild가 빌드 출력 아티팩트를 암호화하는 데 사용하는 고객 관리형 키의 ARN을 나타냅니다.

      • arn은 빌드 프로젝트의 ARN을 나타냅니다.

참고

create-project 명령을 실행하면 User: user-ARN is not authorized to perform: codebuild:CreateProject와 유사한 오류 메시지가 출력될 수 있습니다. 이 메시지가 나타나는 이유는 CodeBuild를 사용하여 빌드 프로젝트를 생성하기에 충분한 권한이 없는 사용자의 보안 인증으로 AWS CLI를 구성했기 때문일 가능성이 큽니다. 이 문제를 해결하려면 IAM 엔터티 중 하나에 속한 보안 인증을 사용하여 AWS CLI를 구성하세요.

  • AWS 계정의 관리자 사용자. 자세한 내용은 사용 설명서에서 첫 번째 AWS 계정 루트 사용자 및 그룹 생성을 참조하세요.

  • 해당 사용자 또는 사용자가 속한 IAM 그룹에 연결된 AWSCodeBuildAdminAccess, AmazonS3ReadOnlyAccessIAMFullAccess 관리형 정책을 사용하는 AWS 계정의 사용자. AWS 계정에 이러한 권한이 있는 사용자 또는 그룹이 없으며, 이러한 권한을 사용자나 그룹에 추가할 수 없는 경우, AWS 계정 관리자에게 지원을 요청하세요. 자세한 내용은 AWS CodeBuild에 대한 AWS 관리형(미리 정의된) 정책 단원을 참조하십시오.

6단계: 빌드 실행

(이전 단계: 5단계: 빌드 프로젝트 생성)

이 단계에서는 빌드 프로젝트의 설정으로 빌드를 실행하도록 AWS CodeBuild에 지시를 내립니다.

빌드를 실행하려면
  1. AWS CLI를 사용하여 다음 start-build 명령을 실행합니다.

    aws codebuild start-build --project-name project-name

    project-name을 이전 단계의 빌드 프로젝트 이름으로 바꿉니다(예: codebuild-demo-project).

  2. 이 명령이 제대로 실행되면 다음과 비슷한 데이터가 출력에 표시됩니다.

    { "build": { "buildComplete": false, "initiator": "user-name", "artifacts": { "location": "arn:aws:s3:::codebuild-region-ID-account-ID-output-bucket/message-util.zip" }, "projectName": "codebuild-demo-project", "timeoutInMinutes": 60, "buildStatus": "IN_PROGRESS", "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/standard:5.0", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "currentPhase": "SUBMITTED", "startTime": 1472848787.882, "id": "codebuild-demo-project:0cfbb6ec-3db9-4e8c-992b-1ab28EXAMPLE", "arn": "arn:aws:codebuild:region-ID:account-ID:build/codebuild-demo-project:0cfbb6ec-3db9-4e8c-992b-1ab28EXAMPLE" } }
    • build는 이 빌드에 대한 정보를 나타냅니다.

      • buildComplete는 빌드 완료 여부를 나타냅니다(true). 그렇지 않을 경우 false입니다.

      • initiator는 빌드를 시작한 엔터티를 나타냅니다.

      • artifacts는 빌드 출력에 대한 정보를 나타냅니다(위치 포함).

      • projectName은 빌드 프로젝트의 이름을 나타냅니다.

      • buildStatusstart-build 명령이 실행되었을 당시의 빌드 상태를 나타냅니다.

      • currentPhasestart-build 명령이 실행되었을 당시의 빌드 단계를 나타냅니다.

      • startTime은 빌드 프로세스가 시작된 시간을 Unix 시간 형식으로 나타냅니다.

      • id는 빌드의 ID를 나타냅니다.

      • arn은 빌드의 ARN을 나타냅니다.

    [id] 값을 기록해 둡니다. 이 정보는 다음 단계에서 필요합니다.

7단계: 요약된 빌드 정보 보기

(이전 단계: 6단계: 빌드 실행)

이 단계에서는 빌드 상태에 대한 요약 정보를 확인합니다.

요약된 빌드 정보를 보려면
  • AWS CLI를 사용하여 batch-get-builds 명령을 실행합니다.

    aws codebuild batch-get-builds --ids id

    id를 이전 단계의 출력에 표시된 id 값으로 바꿉니다.

    이 명령이 제대로 실행되면 다음과 비슷한 데이터가 출력에 표시됩니다.

    { "buildsNotFound": [], "builds": [ { "buildComplete": true, "phases": [ { "phaseStatus": "SUCCEEDED", "endTime": 1472848788.525, "phaseType": "SUBMITTED", "durationInSeconds": 0, "startTime": 1472848787.882 }, ... The full list of build phases has been omitted for brevity ... { "phaseType": "COMPLETED", "startTime": 1472848878.079 } ], "logs": { "groupName": "/aws/codebuild/codebuild-demo-project", "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=region-ID#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE", "streamName": "38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE" }, "artifacts": { "md5sum": "MD5-hash", "location": "arn:aws:s3:::codebuild-region-ID-account-ID-output-bucket/message-util.zip", "sha256sum": "SHA-256-hash" }, "projectName": "codebuild-demo-project", "timeoutInMinutes": 60, "initiator": "user-name", "buildStatus": "SUCCEEDED", "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/standard:5.0", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "currentPhase": "COMPLETED", "startTime": 1472848787.882, "endTime": 1472848878.079, "id": "codebuild-demo-project:38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE", "arn": "arn:aws:codebuild:region-ID:account-ID:build/codebuild-demo-project:38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE" } ] }
    • buildsNotFound는 정보를 찾을 수 없는 빌드의 빌드 ID를 나타냅니다. 이 예에서는 비어 있어야 합니다.

    • builds는 정보를 찾을 수 있는 각 빌드에 대한 정보를 나타냅니다. 이 예에서는 한 빌드에 대한 정보만 출력에 표시됩니다.

      • phases는 빌드 프로세스 동안 CodeBuild가 실행하는 빌드 단계 세트를 나타냅니다. 각 빌드 단계에 대한 정보는 startTime, endTimedurationInSeconds(빌드 단계가 시작 및 종료된 시간은 Unix 형식으로, 지속된 기간은 초로 표시)뿐만 아니라 phaseType(SUBMITTED, PROVISIONING, DOWNLOAD_SOURCE, INSTALL, PRE_BUILD, BUILD, POST_BUILD, UPLOAD_ARTIFACTS, FINALIZING 또는 COMPLETED 등) 및 phaseStatus(SUCCEEDED, FAILED, FAULT, TIMED_OUT, IN_PROGRESS 또는 STOPPED)가 개별적으로 나열됩니다. batch-get-builds 명령을 처음으로 실행하면 단계가 많이 표시되지 않거나 아예 하나도 표시되지 않을 수 있습니다. 동일한 빌드 ID로 batch-get-builds 명령을 계속하여 실행하면 더 많은 빌드 단계가 출력에 표시됩니다.

      • logs는 빌드 로그에 대한 정보를 Amazon CloudWatch Logs에 나타냅니다.

      • md5sumsha256sum은 빌드 출력 결과물의 MD5 및 SHA-256 해시를 나타냅니다. 이러한 값은 빌드 프로젝트의 packaging 값이 ZIP으로 설정되어 있는 경우에만 출력에 표시됩니다. (이 자습서에서는 이 값을 설정하지 않음) 이러한 해시를 체크섬 도구와 함께 사용하면 파일 무결성 및 신뢰성을 확인할 수 있습니다.

        참고

        Amazon S3 콘솔을 사용해서도 이러한 해시를 확인할 수 있습니다. 빌드 출력 결과물 옆의 확인란을 선택하고 작업, 속성을 차례로 선택합니다. [Properties] 창에서 [Metadata]를 확장하고 [x-amz-meta-codebuild-content-md5] 및 [x-amz-meta-codebuild-content-sha256]의 값을 확인합니다. (Amazon S3 콘솔에서 빌드 출력 아티팩트의 ETag 값을 MD5 또는 SHA-256 해시로 해석하지 않아야 합니다.)

        AWS SDK를 사용하여 이러한 해시를 확인하려면 codebuild-content-md5codebuild-content-sha256이라는 값을 확인하십시오.

      • endTime은 빌드 프로세스가 종료된 시간을 Unix 시간 형식으로 나타냅니다.

    참고

    Amazon S3 메타데이터에는 Amazon S3에 아티팩트를 게시하는 CodeBuild 빌드의 buildArn이 포함된 x-amz-meta-codebuild-buildarn라는 CodeBuild 헤더가 있습니다. 알림에 대한 소스 추적을 허용하고 아티팩트가 생성된 빌드를 참조할 수 있도록 하기 위해 buildArn이 추가되었습니다.

8단계: 자세한 빌드 정보 보기

(이전 단계: 7단계: 요약된 빌드 정보 보기)

이 단계에서는 CloudWatch Logs의 빌드에 대한 자세한 정보를 확인합니다.

참고

중요한 정보를 보호하기 위해 CodeBuild 로그에 다음 항목이 숨겨져 있습니다.

자세한 빌드 정보를 보려면
  1. 웹 브라우저를 사용하여 이전 단계의 출력에 표시된 deepLink 위치로 이동합니다(예: https://console.aws.amazon.com/cloudwatch/home?region=region-ID#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE).

  2. CloudWatch Logs 로그 스트림에서 로그 이벤트를 찾아 볼 수 있습니다. 기본적으로 가장 최근의 로그 이벤트 세트만 표시됩니다. 이전의 로그 이벤트를 보려면 목록의 처음으로 스크롤합니다.

  3. 이 자습서에서는 대부분의 로그 이벤트에 CodeBuild가 빌드 종속성 파일을 빌드 환경에 다운로드 및 설치하는 작업에 대한 자세한 정보가 들어 있는데, 대부분의 사용자에게 필요하지 않은 정보입니다. [Filter events]를 사용하면 표시되는 정보를 줄일 수 있습니다. 예를 들어, 필터 이벤트"[INFO]"를 입력하면 [INFO]를 포함하는 이벤트만 표시됩니다. 자세한 내용은 Amazon CloudWatch Logs 사용 설명서의 필터 및 패턴 구문을 참조하세요.

CloudWatch Logs 로그 스트림의 다음 부분이 이 자습서와 관련이 있습니다.

... [Container] 2016/04/15 17:49:42 Entering phase PRE_BUILD [Container] 2016/04/15 17:49:42 Running command echo Entering pre_build phase... [Container] 2016/04/15 17:49:42 Entering pre_build phase... [Container] 2016/04/15 17:49:42 Phase complete: PRE_BUILD Success: true [Container] 2016/04/15 17:49:42 Entering phase BUILD [Container] 2016/04/15 17:49:42 Running command echo Entering build phase... [Container] 2016/04/15 17:49:42 Entering build phase... [Container] 2016/04/15 17:49:42 Running command mvn install [Container] 2016/04/15 17:49:44 [INFO] Scanning for projects... [Container] 2016/04/15 17:49:44 [INFO] [Container] 2016/04/15 17:49:44 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:44 [INFO] Building Message Utility Java Sample App 1.0 [Container] 2016/04/15 17:49:44 [INFO] ------------------------------------------------------------------------ ... [Container] 2016/04/15 17:49:55 ------------------------------------------------------- [Container] 2016/04/15 17:49:55 T E S T S [Container] 2016/04/15 17:49:55 ------------------------------------------------------- [Container] 2016/04/15 17:49:55 Running TestMessageUtil [Container] 2016/04/15 17:49:55 Inside testSalutationMessage() [Container] 2016/04/15 17:49:55 Hi!Robert [Container] 2016/04/15 17:49:55 Inside testPrintMessage() [Container] 2016/04/15 17:49:55 Robert [Container] 2016/04/15 17:49:55 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 sec [Container] 2016/04/15 17:49:55 [Container] 2016/04/15 17:49:55 Results : [Container] 2016/04/15 17:49:55 [Container] 2016/04/15 17:49:55 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 ... [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 [INFO] BUILD SUCCESS [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 [INFO] Total time: 11.845 s [Container] 2016/04/15 17:49:56 [INFO] Finished at: 2016-04-15T17:49:56+00:00 [Container] 2016/04/15 17:49:56 [INFO] Final Memory: 18M/216M [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 Phase complete: BUILD Success: true [Container] 2016/04/15 17:49:56 Entering phase POST_BUILD [Container] 2016/04/15 17:49:56 Running command echo Entering post_build phase... [Container] 2016/04/15 17:49:56 Entering post_build phase... [Container] 2016/04/15 17:49:56 Phase complete: POST_BUILD Success: true [Container] 2016/04/15 17:49:57 Preparing to copy artifacts [Container] 2016/04/15 17:49:57 Assembling file list [Container] 2016/04/15 17:49:57 Expanding target/messageUtil-1.0.jar [Container] 2016/04/15 17:49:57 Found target/messageUtil-1.0.jar [Container] 2016/04/15 17:49:57 Creating zip artifact

이 예에서는 CodeBuild가 사전 빌드, 빌드 및 사후 빌드의 빌드 단계를 성공적으로 완료했습니다. 또한 단위 테스트를 실행하고 messageUtil-1.0.jar 파일을 성공적으로 빌드했습니다.

9단계: 빌드 출력 아티팩트 가져오기

(이전 단계: 8단계: 자세한 빌드 정보 보기)

이 단계에서는 CodeBuild가 빌드하고 출력 버킷에 업로드한 messageUtil-1.0.jar 파일을 가져옵니다.

CodeBuild 콘솔 또는 Amazon S3 콘솔을 사용하여 이 단계를 완료할 수 있습니다.

빌드 출력 결과물을 가져오려면(AWS CodeBuild 콘솔)
  1. CodeBuild 콘솔이 여전히 열려 있고 이전 단계의 빌드 세부 정보 페이지가 계속 표시된 상태에서 빌드 세부 정보 탭을 선택하고 아티팩트 섹션으로 스크롤합니다.

    참고

    빌드 세부 정보 페이지가 표시되지 않으면, 탐색 모음에서 빌드 이력을 선택한 다음, 빌드 실행 링크를 선택합니다.

  2. Amazon S3 폴더로 연결되는 링크는 아티팩트 업로드 위치 아래에 있습니다. 이 링크를 클릭하면 messageUtil-1.0.jar 빌드 출력 아티팩트 파일을 찾는 Amazon S3의 폴더가 열립니다.

빌드 출력 아티팩트를 가져오려면(Amazon S3 콘솔)
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. codebuild-region-ID-account-ID-output-bucket를 엽니다.

  3. codebuild-demo-project 폴더를 엽니다.

  4. target 폴더를 엽니다. 이 폴더에서 messageUtil-1.0.jar 빌드 출력 결과물 파일을 찾을 수 있습니다.

10단계: S3 버킷 삭제

(이전 단계: 9단계: 빌드 출력 아티팩트 가져오기)

AWS 계정에 계속하여 요금이 부과되지 않도록 이 자습서에서 사용한 입력 및 출력 버킷을 삭제할 수 있습니다. 지침을 보려면 Amazon Simple Storage Service 사용 설명서에서 버킷 삭제 또는 비우기를 참조하세요.

IAM 사용자 또는 관리자 IAM 사용자를 통해 이러한 버킷을 삭제하는 경우 사용자에게 추가 액세스 권한이 있어야 합니다. 사용자의 기존 액세스 정책에 마커 사이의 다음 명령문(### BEGIN ADDING STATEMENT HERE ###### END ADDING STATEMENTS HERE ###)을 추가합니다.

이 명령문의 줄임표(...)는 간결하게 나타내기 위해 사용됩니다. 기존 액세스 정책의 어떤 명령문도 제거하지 마십시오. 이러한 줄임표는 정책에 입력하지 않아야 합니다.

{ "Version": "2012-10-17", "Id": "...", "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Effect": "Allow", "Action": [ "s3:DeleteBucket", "s3:DeleteObject" ], "Resource": "*" } ### END ADDING STATEMENT HERE ### ] }

마무리

이 자습서에서는 AWS CodeBuild를 사용하여 Java 클래스 파일 세트를 JAR 파일에 빌드했습니다. 그리고 빌드 결과를 확인했습니다.

이제 자신의 시나리오에서 CodeBuild를 사용해 볼 수 있습니다. 빌드 계획의 지침을 따르세요. 아직 시도해 볼 준비가 되지 않은 것 같으면 샘플 몇 가지를 더 빌드해 볼 수 있습니다. 자세한 내용은 CodeBuild용 사용 사례 기반 샘플 단원을 참조하십시오.