मेरे पास एक डॉकर छवि है, चलो इसे कॉल करते हैं frontend.image
, जो कि मैं जेनकिंस के गुलाम बनाने के लिए उपयोग करता हूं। जेनकिंस डॉकर प्लगइन इस छवि से एक कंटेनर को स्पिन करेगा और कंटेनर के अंदर कलाकृतियों का निर्माण करेगा। यह सब बहुत अच्छा काम करता है। इस मामले में, frontend.image
एक AngularJs ऐप बनाने के लिए उपयोग किया जाता है। इस एंगुलर ऐप को बनाने का एक हिस्सा एनपीएम पैकेज इंस्टॉल करना है, जिसके लिए ऐप की आवश्यकता होती है।
यह प्रक्रिया, npm स्थापित, एक लंबा समय लगता है, 3 मिनट ऐसा लगता है, npm हमेशा हर बार हर पैकेज को स्थापित करता है।
इसलिए मैंने अपने गुलाम के लिए एक वॉल्यूम जोड़ा, यह एक होस्ट माउंटेड वॉल्यूम है, डॉकर प्लगइन इस वॉल्यूम का उपयोग हर बार फ्रंटएंड कंटेनर को चलाने में करेगा:
कमांड निष्पादित करने वाला उपयोगकर्ता npm install
है jenkins
। npm एक कैश रखता है जिसे आप कमांड के साथ पा सकते हैं npm config get cache
जो आउटपुट देता है/home/jenkins/.npm
यही कारण है कि मेरे पास होस्ट वॉल्यूम /slaves/volumes/tsl.frontend:/home/jenkins
मेरे वेब कंटेनर स्लेव के लिए है।
मैं जेनकिन्स परियोजना का उपयोग करके अपने कोणीय ऐप का निर्माण करता हूं, कोई समस्या नहीं बनाता है, कई एनपीएम पैकेज स्थापित होते हैं। अगर मेरे डॉकर होस्ट में ssh और cmd चलाते हैं तो ls /slaves/volumes/tsl.frontend
मुझे बहुत सारे 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 install
सीएमडी की कोशिश की है , जो, जब मैं अपने लोकलहोस्ट मशीन पर चलाता हूं, तो पहली बार सभी पैकेज स्थापित करता है और अगली बार लगभग कोई पैकेज नहीं। और यह भी npm कैश "हैक" npm --cache-min 9999999 install
, इस एसओ उत्तर के साथ ही cmd से लिया गयाnpm --skip-installed --cache-min 9999999 install
एक संबंधित प्रश्न StackOverflow पर पोस्ट किया गया था।
npm cache ls
और एक कच्चे ls ~/.npm/* -al
जब निर्माण शुरू करने का निर्माण स्क्रिप्ट ही किसी अन्य निर्माण कदम से पहले में सिर्फ कंटेनर के राज्य सुनिश्चित करने के लिए।