Cache

Bitbucket Pipelines는 빌드 간에 타사 라이브러리와 같은 외부 빌드 종속성 및 디렉터리를 캐시하여, 더 빠른 빌드를 제공하고 소요되는 빌드 시간 (분)을 줄일 수 있습니다.

dependency caching이란 무엇인가요?

대부분의 빌드는 인터넷에서 종속성을 다운로드하는 명령을 실행하여 시작하며, 해당 명령으로 인해 각 빌드에서 많은 시간이 소요될 수 있습니다. 대부분의 종속성은 매번 다운로드하는 것이 아니라 동일하게 유지되므로 나중에 빌드 할 때 재사용 하도록 캐시에 다운로드하는 것이 좋습니다.

캐싱 설정

캐싱을 활성화 하려면 caches 섹션에 step을 추가하십시오.

아래는 pre-defined cache를 사용하여 Node.js 프로젝트의 node_modules 디렉토리를 캐싱하는 방법에 대한 예제입니다.

bitbucket-pipelines.yml pipelines: default: - step: caches: - node script: - npm install - npm test

이 파이프라인을 처음 실행하면 노드 캐시를 찾지 못하므로 npm 명령은 인터넷에서 종속성을 다운로드를 하게됩니다. 이후의 빌드 같은 경우에는 서비스에 캐시가 저장되어있으므로 빌드에 로드하는 것이 더 빠릅니다.

사전 정의 된 캐시

파이프라인은 일반적으로 사용되는 언어 도구에 대해 사전 정의 된 캐시 위치를 제공합니다.

Cache name

In your step

Directories

Cache name

In your step

Directories

docker

caches: - docker

해당 없음- 빌드에서 생성 된 레이어에서 캐시 를 생성합니다.

composer

caches: - composer

~/.composer/cache

dotnetcore

caches: - dotnetcore

~/.nuget/packages

gradle

caches: - gradle

~/.gradle/caches

ivy2

caches: - ivy2

~/.ivy2/cache

maven

caches: - maven

~/.m2/repository

node

caches: - node

node_modules

pip

caches: - pip

~/.cache/pip

sbt

caches: - sbt - ivy2

~/.sbt

~/.ivy2/cache

sbt 도구 를 사용할 때 sbt 및 ivy2 캐시를 모두 활성화해야 합니다.

기타 빌드 도구 및 디렉토리에 대한 사용자 정의 캐시

빌드 도구가 위에 나열되지 않은 경우에도 bitbucket-pipelines.yml 파일에서 저장소에 대한 사용자 지정 캐시를 정의 할 수 있습니다. 먼저 yml의 definitions 섹션에서 캐시 이름과 캐시 할 디렉토리를 정의하면, 모든 step에서 해당 캐시를 참조 할 수 있습니다 .

정의 된 캐시는 첫 번째 성공적인 빌드 후에 저장됩니다.

캐시 디렉토리 경로는 절대적이거나 복제 디렉토리에 상대적 일 수 있습니다. 예를 들면 다음과 같습니다.

  • $HOME/.npm

  • ~/.gradle/wrapper

  • /usr/local/lib/node_modules

  • vendor/bundle

참고로 Ruby의 경우 다음과 같이 시스템의 gem repo와는 별도의 위치에 gem을 설치해야합니다.

$ bundle install --path vendor/bundle

여러 디렉토리 캐싱

일부 빌드는 여러 디렉토리를 캐싱하면 도움이 될 수 있습니다. 다음과 같이 Step에서 여러 캐시를 참조하기 만하면됩니다.

image: openjdk:8 pipelines: default: - step: caches: - gradle # pre-defined cache - gradlewrapper # custom cache that must be defined below script: - ./gradlew build definitions: caches: gradlewrapper: ~/.gradle/wrapper

캐싱은 어떻게 작동하나요?

캐시는 언제 저장되나요?

캐시가 비어 있으면 성공적인 빌드에 캐시가 저장됩니다. 압축되면 1GB 미만의 캐시 만 저장됩니다.

캐시를 1GB 미만으로 압축하려면 docker 데몬의 원본 이미지 크기가 2GB 미만이어야합니다.

이 명령어를 bitbucket-pipelines.yml의 스크립트에 추가하여 크기를 확인할 수 있습니다 .
docker image inspect $(docker image ls -aq) --format {{.Size}} | awk '{totalSizeInBytes += $0} END {print totalSizeInBytes}'

캐시는 언제 복원되나요?

각 빌드가 시작될 때 저장된 캐시가 사용 가능한 경우 다운로드되어 해당 디렉토리에 배치됩니다.

캐시는 언제 삭제되나요?

1 주일이 지난 모든 캐시는 자동으로 지워지고 다음 빌드 중에 다시 채워집니다. 또한 Bitbucket UI에서 캐시를 수동으로 지울 수 있습니다. 파이프라인 페이지 상단의 오른쪽 상단의 Caches를 누른 후 휴지통 아이콘을 사용하여 캐시를 삭제합니다.

Best practices

종속성 캐싱은 동일한 파일을 반복적으로 다운로드하고 빌드하는 것을 방지하여 빌드 시간을 줄이는 것입니다.

즉, 다음과 같은 것을 캐시해야합니다.

  • 언어 별 종속성

  • 컴파일하는 데 시간이 걸리는 종속성 바이너리

다음을 캐시하면 안됩니다.

  • 암호 및 자격 증명과 같은 민감한 데이터