AWS CodeBuild
사용 설명서 (API 버전 2016-10-06)

CodeBuild 시작하기

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

중요

이 연습을 실행하면 AWS 계정에 요금이 발생할 수 있습니다. 여기에는 CodeBuild 및 AWS 리소스에 대한 가능 요금 및 Amazon S3, AWS KMS 및 CloudWatch Logs과 관련된 작업이 포함됩니다. 자세한 정보는 CodeBuild 요금, Amazon S3 요금, AWS Key Management Service 요금Amazon CloudWatch 요금을 참조하십시오.

1단계: Amazon S3 버킷을 생성하거나 사용하여 빌드 입력 및 출력 저장

이 연습을 수행하려면 두 개의 Amazon S3 버킷이 있어야 합니다.

  • 이 중 하나는 빌드 입력을 저장합니다(입력 버킷). 이 연습에서는 이 입력 버킷의 이름을 codebuild-region-ID-account-ID-input-bucket으로 지정합니다. 여기서 region-ID는 버킷의 AWS 리전을 나타내며 account-ID는 AWS 계정 ID를 나타냅니다.

  • 다른 버킷은 빌드 출력을 저장합니다(출력 버킷). 이 연습에서는 이 출력 버킷의 이름을 codebuild-region-ID-account-ID-output-bucket으로 지정합니다.

두 버킷 중 어느 것에든 다른 이름을 선택하는 경우 이 연습 전체에서 해당 이름을 사용해야 합니다.

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

버킷을 만들려면 Amazon Simple Storage Service 사용 설명서버킷 생성 단원을 참조하십시오.

참고

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

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

2단계: 소스 코드를 생성하여 빌드

이 단계에서는 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

3단계: 빌드 사양 생성

이 단계에서는 빌드 사양 파일을 생성합니다. 빌드 사양은 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인지 여부를 테스트할 수 있습니다.

참고

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

이 빌드 사양 선언에서:

  • 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이 이 예제에서만 빌드 출력 결과물을 생성 및 저장하는 방식에 따라 달라집니다. 사용자 자체 빌드에서는 이러한 파일 이름과 디렉터리가 다릅니다.

자세한 정보는 빌드 사양 참조 단원을 참조하십시오.

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

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

4단계: 소스 코드 및 빌드 사양을 입력 버킷에 추가

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

사용하는 운영 체제의 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 파일은 생성하지 마십시오.

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

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

5단계: 빌드 프로젝트 만들기

이 단계에서는 AWS CodeBuild가 빌드를 실행하는 데 사용할 빌드 프로젝트를 생성합니다. 빌드 프로젝트는 CodeBuild에서 빌드를 실행하는 방식을 정의합니다. 여기에는 소스 코드를 가져올 위치, 사용할 빌드 환경, 실행할 빌드 명령 및 빌드 출력을 저장할 위치 등의 정보가 포함됩니다.빌드 환경은 운영 체제, 프로그래밍 언어 실행 시간 및 CodeBuild에서 빌드를 실행하는 데 사용되는 도구의 조합을 나타냅니다. 빌드 환경은 Docker 이미지로 표현됩니다. (자세한 정보는 Docker Docs 웹 사이트에서 Docker Overview 주제를 참조하십시오.) 이 빌드 환경의 경우 사용자가 CodeBuild가 JDK(Java Development Kit) 버전 및 Apache Maven을 포함하는 Docker 이미지를 사용하도록 지시합니다.

CodeBuild 콘솔 또는 AWS CLI를 사용하여 이 단계를 수행할 수 있습니다.

참고

CodeBuild는 CodeBuild 콘솔, AWS CodePipeline, AWS CLI 또는 AWS SDK를 통해 여러 가지 방법으로 사용할 수 있습니다. 이 연습에서는 CodeBuild 콘솔 및 AWS CLI를 사용하는 방법을 보여 줍니다. CodePipeline 사용 방법을 배우려면 AWS CodePipeline을 CodeBuild와 함께 사용 단원을 참조하십시오. AWS SDK 사용 방법을 배우려면 AWS CodeBuild 직접 실행 단원을 참조하십시오.

빌드 프로젝트를 생성하려면(콘솔)

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/codesuite/codebuild/home에서 AWS CodeBuild 콘솔을 엽니다.

  2. AWS 리전 선택기에서 CodeBuild를 지원하는 리전을 선택합니다. 자세한 정보는 CodeBuild의 "리전 및 엔드포인트" 주제에 있는 Amazon Web Services General Reference 단원을 참조하십시오.

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

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

    참고

    빌드 프로젝트 만들기 페이지에 User: user-ARN is not authorized to perform: codebuild:ListProjects와 같은 오류 메시지가 표시될 수 있습니다. 이 메시지가 나타나는 이유는 콘솔에서 CodeBuild를 사용하기에 충분한 권한이 없는 IAM 사용자로 AWS Management Console에 로그인되어 있기 때문일 가능성이 큽니다. 이 문제를 해결하려면 AWS Management Console에서 로그아웃한 후, 다음 IAM 엔터티 중 하나에 속한 자격 증명을 사용하여 다시 로그인하십시오.

    • 사용자의 AWS 루트 계정. 이는 권장하지 않습니다. 자세한 정보는 IAM 사용 설명서계정 루트 사용자 단원을 참조하십시오.

    • AWS 계정의 관리자 IAM 사용자. 자세한 정보는 IAM 사용 설명서첫 번째 IAM 관리자 및 그룹 만들기 단원을 참조하십시오.

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

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

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

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

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

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

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

  11. 이미지에서 aws/codebuild/amazonlinux2-x86_64-standard:1.0을 선택합니다.

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

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

  14. 결과물유형에서 Amazon S3를 선택합니다.

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

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

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

    6단계: 빌드 실행 섹션으로 이동합니다.

