frontend.image
Jenkins 빌드 슬레이브에 사용 하는 Docker 이미지가 있습니다. Jenkins Docker 플러그인 은이 이미지에서 컨테이너를 회전시키고 컨테이너 내부에 아티팩트를 빌드합니다. 이 모든 것이 잘 작동합니다. 이 경우, frontend.image
는 AngularJs 앱을 빌드하는 데 사용됩니다. 이 Angular 앱을 빌드하는 과정에서 앱에 필요한 npm 패키지를 설치해야합니다.
npm install이 프로세스는 시간이 오래 걸리고 3 분이 걸리는 것처럼 보입니다. npm은 항상 모든 패키지를 매번 설치합니다.
따라서 슬레이브에 볼륨을 추가했습니다. 호스트 마운트 볼륨입니다. Docker 플러그인은 프론트 엔드 컨테이너를 실행할 때마다이 볼륨을 사용합니다.
명령을 실행하는 사용자 npm install
는 jenkins
입니다. npm은 npm config get cache
출력 하는 명령으로 찾을 수있는 캐시를 유지합니다./home/jenkins/.npm
그래서 /slaves/volumes/tsl.frontend:/home/jenkins
웹 컨테이너 슬레이브에 호스트 볼륨을 마운트했습니다.
Jenkins 프로젝트를 사용하여 Angular 앱을 빌드하고 아무런 문제가 없으며 많은 npm 패키지가 설치됩니다. Docker 호스트에 ssh하고 cmd를 실행하면 ls /slaves/volumes/tsl.frontend
많은 npm 패키지가 표시됩니다. 이것은 슬레이브의 호스트 볼륨 마운트가 작동했음을 의미합니다.
Docker 슬레이브 빌드 컨테이너가 볼륨 호스트 마운트를 사용하더라도 npm은 Jenkins 프로젝트를 다시 빌드합니다. npm은 모든 단일 패키지를 다시 설치합니다. 캐시 된 많은 npm 패키지를 나열하는 docker exec -it <some_clever_random_container_id> bash
cmd su jenkins
, cmd 및 cmd를 사용하여 슬레이브 컨테이너에 bashing하여 확인할 수도 있습니다 npm cache ls
.
따라서 권한 chmod 777
이없는 호스트 마운트 볼륨에서도 권한 문제가 없으므로 npm install
캐시를 사용할 수 없습니다 .
Docker 슬레이브 컨테이너를 가동시키는 Jenkins 빌드에서 첫 번째 실행 cmd가 npm cache ls
있고 많은 패키지가 나열되어 있는데, 이는 호스트 볼륨이 예상대로 작동하고 npm 캐시 색인이 손상되지 않았 음을 의미하지 않습니까?
나는 npm install
로컬 호스트 컴퓨터에서 실행할 때 모든 패키지를 처음으로 설치하고 다음에 거의 패키지를 설치하지 않는 일반 cmd를 시도했습니다 . 또한 이 SO 답변 과 cmd npm --cache-min 9999999 install
에서 가져온 npm 캐시 "hack"npm --skip-installed --cache-min 9999999 install
관련 질문 이 StackOverflow에 게시되었습니다.
npm cache ls
및 raw ls ~/.npm/* -al
를 추가했습니다 .