ฉันมีภาพนักเทียบท่าเรียกมันfrontend.image
ว่าฉันใช้สำหรับเจนกินส์สร้างทาส ปลั๊กอิน Jenkins Dockerจะหมุนคอนเทนเนอร์จากภาพนี้และสร้างสิ่งประดิษฐ์ภายในคอนเทนเนอร์ ทั้งหมดนี้ใช้งานได้ดี ในกรณีfrontend.image
นี้ใช้เพื่อสร้างแอป AngularJs ส่วนหนึ่งของการสร้างแอปพลิเคชันเชิงมุมนี้คือการติดตั้งแพคเกจ npm ที่แอปต้องการ
กระบวนการนี้ติดตั้ง npm ดูเหมือนจะใช้เวลานาน 3 นาทีดูเหมือนว่า npm จะติดตั้งทุกแพ็คเกจทุกครั้ง
ดังนั้นฉันจึงเพิ่มวอลลุ่มสำหรับทาสของฉันมันเป็นโวลุ่มที่เมาท์โฮสต์ปลั๊กอินนักเทียบท่าจะใช้วอลลุ่มนี้ทุกครั้งที่เรียกใช้คอนเทนเนอร์ส่วนหน้า:
ผู้ใช้ที่รันคำสั่งคือnpm install
jenkins
NPM เก็บแคชซึ่งคุณสามารถหาได้ด้วยคำสั่ง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 install
cmd ปกติซึ่งเมื่อฉันรันบนเครื่อง localhost ของฉันจะติดตั้งแพ็คเกจทั้งหมดในครั้งแรกและแทบจะไม่มีแพ็คเกจเลยในครั้งต่อไป และยังเป็น "แฮ็ค" npm cache npm --cache-min 9999999 install
ซึ่งนำมาจากคำตอบ SO นี้และ cmdnpm --skip-installed --cache-min 9999999 install
คำถามที่เกี่ยวข้องถูกโพสต์ใน StackOverflow
npm cache ls
และ raw ls ~/.npm/* -al
ในสคริปต์การสร้างตัวเองก่อนขั้นตอนการสร้างอื่น ๆ เพียงเพื่อให้แน่ใจว่าสถานะของคอนเทนเนอร์เมื่อเริ่มต้นการสร้าง