Git

GitLab CI/CD 캐시, 왜 내 코드가 안 바뀔까?

누구세연 2025. 2. 28. 18:18

GitLab CI/CD를 사용할 때, 캐시(cache) 정책 설정이 제대로 되어 있지 않으면 코드 변경이 제대로 반영되지 않는 문제가 발생할 수 있습니다. (나도 가끔 겪었는데 👀) policy: pull 설정 때문에 기존 캐시가 유지되면서 새로운 코드가 반영되지 않는 일이 있습니다.

이번 글에서는 GitLab CI/CD의 캐시 개념과 policy 설정의 차이를 살펴보고, 내가 겪었던 문제를 정리해보려고 합니다!

 

🗒️ GitLab CI/CD cache란?

GitLab CI/CD에서 캐시(cache)는 빌드 테스트 속도를 향상시키기 위해 특정 파일이나 디렉터리를 저장하는 기능입니다.

캐시는 다음 실행에서 다시 사용될 수 있어 다운로드 시간을 줄이는 데 도움이 됩니다!

✅ 캐시와 아티팩트의 차이

구분 Cache Artifacts
저장 범위 브랜치 내에서만 공유 전체 파이프라인에서 공유
저장 위치 특정 Runner에 저장 GitLab 서버에 저장
보존 기간 기본적으로 자동 삭제 expire_in으로 설정 가능
사용 목적 빌드 속도 개선 빌드 결과물 보관

 

캐시는 특정 Runner에 저장되기 때문에 다른 Runner에서 실행될 경우 사용되지 않을 수 있습니다.

 

📖 GitLab CI/CD Cache 정책 (policy)

GitLab의 cachepolicy 설정에 따라 동작 방식이 달라집니다.

policy 설정값과 차이

policy 값 동작 방식 특징
pull (기본값) 기존 캐시를 가져와 사용하지만 업데이트는 안 함 캐시 활용 가능하지만, 변경 사항이 반영되지 않을 수 있음
push 새로운 캐시를 생성하여 저장 항상 최신 상태를 유지하지만, 매번 새로 저장하므로 속도 저하 가능
pull-push 기존 캐시를 불러오고 변경된 내용은 다시 저장 캐시 활용과 업데이트를 동시에 수행하여 효율적
 

📑 policy: pull로 인해 코드 변경이 반영되지 않는 문제

🔍 문제 원인

  • CI/CD 실행 시 코드 자체는 항상 최신으로 체크아웃(Git pull)됨.
  • 하지만 캐시된 파일(예: 빌드 결과물, 패키지)이 그대로 유지되면서 이전 실행 결과가 적용됨.
  • 빌드 과정에서 변경된 코드가 반영되지 않고, 이전 캐시된 파일이 계속 사용됨.

🚨 예제: node_modules 캐시 문제

policy: pull (변경 사항 반영되지 않음)

cache:
  key: my-cache
  paths:
    - node_modules/
  policy: pull
  • package.json이 변경되어도 node_modules/가 그대로 유지됨.
  • 새로운 패키지가 반영되지 않고 이전 캐시를 계속 사용.

policy: pull-push (변경 사항 반영)

cache:
  key: "$CI_COMMIT_REF_SLUG-$(checksum package-lock.json)"
  paths:
    - node_modules/
  policy: pull-push
  • package-lock.json이 변경되면 새로운 캐시가 생성됨.
  • 변경 사항을 반영하면서 기존 캐시도 재활용 가능.

 

GitLab Cache 최적화 방법

Cache 정책을 조정하는 것 외에도 빌드 속도를 최적화할 방법이 있습니다!

🚀 해결 방법 1: policy: pull-push 활용

  • 기존 캐시를 활용하면서 변경 사항만 업데이트할 수 있도록 설정.
  • 필요할 때만 새로운 캐시를 생성해 CI/CD 속도를 최적화.

🚀 해결 방법 2: 캐시 키(key) 설정 최적화

cache:
  key: "$CI_COMMIT_REF_SLUG-$(checksum package-lock.json)"
  paths:
    - node_modules/
  policy: pull-push
  • package-lock.json이 변경될 때만 새로운 캐시를 생성하여 불필요한 캐시 업데이트 방지.

🚀 해결 방법 3: 브랜치 간 캐시 공유

cache:
  key: shared
  paths:
    - node_modules/
  policy: pull-push
  • 같은 프로젝트 내에서 캐시를 공유하여 반복 다운로드 시간을 줄임.

🚀 해결 방법 4: 외부 저장소(S3 등) 활용

(이 방법은 일반적으로 사용되는 방식이지만, 직접 적용해보진 않았기에 개념 정도만 정리했다.)

  • GitLab Runner의 캐시 저장소 대신 AWS S3 같은 외부 저장소를 활용하면 지속적인 캐시 활용이 가능.

 

 

💡
policy: pull을 사용하면 이전 캐시를 유지하지만 변경 사항이 반영되지 않을 수 있음.
policy: push로 설정하면 새로운 캐시를 생성하면서 코드 변경이 반영되지만 CI/CD 속도가 느려질 수 있음. 가장 효율적인 방식은 policy: pull-push와 key 설정을 활용하여 캐시를 최적화하는 것!
GitLab CI/CD를 사용할 때, 적절한 캐시 정책을 설정하면 코드 반영 문제를 해결하면서도 빌드 속도를 최적화할 수 있다.
프로젝트의 빌드 환경에 따라 최적의 설정을 적용해보면 좋을 것 같습니다!

'Git' 카테고리의 다른 글

[Git] GitHub Repository에 연결하기  (0) 2024.06.28
[Git] Git의 3가지 공간  (0) 2023.10.21
[Git] git 충돌 해결하기  (2) 2023.10.18
[Git] branch를 합치는 방법  (2) 2023.10.15
[Git] 여러 branch 만들어보기  (0) 2023.10.13