Tôi có một hình ảnh Docker, hãy gọi nó frontend.image
, mà tôi sử dụng cho một nô lệ xây dựng Jenkins. Plugin Jenkins Docker sẽ quay một container từ hình ảnh này và xây dựng các tạo phẩm bên trong container. Tất cả điều này làm việc tuyệt vời. Trong trường hợp này, ứng frontend.image
dụng được sử dụng để xây dựng ứng dụng AngularJs. Một phần của việc xây dựng ứng dụng Angular này là cài đặt các gói npm mà ứng dụng yêu cầu.
Quá trình này, cài đặt npm, dường như mất nhiều thời gian, dường như 3 phút, npm luôn cài đặt mọi gói mỗi lần.
Vì vậy, tôi đã thêm một ổ đĩa cho nô lệ của mình, nó là ổ đĩa được gắn trên máy chủ, plugin Docker sẽ sử dụng ổ đĩa này mỗi khi nó chạy bộ chứa frontend:
Người dùng thực thi lệnh npm install
là jenkins
. npm giữ một bộ đệm mà bạn có thể tìm thấy bằng lệnh npm config get cache
xuất ra/home/jenkins/.npm
Đó là lý do tại sao tôi có khối lượng máy chủ /slaves/volumes/tsl.frontend:/home/jenkins
được gắn vào nô lệ bộ chứa web của mình.
Tôi xây dựng ứng dụng Angular của mình bằng dự án Jenkins, xây dựng không có vấn đề gì, nhiều gói npm được cài đặt. Nếu ssh vào máy chủ Docker của tôi và chạy cmd, ls /slaves/volumes/tsl.frontend
tôi thấy rất nhiều gói npm. Điều này có nghĩa là khối lượng máy chủ lưu trữ của tôi cho nô lệ làm việc.
Bây giờ tôi xây dựng lại dự án Jenkins, npm cài đặt lại từng gói một lần nữa, mặc dù bộ chứa bản dựng nô lệ Docker đang sử dụng giá đỡ máy chủ khối lượng. Tôi thậm chí có thể xác nhận bằng cách bash vào container nô lệ với cmd docker exec -it <some_clever_random_container_id> bash
rồi cmd su jenkins
rồi cmd npm cache ls
liệt kê nhiều gói npm được lưu trữ.
Vì vậy, ngay cả với khối lượng gắn kết máy chủ của tôi, có quyền truy cập chmod 777
bằng cách này để không có vấn đề về quyền, tôi không thể npm install
sử dụng bộ đệm.
Trong bản dựng Jenkins của tôi, tạo ra thùng chứa nô lệ Docker, cmd đầu tiên tôi chạy là npm cache ls
và nhiều gói được liệt kê, điều này không có nghĩa là khối lượng máy chủ của tôi hoạt động như mong đợi và chỉ số bộ đệm npm có toàn vẹn hay không bị hỏng?
Tôi đã thử npm install
cmd thông thường , khi tôi chạy trên máy localhost của tôi sẽ cài đặt tất cả các gói lần đầu tiên và gần như không có gói nào vào lần tiếp theo. Và cũng là "hack" npm cache npm --cache-min 9999999 install
, được lấy từ câu trả lời SO này cũng như cmdnpm --skip-installed --cache-min 9999999 install
Một câu hỏi liên quan đã được đăng trên StackOverflow.
npm cache ls
và một nguyên ls ~/.npm/* -al
trong tập lệnh xây dựng trước bất kỳ bước xây dựng nào khác chỉ để đảm bảo trạng thái của bộ chứa khi bắt đầu xây dựng.