2015-09-29 6 views
12

में प्रत्येक बिल्ड पर नोडजेस एनपीएम चरण डाउनलोड पैकेज, जब मैं नोडजेएस एनपीएम की बात करता हूं तो मैं एक एन 00 बी का थोड़ा सा हिस्सा लेता हूं, लेकिन कई लेखों पर अनुशंसित चरणों का उपयोग करके इसे हमारे निर्माण वातावरण में कार्यान्वित करने के बाद से हमारे निर्माण के समय में तीन गुना वृद्धि हुई है।टीमसीटी

हम मानक सामान (कम करें/concat/आदि js/सीएसएस/आदि)

हम TeamCity का उपयोग करें और फिर एक Node.js NPM चरण कार्यों (आरई को चलाने के लिए एक घूंट कदम जोड़ लिया है के लिए इसका इस्तेमाल करते हैं: https://github.com/jonnyzzz/TeamCity.Node)

एनपीएम सेट करने का कार्य सबसे अधिक समय लगता है, 2min 10 सेकेंड, जो "बिल्डिंग एनपीएम इंस्टॉल" नामक कुल बिल्ड समय का 65% से अधिक है, जो प्रत्येक बिल्ड पर सभी संकुल को दोबारा डाउनलोड करने लगता है

चरण 3/7: NPM सेटअप (Node.js NPM) (2m: 10s)

012,

[NPM स्थापित] शुरू: cmd/सी NPM स्थापित

आउट कुल निर्माण के समय से पहले 1min 30sec के आसपास थे, इकाई परीक्षण भी शामिल है।

क्या इन स्थानीय रूप से कैश करने और प्रत्येक निर्माण पर पुनः डाउनलोड करने के लिए वैसे भी है? उपयोगकर्ता प्रोफ़ाइल में या बिल्ड फ़ोल्डर के विपरीत शायद कुछ हो सकता है?

अधिक विस्तार ..

यह शायद सबसे अच्छा सेटअप http://www.dotnetcurry.com/visualstudio/1096/using-grunt-gulp-bower-visual-studio-2013-2015

हम C# परियोजनाओं है कि नए कार्य धावक एक्सप्लोरर का उपयोग कर रहे हैं बताते हैं, निर्भरता इस से एक package.json में सहेजे जाते हैं, आप आपके स्थानीय वातावरण पर एक बार वर्कस्पेस (एक .tfignore का उपयोग करने के लिए इसे स्रोत में जांचने से रोकने के लिए) की आवश्यकता है, फिर भी, जब तक कि आप एक नया स्थानीय कार्यक्षेत्र शुरू नहीं करते हैं, तब तक पूर्व-रन "npm इंस्टॉल करें"।

जब बिल्ड रन चलाता है तो उसे कमांड लाइन से "npm इंस्टॉल" चलाने की आवश्यकता होती है और यह package.json फ़ाइल से निर्भरता उठाता है और उन्हें हर बार बिल्ड की कार्यशील निर्देशिका के अंदर एक उप फ़ोल्डर में स्थापित करता है, भले ही फाइलें पहले से ही पिछले निर्माण से हैं (यानी टीसी एजेंट ने उन्हें साफ़ नहीं किया है), फिर भी आप उन्हें काम करने वाले फ़ोल्डर के बाहर स्थापित नहीं कर सकते हैं।

मैं गलत हो सकता था ... या मुझे कहना चाहिए कि मुझे उम्मीद है कि मैं गलत हूं, और इसका समर्थन करने के लिए गल्प के लिए एक रास्ता तलाश रहा हूं, लेकिन जिस तरह से हम इसे काम करते हैं, उसे कार्य धावक एक्सप्लोरर के साथ काम करने की आवश्यकता होगी ताकि देव के लिए F5 अनुभव अभी भी उनके स्थानीय पर समान है।

हमारे पास कई एजेंट हैं हां।

+0

क्या आपने कभी इस मुद्दे के लिए स्वीकार्य समाधान किया है? – tofutim

उत्तर

6

सबसे अच्छा तरीका है मैं ठीक करने के लिए इस बैकअप के लिए गया था पाया/नोड मॉड्यूल पुनर्स्थापित, मैं इसके बारे में एक ब्लॉग पोस्ट यहाँ

https://beerandserversdontmix.com/2016/06/04/teamcity-and-avoiding-redownloading-of-npm-packages/

+0

यह वही है जो हम करते हैं (हालांकि हम जेनकींस का उपयोग कर रहे हैं, टीमसिटी नहीं), लेकिन जैसे ही हमारी निर्भरता बदलती है, हम पाते हैं कि एक बार जबकि हमें नोड मॉड्यूल निर्देशिका को मिटा देना है क्योंकि एनपीएम बस असफल हो जाएगा, इसलिए यह बहुत अच्छा समाधान प्रतीत नहीं होता है। – jssebastian

9

मैं Node.js के बारे में पता नहीं है, लेकिन यहां एक जोड़े TeamCity विशिष्ट सुझाव हैं:

  1. NPM शायद %TEMP% में फ़ाइलों को डाउनलोड करता है? यदि ऐसा है, तो वे आगामी टीमसिटी बिल्ड के बीच पुन: प्रयोज्य नहीं होंगे क्योंकि एक टीमसिटी एजेंट %TEMP% निर्देशिका को हाइजैक करता है (इसे <TeamCity Home>/buildAgent/temp/buildTmp पर रीडायरेक्ट करता है) और हर नए निर्माण से पहले हमेशा इस निर्देशिका को पूरी तरह से मिटा देता है। (buildTmphere देखें।)
    • इस संदर्भ में, यह अगर तुम हिदायत सकता NPM डाउनलोड की गई फ़ाइलें कार्यक्षेत्र में (निर्देशिका है जहाँ आप अपने निर्माण चेकआउट) स्टोर करने के लिए के बजाय बेहतर होगा।
  2. NPM है कार्यक्षेत्र (चेकआउट dir) में डाउनलोड करने हैं, तो आप शायद हर चलाने पर एक साफ चेकआउट करने के लिए अनुरोध किया है?
    • उस मामले में, चेकबॉक्स का चयन रद्द (निर्माण चेकबॉक्स से पहले स्वच्छ सभी चेकआउट निर्देशिका में फ़ाइलों | संस्करण नियंत्रण सेटिंग्स | | उन्नत विकल्प दिखाएंसंपादित कॉन्फ़िगरेशन सेटिंग देखें।)।
  3. शायद कम डिस्क स्थान के कारण टीमसिटी चेकआउट निर्देशिका को साफ कर रहा है? यह क्लीन-अप स्वचालित रूप से तब चलता है जब टीमसिटी नोटिस करता है कि यह अंतरिक्ष से बाहर हो रहा है। उस मामले में (क्लीन-अप और भी अधिक नि: शुल्क डिस्क स्थान निर्माण की सुविधा के साथ आक्रामक बनाया जा सकता है।)
    • , निर्माण सुविधा का उपयोग कर बंद करो। यदि इसका उपयोग नहीं किया जाता है और स्वचालित सफाई को दोष देना है, तो इसे नियंत्रित करना मुश्किल है। यह सबसे अच्छा है यदि आप बस अपनी फ़ाइल-सिस्टम के उस हिस्से को साफ़ करते हैं जिसे टीमसिटी (आपके %TEMP% और अन्य स्थानों) द्वारा प्रबंधित नहीं किया जाता है और इस प्रकार टीमसिटी को कुछ छूट मिलती है।
  4. क्या आपका निर्माण हर बार एक अलग एजेंट पर चल रहा है? (निर्माण इतिहास से परामर्श लें।) यदि ऐसा है, तो यह डाउनलोड की गई कलाकृतियों का पुन: उपयोग नहीं कर सकता है (भले ही वे चेकआउट डीआईआर में डाउनलोड हो जाएं), क्योंकि वे हर बार एक अलग मशीन के फाइल सिस्टम पर डाउनलोड होते हैं। मुझे संदेह है कि यह मामला हालांकि है, क्योंकि टीमसिटी एजेंट-वर्कस्पेस पुन: उपयोग (उसी एजेंट को चिपके हुए) की ओर अग्रसर करता है।
    • उस स्थिति में, आप एजेंट की आवश्यकता को सेट करके एजेंट पुन: उपयोग को मजबूर कर सकते हैं, यह निर्दिष्ट करते हुए कि आप चाहते हैं कि आप हर समय एक विशिष्ट एजेंट पर चलें। आप उस एजेंट को अपने पूल में भी एकल कर सकते हैं, ताकि कोई अन्य निर्माण इस पर चल सके।
+0

यह शायद सबसे अच्छा यह http: //www.johnpapa बताता है।नेट/गेट-अप-एंड-रनिंग-नोड-एंड-विज़ुअल-स्टूडियो/ – Joe

0

यदि आप नहीं कर रहे 'किया है "ढीला" पैकेज संस्करणों का उपयोग करके यह आपकी समस्या हो सकती है। आप npm install [email protected] जैसे कुछ निर्दिष्ट कर सकते हैं, लेकिन फिर आप हर समय पुराने संस्करण पर फंस जाते हैं, और यदि आपके डेवलपर्स अक्सर आपके द्वारा बनाए गए बदलाव को बदलते हैं तो आपके निर्माण सिस्टम पर मंथन होगा।

अपने पैकेज में। जेसन आप वाइल्डकार्ड संस्करणों को परिभाषित करने के लिए * और ~ का उपयोग कर सकते हैं, जैसे कि 3. * या ~ 2.5 जो आपको 3.0x या 3.0.99 जैसे 3.x का कोई "मामूली" संशोधन प्राप्त करने देगा, और 2.5 कुछ समान होगा, 2.5.x का कोई भी संस्करण स्थापित किया जा सकता है, लेकिन 2.6.0 नहीं।

संबंधित मुद्दे