Amazon S3 캐싱
Amazon S3 캐싱은 여러 빌드 호스트에 사용 가능한 캐시를 Amazon S3 버킷에 저장합니다. 이는 다운로드보다 빌드가 더 비용이 많이 드는 소형-중형 빌드 아티팩트에 적합한 옵션입니다.
빌드에서 Amazon S3를 사용하려면 buildspec.yml에서 캐싱하려는 파일의 경로를 지정할 수 있습니다. CodeBuild는 캐시를 자동으로 저장하고 프로젝트에 구성된 Amazon S3 위치로 업데이트합니다. 파일 경로를 지정하지 않으면 CodeBuild는 빌드 속도를 높이는 데 도움이 되도록 공통 언어 종속성을 캐싱하는 데 최선을 다합니다. 빌드 로그에서 캐시 세부 정보를 볼 수 있습니다.
또한, 여러 버전의 캐시를 사용하려는 경우 buildspec.yml에서 캐시 키를 정의할 수 있습니다. CodeBuild는 이 캐시 키의 컨텍스트에 캐시를 저장하고 생성된 후에는 업데이트되지 않는 고유한 캐시 복사본을 생성합니다. 캐시 키는 프로젝트 간에도 공유할 수 있습니다. 동적 키, 캐시 버전 관리, 빌드 간 캐시 공유와 같은 기능은 키가 지정된 경우에만 사용할 수 있습니다.
buildspec 파일의 캐시 구문에 대한 자세한 내용은 buildspec 참조의 cache를 참조하세요.
동적 키 생성
캐시 키는 쉘 명령과 환경 변수를 포함하여 고유하게 만들 수 있으므로, 키가 변경될 때 자동 캐시 업데이트가 가능합니다. 예를 들어, package-lock.json 파일의 해시를 사용하여 키를 정의할 수 있습니다. 해당 파일의 종속성이 변경되면 해시와 캐시 키가 변경되어 새 캐시의 자동 생성이 트리거됩니다.
cache: key: npm-key-$(codebuild-hash-files package-lock.json)
CodeBuild는 $(codebuild-hash-files package-lock.json) 표현식을 평가하여 최종 키를 가져옵니다.
npm-key-abc123
CODEBUILD_RESOLVED_SOURCE_VERSION과 같은 환경 변수를 사용하여 캐시 키를 정의할 수도 있습니다. 이렇게 하면 소스가 변경될 때마다 새 키가 생성되어 새 캐시가 자동으로 저장됩니다.
cache: key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION
CodeBuild는 표현식을 평가하고 최종 키를 가져옵니다.
npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369
codebuild-hash-files
codebuild-hash-files는 glob 패턴을 사용하여 CodeBuild 소스 디렉터리의 파일 세트에 대한 SHA-256 해시를 계산하는 CLI 도구입니다.
codebuild-hash-files<glob-pattern-1><glob-pattern-2>...
여기에 codebuild-hash-files를 사용하는 몇 가지 예가 있습니다.
codebuild-hash-files package-lock.json codebuild-hash-files '**/*.md'
캐시 버전
캐시 버전은 캐시되는 디렉터리의 경로에서 생성된 해시입니다. 두 캐시의 버전이 다른 경우 일치하는 프로세스 중에 캐시가 고유한 캐시로 처리됩니다. 예를 들어, 다음 두 캐시는 서로 다른 경로를 참조하기 때문에 서로 다른 것으로 간주됩니다.
version: 0.2 phases: build: commands: - pip install pandas==2.2.3 --target pip-dependencies cache: key: pip-dependencies paths: - "pip-dependencies/**/*"
version: 0.2 phases: build: commands: - pip install pandas==2.2.3 --target tmp/pip-dependencies cache: key: pip-dependencies paths: - "tmp/pip-dependencies/**/*"
프로젝트 간 캐시 공유
cache 섹션 아래의 cacheNamespace API 필드를 사용하여 여러 프로젝트에서 캐시를 공유할 수 있습니다. 이 필드는 캐시의 범위를 정의합니다. 캐시를 공유하려면 다음을 수행해야 합니다.
-
동일한
cacheNamespace를 사용합니다. -
동일한
key캐시를 지정합니다. -
동일한 캐시 경로를 정의합니다.
-
설정된 경우 동일한 Amazon S3 버킷 및
pathPrefix를 사용합니다.
이렇게 하면 일관성이 보장되고 프로젝트 간에 캐시 공유가 활성화됩니다.
캐시 네임스페이스 지정(콘솔)
-
https://console.aws.amazon.com/codesuite/codebuild/home
에서 AWS CodeBuild 콘솔을 엽니다. -
프로젝트 생성을 선택합니다. 자세한 내용은 빌드 프로젝트 만들기(콘솔) 및 빌드 실행(콘솔) 섹션을 참조하세요.
-
아티팩트에서 추가 구성을 선택합니다.
-
캐시 유형에서 Amazon S3를 선택합니다.
-
캐시 네임스페이스 - 선택 사항에서 네임스페이스 값을 입력합니다.
-
기본값으로 계속 진행한 다음 빌드 프로젝트 생성을 선택합니다.
캐시 네임스페이스 지정(AWS CLI)
AWS CLI의 --cache 파라미터를 사용하여 캐시 네임스페이스를 지정할 수 있습니다.
--cache '{"type": "S3", "location": "your-s3-bucket", "cacheNamespace": "test-cache-namespace"}'
buildspec 예제
다음은 일반적인 언어에 대한 몇 가지 buildspec 예제입니다.
캐시 Node.js 종속성
프로젝트에 package-lock.json 파일이 포함되어 있고 npm를 사용하여 Node.js 종속성을 관리하는 경우, 다음 예제에서 캐싱을 설정하는 방법을 보여줍니다. 기본적으로 npm에서는 node_modules 디렉터리에 종속성을 설치합니다.
version: 0.2 phases: build: commands: - npm install cache: key: npm-$(codebuild-hash-files package-lock.json) paths: - "node_modules/**/*"
캐시 Python 종속성
프로젝트에 requirements.txt 파일이 포함되어 있고 pip를 사용하여 Python 종속성을 관리하는 경우, 다음 예제에서 캐싱을 구성하는 방법을 보여줍니다. 기본적으로 pip는 시스템 site-packages 디렉터리에 패키지를 설치합니다.
version: 0.2 phases: build: commands: - pip install -r requirements.txt cache: key: python-$(codebuild-hash-files requirements.txt) paths: - "/root/.pyenv/versions/${python_version}/lib/python${python_major_version}/site-packages/**/*"
또한, 특정 디렉터리에 종속성을 설치하고 해당 디렉터리에 대한 캐싱을 구성할 수 있습니다.
version: 0.2 phases: build: commands: - pip install -r requirements.txt --target python-dependencies cache: key: python-$(codebuild-hash-files requirements.txt) paths: - "python-dependencies/**/*"
캐시 Ruby 종속성
프로젝트에 Gemfile.lock 파일이 포함되어 있고 Bundler를 사용하여 gem 종속성을 관리하는 경우, 다음 예제에서 캐싱을 효율적으로 구성하는 방법을 보여줍니다.
version: 0.2 phases: build: commands: - bundle install --path vendor/bundle cache: key: ruby-$(codebuild-hash-files Gemfile.lock) paths: - "vendor/bundle/**/*"
캐시 Go 종속성
프로젝트에 go.sum 파일이 포함되어 있고 Go 모듈을 사용하여 종속성을 관리하는 경우, 다음 예제에서 캐싱을 구성하는 방법을 보여줍니다. 기본적으로 Go 모듈은 다운로드되어 ${GOPATH}/pkg/mod 디렉터리에 저장됩니다.
version: 0.2 phases: build: commands: - go mod download cache: key: go-$(codebuild-hash-files go.sum) paths: - "/go/pkg/mod/**/*"