빌드 프로젝트를 생성하려면(AWS CLI)

  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:2.0", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "serviceIAMRole" }

    serviceIAMRole을 CodeBuild 서비스 역할의 ARN(Amazon 리소스 이름)으로 바꿉니다(예: arn:aws:iam::account-ID:role/role-name). 역할을 만들려면 CodeBuild 서비스 역할 만들기 단원을 참조하십시오.

    이 데이터에서:

    • 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:2.0). aws/codebuild/standard는 도커 이미지의 이름입니다. 1.0은 도커 이미지의 태그입니다.

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

    • 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:2.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가 빌드 출력 결과물을 암호화하는 데 사용하는 AWS KMS 고객 마스터 키(CMK)의 ARN을 나타냅니다.

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

참고

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

  • 사용자의 AWS 루트 계정. 이는 권장하지 않습니다. 자세한 정보는 IAM 사용 설명서계정 루트 사용자 단원을 참조하십시오.

  • AWS 계정의 관리자 IAM 사용자. 자세한 정보는 IAM 사용 설명서첫 번째 IAM 관리자 및 그룹 만들기 단원을 참조하십시오.

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

6단계: 빌드 실행

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

CodeBuild 콘솔 또는 AWS CLI를 사용하여 이 단계를 수행할 수 있습니다.

빌드를 실행하려면(콘솔)

  1. Open the AWS CodeBuild console at https://console.aws.amazon.com/codesuite/codebuild/home.

  2. 탐색 창에서 [Build projects]를 선택합니다.

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

  4. 빌드 시작 페이지에서 빌드 시작을 선택합니다.

  5. 7단계: 요약된 빌드 정보 보기 섹션으로 이동합니다.

빌드를 실행하려면(AWS CLI)

  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:2.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단계: 요약된 빌드 정보 보기

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

AWS CodeBuild 콘솔 또는 AWS CLI를 사용하여 이 단계를 수행할 수 있습니다.

요약된 빌드 정보를 보려면(콘솔)

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

  2. 빌드 상세 정보 페이지의 [Phase details]에서 [Status] 열이 [Succeeded]인 다음 빌드 단계 목록이 표시되어야 합니다.

    • SUBMITTED

    • 대기됨

    • PROVISIONING

    • DOWNLOAD_SOURCE

    • INSTALL

    • PRE_BUILD

    • BUILD

    • POST_BUILD

    • UPLOAD_ARTIFACTS

    • FINALIZING

    • COMPLETED

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

    진행 중이라고 표시되면 새로 고침 버튼을 눌러 최신 진행 상황을 표시합니다.

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

    8단계: 자세한 빌드 정보 보기 섹션으로 이동합니다.

요약된 빌드 정보를 보려면(AWS CLI)

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:2.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 콘솔을 사용해서도 이러한 해시를 확인할 수 있습니다. 빌드 출력 결과물 옆의 확인란을 선택하고 [Actions], [Properties]를 차례로 선택합니다. [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 시간 형식으로 나타냅니다.

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

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

CodeBuild 콘솔 또는 AWS CLI를 사용하여 이 단계를 수행할 수 있습니다.

자세한 빌드 정보를 보려면(콘솔)

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

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

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

9단계: 빌드 출력 결과물 가져오기 섹션으로 이동합니다.

자세한 빌드 정보를 보려면(AWS CLI)

  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 User Guide필터 및 패턴 구문 단원을 참조하십시오.

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단계: 빌드 출력 결과물 가져오기

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

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

빌드 출력 결과물을 가져오려면(CodeBuild 콘솔)

  1. CodeBuild 콘솔이 계속 열려 있고 이전 단계의 빌드 세부 정보 페이지가 계속 표시된 상태에서, 빌드 상태결과물 보기 링크를 선택합니다. 이렇게 하면 빌드 출력 결과물이 있는 폴더가 Amazon S3에서 열립니다. (빌드 세부 정보 페이지가 표시되지 않으면, 탐색 모음에서 [Build history]를 선택한 다음 [Build run] 링크를 선택합니다.)

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

    10단계: 정리 섹션으로 이동합니다.

빌드 출력 결과물을 가져오려면(Amazon S3 콘솔)

  1. Open the Amazon S3 console at https://console.aws.amazon.com/s3/.

  2. codebuild-region-ID-account-ID-output-bucket이라는 버킷을 엽니다.

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

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

10단계: 정리

AWS 계정에 계속하여 요금이 부과되지 않도록 이 연습에서 사용한 입력 버킷을 삭제합니다. 자세한 정보는 Amazon Simple Storage Service Developer Guide버킷 삭제 또는 비우기 단원을 참조하십시오.

AWS 루트 계정이나 관리자 IAM 사용자 대신 IAM 사용자를 사용하여 이 버킷을 삭제하고 있는 경우 사용자에게 추가 액세스 권한이 있어야 합니다. (AWS 루트 계정을 사용하는 것은 권장되지 않습니다.) 사용자의 기존 액세스 정책에 마커 사이의 다음 명령문(### 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를 사용해 볼 수 있습니다. 아직 시도해 볼 준비가 되지 않은 것 같으면 샘플 몇 가지를 더 빌드해 볼 수 있습니다. 자세한 정보는 샘플 단원을 참조하십시오.