시작하기 CodeBuild - AWS CodeBuild

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

시작하기 CodeBuild

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

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

중요

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

콘솔 AWS CodeBuild 사용 시작하기

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

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

중요

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

1단계: 소스 코드 생성

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

이 단계에서는 출력 버킷에 빌드 CodeBuild 할 소스 코드를 생성합니다. 이 소스 코드는 Java 클래스 파일 2개와 Apache Maven 프로젝트 객체 모델(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단계: 소스 코드 생성)

이 단계에서는 빌드 사양 파일을 생성합니다. 빌드 사양은 가 빌드를 실행하는 데 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 단계 중에 이 mvn install 명령을 CodeBuild 실행합니다. 이 명령은 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 사용 설명서에서 버킷 생성을 참조하세요.

참고

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

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 개요 주제를 참조하십시오.

이 빌드 환경에서는 Java 개발 키트(JDK) 및 Apache Maven 버전이 포함된 Docker 이미지를 CodeBuild 사용하도록 지시합니다.

빌드 프로젝트를 생성하려면
  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 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

    • QUEUED

    • PROVISIONING

    • DOWNLOAD_SOURCE

    • INSTALL

    • PRE_BUILD

    • BUILD

    • POST_BUILD

    • UPLOAD_ARTIFACTS

    • FINALIZING

    • COMPLETED

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

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

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

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

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

이 단계에서는 CloudWatch 로그의 빌드에 대한 자세한 정보를 봅니다.

참고

민감한 정보를 보호하기 위해 CodeBuild 로그에는 다음이 숨겨집니다.

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

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

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

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. 에서 Amazon S3 콘솔을 엽니다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단계: 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 CodeBuild 사용 시작하기 AWS CLI

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

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

중요

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

1단계: 소스 코드 생성

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

이 단계에서는 출력 버킷에 빌드 CodeBuild 할 소스 코드를 생성합니다. 이 소스 코드는 Java 클래스 파일 2개와 Apache Maven 프로젝트 객체 모델(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단계: 소스 코드 생성)

이 단계에서는 빌드 사양 파일을 생성합니다. 빌드 사양은 가 빌드를 실행하는 데 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 단계 중에 이 mvn install 명령을 CodeBuild 실행합니다. 이 명령은 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 사용 설명서에서 버킷 생성을 참조하세요.

참고

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

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 개요 주제를 참조하십시오.

이 빌드 환경에서는 Java 개발 키트(JDK) 및 Apache Maven 버전이 포함된 Docker 이미지를 CodeBuild 사용하도록 지시합니다.

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

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

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

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

    { "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" }

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

    이 데이터에서:

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

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

    • 의 경우 는 소스 코드의 경로를 source location 나타냅니다(이 예제에서는 입력 버킷 이름 뒤에 ZIP 파일 이름).

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

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

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

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

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

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

    참고

    description, , buildspec auth ( type 및 포함resource), , , (용artifacts), , name ( 및 포함), packaging, pathnamespaceType, environmentVariables ( name 및 포함valuetimeoutInMinutesencryptionKeytagskeyvalue)과 같은 원래 JSON형식의 데이터에서 사용 가능한 다른 값은 선택 사항입니다. 이러한 값은 이 자습서에서 사용되지 않으므로 여기서는 다루지 않습니다. 자세한 내용은 빌드 프로젝트 생성(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-ARN 에 수행할 권한이 없습니다. codebuild:CreateProject. 이는 빌드 프로젝트를 생성하는 CodeBuild 데 사용할 수 있는 충분한 권한이 없는 사용자의 자격 증명 AWS CLI 으로 를 구성했기 때문일 가능성이 높습니다. 이 문제를 해결하려면 다음 IAM엔터티 중 하나에 속하는 자격 증명으로 를 구성합니다 AWS CLI .

6단계: 빌드 실행

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

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

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

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

    Replace 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

    Replace 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 는 정보를 사용할 수 없는 IDs 빌드의 빌드를 나타냅니다. 이 예에서는 비어 있어야 합니다.

    • 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에서 빌드 로그에 대한 정보를 나타냅니다.

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

        참고

        Amazon S3 콘솔을 사용해서도 이러한 해시를 확인할 수 있습니다. 빌드 출력 결과물 옆의 확인란을 선택하고 작업, 속성을 차례로 선택합니다. 속성 창에서 메타데이터 를 확장하고 x-amz-meta-codebuild-content-md5x-amz-meta-codebuild-content-sha256의 값을 확인합니다. (Amazon S3 콘솔에서 빌드 출력 아티팩트의 ETag 값은 MD5 또는 SHA-256 해시로 해석되어서는 안 됩니다.)

        를 AWS SDKs 사용하여 이러한 해시를 가져오면 값의 이름이 codebuild-content-md5 및 로 지정됩니다codebuild-content-sha256.

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

    참고

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

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

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

이 단계에서는 CloudWatch 로그의 빌드에 대한 자세한 정보를 봅니다.

참고

민감한 정보를 보호하기 위해 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 로그 로그 로그 스트림에서 로그 이벤트를 찾아볼 수 있습니다. 기본적으로 가장 최근의 로그 이벤트 세트만 표시됩니다. 이전의 로그 이벤트를 보려면 목록의 처음으로 스크롤합니다.

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

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

... [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. 에서 Amazon S3 콘솔을 엽니다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단계: 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 단원을 참조하십시오.