Saya memiliki gambar Docker, sebut saja frontend.image
, yang saya gunakan untuk Jenkins build slave. Plugin Jenkins Docker akan memutar wadah dari gambar ini dan membuat artefak di dalam wadah. Ini semua bekerja dengan baik. Dalam hal ini, frontend.image
digunakan untuk membangun aplikasi AngularJs. Bagian dari membangun aplikasi Angular ini adalah untuk menginstal paket npm yang dibutuhkan oleh aplikasi.
Proses ini, instal npm, tampaknya memakan waktu lama, sepertinya 3 menit, npm selalu menginstal setiap paket setiap kali.
Jadi saya menambahkan volume untuk budak saya, ini adalah volume yang dipasang di host, plugin Docker akan menggunakan volume ini setiap kali menjalankan wadah frontend:
Pengguna yang menjalankan perintah npm install
adalah jenkins
. npm menyimpan cache yang dapat Anda temukan dengan perintah npm config get cache
output mana/home/jenkins/.npm
Itulah sebabnya saya memiliki volume host yang /slaves/volumes/tsl.frontend:/home/jenkins
dipasang ke slave kontainer web saya.
Saya membangun aplikasi Angular saya menggunakan proyek Jenkins, membangun tidak ada masalah, banyak paket npm diinstal. Jika ssh ke host Docker saya dan menjalankan cmd ls /slaves/volumes/tsl.frontend
saya melihat banyak paket npm. Ini berarti volume host host saya untuk slave berfungsi.
Sekarang saya membangun proyek Jenkins lagi, npm menginstal setiap paket lagi, meskipun wadah penampung budak Docker menggunakan mount host volume. Saya bahkan dapat mengkonfirmasi dengan menampar ke dalam slave container dengan cmd docker exec -it <some_clever_random_container_id> bash
lalu cmd su jenkins
lalu cmd npm cache ls
yang berisi daftar banyak paket npm yang di-cache.
Jadi, bahkan dengan volume mount host saya, yang memiliki izin chmod 777
dengan cara sehingga tidak ada masalah izin, saya tidak bisa npm install
menggunakan cache.
Dalam build Jenkins saya, yang memutar kontainer slave Docker, cmd pertama yang saya jalankan adalah npm cache ls
dan banyak paket terdaftar, bukankah ini berarti volume host saya berfungsi seperti yang diharapkan dan indeks cache npm memiliki integritas alias tidak rusak?
Saya telah mencoba npm install
cmd biasa , yang, ketika saya jalankan di mesin localhost saya menginstal semua paket pertama kali dan hampir tidak ada paket lain kali. Dan juga cache npm "hack" npm --cache-min 9999999 install
, diambil dari jawaban SO ini serta cmdnpm --skip-installed --cache-min 9999999 install
Pertanyaan terkait telah diposting di StackOverflow.
npm cache ls
dan mentah ls ~/.npm/* -al
dalam skrip build itu sendiri sebelum langkah build lainnya hanya untuk memastikan keadaan wadah saat memulai build.