AWS CodeBuild의 빌드 캐싱 - AWS CodeBuild

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

AWS CodeBuild의 빌드 캐싱

프로젝트가 빌드될 때 캐시를 사용하여 시간을 절약할 수 있습니다. 캐시는 빌드 환경에서 재사용할 수 있는 정보를 저장하여 여러 빌드에 사용할 수 있습니다. 빌드 프로젝트는 두 캐싱 유형 중 하나를 사용할 수 있습니다. Amazon S3 또는 로컬입니다. 로컬 캐시를 사용하는 경우 다음 세 캐시 모드에서 하나 이상을 선택해야 합니다. 소스 캐시, Docker 계층 캐시 및 사용자 지정 캐시.

참고

Docker 계층 캐시 모드는 Linux 환경에서만 사용할 수 있습니다. 이 모드를 선택할 경우 권한이 있는 모드에서 빌드를 실행해야 합니다. CodeBuild 프로젝트는 권한 모드가 부여된 컨테이너에 모든 디바이스에 대한 액세스 권한을 부여합니다. 자세한 내용은 Docker 문서 웹 사이트의 런타임 권한 및 Linux 기능을 참조하십시오.

Amazon S3 캐싱

Amazon S3 캐싱은 여러 빌드 호스트에서 사용 가능한 캐시를 Amazon S3 버킷에 저장합니다. 이는 다운로드보다 빌드가 더 비용이 많이 드는 소용량 및 중간 크기의 빌드 결과물에 적합한 옵션입니다. 대용량 빌드 아티팩트의 경우에는 네트워크를 통해 전송하는 데 오랜 시간이 걸릴 수 있고 따라서 빌드 성능에 영향을 미칠 수 있으므로 최선의 옵션은 아닙니다. Docker 계층을 사용하는 경우에는 최선의 옵션이 아닙니다.

로컬 캐싱

로컬 캐싱은 해당 빌드 호스트에만 사용할 수 있는 캐시를 빌드에 로컬로 저장합니다. 빌드 호스트에서 즉각적으로 캐시를 사용할 수 있으므로 중간 빌드 결과물에 적합한 옵션입니다. 빌드가 드문 경우에는 최선의 옵션이 아닙니다. 이는 빌드 성능이 네트워크 전송 시간의 영향을 받지 않는다는 의미입니다. 로컬 캐싱을 선택할 경우 다음 캐시 모드 중 하나 이상을 선택해야 합니다.

  • 소스 캐시 모드는 기본 및 보조 소스를 위해 Git 메타데이터를 캐싱합니다. 캐시가 생성되면 이후의 빌드는 커밋 사이의 변경 사항만 끌어옵니다. 이 모드는 클린 작업 디렉터리를 사용하고 소스가 대규모 Git 리포지토리인 프로젝트에 적합한 선택입니다. 이 옵션을 선택하고 프로젝트가 Git 리포지토리(GitHub, GitHub Enterprise Server 또는 Bitbucket)를 사용하지 않을 경우 이 옵션은 무시됩니다.

  • Docker 계층 캐시 모드는 기존 Docker 계층을 캐싱합니다. 이 모드는 대용량 도커 이미지를 빌드하거나 끌어오는 프로젝트에 적합한 선택입니다. 네트워크에서 대용량 도커 이미지를 끌어올 때 발생하는 성능 문제를 방지할 수 있습니다.

    참고
    • Docker 계층 캐시는 Linux 환경에서만 사용할 수 있습니다.

    • 프로젝트가 필요한 Docker 권한을 가지도록 privileged 플래그를 설정해야 합니다.

      기본적으로 Docker 컨테이너는 모든 디바이스에 대한 액세스를 허용하지 않습니다. 권한 모드는 빌드 프로젝트의 Docker 컨테이너에 모든 디바이스에 대한 액세스 권한을 부여합니다. 자세한 내용은 Docker 문서 웹 사이트의 런타임 권한 및 Linux 기능을 참조하십시오.

    • Docker 계층 캐시를 사용하기 전에 보안에 미치는 영향을 고려해야 합니다.

  • 사용자 지정 캐시 모드는 buildspec 파일에 지정한 디렉터리를 캐싱합니다. 이 모드는 다른 두 로컬 캐시 모드에 적합하지 않은 빌드 시나리오에 적합한 선택입니다. 사용자 지정 캐시를 사용할 경우

    • 캐싱을 위해 디렉터리만 지정할 수 있습니다. 개별 파일은 지정할 수 없습니다.

    • Symlink를 사용하여 캐싱된 디렉터리를 참조합니다.

    • 캐싱된 디렉터리는 프로젝트 소스를 다운로드하기 전에 빌드에 연결됩니다. 캐시된 항목은 이름이 같은 경우 소스 항목을 재정의합니다. 디렉터리는 buildspec 파일에서 경로를 사용하여 지정합니다. 자세한 정보는 buildspec 구문을 참조하십시오.

    • 소스와 캐시에서 동일한 디렉터리 이름은 사용하지 마십시오. 로컬로 캐시된 디렉터리는 소스 리포지토리에서 이름이 같은 디렉터리의 내용을 재정의하거나 삭제할 수 있습니다.

