हम अपने निर्माण बुनियादी ढांचे के लिए वीएम के निर्माण को स्वचालित करने की योजना बना रहे हैं ताकि हम कर सकें:
- आवश्यकता के आधार पर बिल्ड संसाधनों को स्केल करें, जैसे आवश्यकता होने पर अधिक बिल्ड एजेंट जोड़कर और आवश्यकता न होने पर उन्हें हटा दें
- बिल्ड पर्यावरण के सभी या कुछ हिस्सों को फिर से बनाएँ / यदि मशीनें मर जाती हैं
- जब हमें परीक्षण सेट की आवश्यकता होती है तो बिल्ड वातावरण को डुप्लिकेट करें
इस प्रक्रिया के चरणों में से एक VM बेस छवियों के निर्माण को स्वचालित कर रहा है (हाइपर-वी का उपयोग करके हमारे मामले में)। उसके लिए हमारे पास एक स्क्रिप्ट है:
- ISO से नए VHDX को Convert-WindowsImage स्क्रिप्ट के साथ बनाता है । हम वर्तमान में Windows 2012R2 का उपयोग कर रहे हैं, लेकिन उपलब्ध होते ही 2016 के साथ आरंभ करना चाहते हैं।
- सभी आधार कॉन्फ़िगरेशन के साथ नए VHDX के लिए एक अनअटेंडेड स्क्रिप्ट जोड़ता है जो हमें चाहिए
- लागू- WindowsUpdate स्क्रिप्ट का उपयोग करके नवीनतम विंडोज़ पैच के साथ VHDX को अपडेट करता है
- VHDX पर आधारित एक नया हाइपर-वी वीएम बनाता है और इसे शुरू करता है
- VM को बूट करने के लिए प्रतीक्षा करता है और WinRM सेवा के लिए दूरस्थ कनेक्शन स्वीकार करने के लिए तैयार होने की प्रतीक्षा करता है
- प्रारंभिक कॉन्फ़िगरेशन और नए पैच के कॉन्फ़िगरेशन को पूरा करने के लिए खिड़कियों की प्रतीक्षा करता है
- किसी भी आगे पैच लागू करता है
- नवीनतम पैच के कॉन्फ़िगरेशन को पूरा करने के लिए रिबूट
- पैच को पूरा करने के लिए खिड़कियों की प्रतीक्षा करता है
- मशीन के लिए एक sysprep स्क्रिप्ट देता है और उस स्क्रिप्ट को आमंत्रित करता है। यह sysprep चलाता है और फिर मशीन को बंद कर देता है
- VM को हटा देता है लेकिन VHDX को रखता है
- VHDX से sysprep और unattend फाइलें हटाता है और फिर VHDX को कंपैक्ट करता है
- VHDX को टेम्प्लेट स्थान पर ले जाता है और केवल पढ़ने के लिए चिह्नित करता है
समस्या जो हम अनुभव कर रहे हैं, वह चरण 6 और 9 में है। आदर्श रूप से हम मशीन को रिबूट / शट डाउन करने से पहले सभी कॉन्फ़िगरेशन के पूरा होने की प्रतीक्षा करते हैं, लेकिन ऐसा प्रतीत नहीं होता है कि विंडो का कॉन्फ़िगरेशन चरण समाप्त हो गया है।
यूआई से गुजरते समय यह या तो स्पष्ट होता है जब या तो चरण किया जाता है क्योंकि लॉग-इन यूआई प्रक्रिया तैयार होने तक दिखाई नहीं देता है। हालाँकि जब मशीन से दूर से कनेक्ट करने के लिए WinRM का उपयोग किया जाता है तो यह कम स्पष्ट होता है क्योंकि WinRM विन्यास कार्य के साथ काम करने से पहले मशीन तक पहुँच प्रदान करता है।
तो सवाल यह है कि एक दूरस्थ कनेक्शन का पता लगाने के लिए सबसे मूर्खतापूर्ण सबूत तरीका क्या है जिसे विंडोज ने अपडेट अपडेट आदि को समाप्त कर दिया है ताकि हम बाद में समस्या पैदा किए बिना मशीन को रिबूट / बंद कर सकें।
------ EDIT -----
अंत में हम कैथरीन के उत्तर के एक संशोधित संस्करण का उपयोग कर रहे हैं जिसमें हमारी स्क्रिप्ट भी प्रतीक्षा कर रही है windeploy
और ngen
पूरी होने वाली है। यह देखते हुए कि ngen
ओएस काम करने के बाद जब तक पूरा नहीं हो जाता, यह देखते हुए और एक बोनस के रूप में अंतिम VHDX में .NET फ्रेमवर्क ngen-ed होगा, जिसका अर्थ है कि जब हम नया बनाते हैं, तो हमें उससे निपटना नहीं पड़ता है। टेम्पलेट डिस्क के वी.एम. दोनों स्क्रिप्ट जो हम VHDX टेम्पलेट बनाने के लिए उपयोग करते हैं और स्थानीय टेस्ट वातावरण बनाने के लिए स्क्रिप्ट किसी भी रुचि के मामले में जीथब पर हैं।