Menu

메모용 개발 블로그

전체보기 > GitLab >

WSL2+Gitlab runner+Docker executor에서 cache 안되는 문제

2023-02-13 12:32:24

대상 환경

GitLab Runner를 윈도우 11에서 구동하고 실행 환경을 Docker로 설정하였다.

Docker는 리눅스로 구동되며 사용하는 이미지는 maven:latest이다.

gitlab-ci.yml 예시

build:
  image: maven:latest
  stage: build
  script:
    - ...
  cache:
      key: "key"
      paths:
        - target/
  tag:
    - docker-tag

위의 예시처럼 작성하였다.

그러나 캐시가 제대로 저장이 되지 않았고 동작한 스크립트를 보니 다음과 같은 로그를 확인할 수 있었다.

Getting source from Git repository
00:02
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /builds/ezinc/prof/.git/
Checking out fca7546c as master...
Removing "..\\..\\..\\cache\\계정명\\프로젝트명\\key-2-protected\\cache.zip"

GitLab Runner는 각 Job마다 저장소를 리셋하는데.

fetch 방식으로 할 경우 변경된 파일들만 지운다.

여기서 ..\\..\\..\\cache\\계정명\\프로젝트명\\key-2-protected\\cache.zip라는 파일이 삭제되었는데.

실제로 확인해보니 캐시 파일이 저장되어야 할 위치가 아닌 엉뚱한 위치에 생성되었다.

해결

제대로 된 해결 방법은 찾지 못하였고, gitlab의 config.toml을 수정하여 docker 내부 경로는 host로 바인딩해서 직접 저장하는 방식으로 우회하였다.

예시)

...
[runners.docker]
    tls_verify = false
    image = "alphin:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/c/바인딩_경로:/바인딩_경로"]
    shm_size = 0
...