참고

ARM_CONTAINERLINUX_GPU_CONTAINER 환경 유형과 BUILD_GENERAL1_2XLARGE 컴퓨팅 유형은 로컬 캐시 사용을 지원하지 않습니다. 자세한 정보는 빌드 환경 컴퓨팅 유형을 참조하십시오.

이AWS CLI, 콘솔, SDK 또는AWS CloudFormation로컬 캐시를 지정합니다.

로컬 캐싱 지정(CLI)

AWS CLI에서 --cache 파라미터를 사용하여 세 가지 로컬 캐시 유형을 각각 지정할 수 있습니다.

  • 소스 캐시를 지정하려면

    --cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
  • Docker 계층 캐시를 지정하려면

    --cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
  • 사용자 지정 캐시를 지정하려면

    --cache type=LOCAL,mode=[LOCAL_CUSTOM_CACHE]

자세한 정보는 빌드 프로젝트 생성(AWS CLI)을 참조하십시오.

로컬 캐싱 지정(콘솔)

콘솔의 결과물 섹션에서 캐시를 지정합니다. 용캐시 유형, 선택Amazon S3또는로컬. 로컬을 선택한 경우 세 로컬 캐시 옵션 중 하나 이상을 선택합니다.

자세한 정보는 빌드 프로젝트 만들기(콘솔)을 참조하십시오.

로컬 캐싱 지정(AWS CloudFormation)

AWS CloudFormation을 사용하여 로컬 캐시를 지정할 경우 Cache 속성에서 TypeLOCAL을 지정합니다. 다음 샘플 YAML 형식 AWS CloudFormation 코드는 세 가지 로컬 캐시 유형을 모두 지정합니다. 각 유형을 임의로 조합하여 지정할 수 있습니다. Docker 계층 캐시를 사용하는 경우 Environment에서 PrivilegedModetrue로 설정하고 TypeLINUX_CONTAINER로 설정해야 합니다.

CodeBuildProject: Type: AWS::CodeBuild::Project Properties: Name: MyProject ServiceRole: <service-role> Artifacts: Type: S3 Location: myBucket Name: myArtifact EncryptionDisabled: true OverrideArtifactName: true Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:5.0 Certificate: bucket/cert.zip # PrivilegedMode must be true if you specify LOCAL_DOCKER_LAYER_CACHE PrivilegedMode: true Source: Type: GITHUB Location: <github-location> InsecureSsl: true GitCloneDepth: 1 ReportBuildStatus: false TimeoutInMinutes: 10 Cache: Type: LOCAL Modes: # You can specify one or more cache mode, - LOCAL_CUSTOM_CACHE - LOCAL_DOCKER_LAYER_CACHE - LOCAL_SOURCE_CACHE
참고

기본적으로 Docker 컨테이너는 모든 디바이스에 대한 액세스를 허용하지 않습니다. 권한 모드는 빌드 프로젝트의 Docker 컨테이너에 모든 디바이스에 대한 액세스 권한을 부여합니다. 자세한 내용은 Docker 문서 웹 사이트의 런타임 권한 및 Linux 기능을 참조하십시오.

자세한 정보는 빌드 프로젝트 생성(AWS CloudFormation)을 참조하십시오.