ฉันมีภาพนักเทียบท่าเรียกมันfrontend.imageว่าฉันใช้สำหรับเจนกินส์สร้างทาส ปลั๊กอิน Jenkins Dockerจะหมุนคอนเทนเนอร์จากภาพนี้และสร้างสิ่งประดิษฐ์ภายในคอนเทนเนอร์ ทั้งหมดนี้ใช้งานได้ดี ในกรณีfrontend.imageนี้ใช้เพื่อสร้างแอป AngularJs ส่วนหนึ่งของการสร้างแอปพลิเคชันเชิงมุมนี้คือการติดตั้งแพคเกจ npm ที่แอปต้องการ
กระบวนการนี้ติดตั้ง npm ดูเหมือนจะใช้เวลานาน 3 นาทีดูเหมือนว่า npm จะติดตั้งทุกแพ็คเกจทุกครั้ง
ดังนั้นฉันจึงเพิ่มวอลลุ่มสำหรับทาสของฉันมันเป็นโวลุ่มที่เมาท์โฮสต์ปลั๊กอินนักเทียบท่าจะใช้วอลลุ่มนี้ทุกครั้งที่เรียกใช้คอนเทนเนอร์ส่วนหน้า:
ผู้ใช้ที่รันคำสั่งคือnpm install jenkinsNPM เก็บแคชซึ่งคุณสามารถหาได้ด้วยคำสั่งnpm config get cacheที่เอาต์พุต/home/jenkins/.npm
นั่นคือเหตุผลที่ฉันมีไดรฟ์ข้อมูลโฮสต์/slaves/volumes/tsl.frontend:/home/jenkinsติดตั้งกับทาสเว็บคอนเทนเนอร์ของฉัน
ฉันสร้างแอปพลิเคชัน Angular ของฉันโดยใช้โครงการ Jenkins สร้างไม่มีปัญหาติดตั้งแพคเกจ npm จำนวนมาก ถ้า ssh เข้าสู่โฮสต์ Docker ของฉันและเรียกใช้ cmd ls /slaves/volumes/tsl.frontendฉันเห็นแพ็คเกจ npm มากมาย นี่หมายความว่าเมานต์วอลลุ่มของฉันสำหรับทาสทำงาน

ตอนนี้ฉันสร้างโครงการเจนกินส์อีกครั้ง npm ติดตั้งทุกแพ็คเกจเดียวอีกครั้งแม้ว่าคอนเทนเนอร์สร้างทาสของนักเทียบท่าจะใช้เมานต์โฮสต์ปริมาณ ฉันยังสามารถยืนยันได้ด้วยการทุบตีลงในคอนเทนเนอร์ทาสด้วย cmd docker exec -it <some_clever_random_container_id> bashจากนั้น cmd su jenkinsแล้ว cmd npm cache lsซึ่งแสดงรายการแพคเกจ npm จำนวนมากที่ถูกแคชไว้

ดังนั้นแม้จะมีปริมาณการเมานท์โฮสต์ของฉันซึ่งมีสิทธิ์chmod 777โดยวิธีการดังนั้นจึงไม่มีปัญหาสิทธิ์ฉันยังไม่สามารถnpm installใช้แคช
ในงานสร้างของเจนกินส์ซึ่งหมุนขึ้นnpm cache lsที่แท่นวางทาสสต็อกคำสั่งแรกที่ฉันเรียกใช้และมีหลายแพคเกจไว้ในรายการนี่ไม่ได้หมายความว่าไดรฟ์ข้อมูลโฮสต์ของฉันทำงานได้ตามที่คาดไว้และดัชนีแคช npm
ฉันได้ลองใช้npm installcmd ปกติซึ่งเมื่อฉันรันบนเครื่อง localhost ของฉันจะติดตั้งแพ็คเกจทั้งหมดในครั้งแรกและแทบจะไม่มีแพ็คเกจเลยในครั้งต่อไป และยังเป็น "แฮ็ค" npm cache npm --cache-min 9999999 installซึ่งนำมาจากคำตอบ SO นี้และ cmdnpm --skip-installed --cache-min 9999999 install
คำถามที่เกี่ยวข้องถูกโพสต์ใน StackOverflow
npm cache lsและ raw ls ~/.npm/* -alในสคริปต์การสร้างตัวเองก่อนขั้นตอนการสร้างอื่น ๆ เพียงเพื่อให้แน่ใจว่าสถานะของคอนเทนเนอร์เมื่อเริ่มต้นการสร้าง

