2009-09-08 15 views
10

मैं कैसे रोक सकता हूं और फिर आईएसआई 7 एप्लिकेशन पूल को टीमसिटी के अंदर चल रहे एमएसबिल्ड स्क्रिप्ट से पुनरारंभ कर सकता हूं। मैं टेस्टर्स को देखने के लिए आईआईएस सर्वर पर हमारे रात के निर्माण को तैनात करना चाहता हूं।बिल्ड स्क्रिप्ट से आईआईएस 7 एप्लिकेशन पूल रोकें

मैं बहुत तरह appcmd का उपयोग कर की कोशिश की है:

appcmd stop apppool /apppool.name:MYAPP-POOL 

... लेकिन मैं विंडोज 2008 में ऊंचाई मुद्दों है कि अब तक मेरी TeamCity निर्माण प्रक्रिया से है कि आदेश को चलाने के लिए सक्षम किया जा रहा से मुझे बंद कर दिया है में चलाने की है क्योंकि विंडोज 2008 को एपीसीएमडी चलाने के लिए ऊंचाई की आवश्यकता है।

इससे पहले कि मैं वेब सर्वर से मेरी फ़ाइलों की प्रतिलिपि अगर मैं अनुप्रयोग पूल रोक नहीं मेरी MSBuild स्क्रिप्ट सर्वर पर फ़ाइलों की प्रतिलिपि करने में असमर्थ है।

क्या किसी और ने टीमसिटी से आईआईएस में वेब साइट पर तैनाती करते समय इस मुद्दे को देखा और हल किया है?

+0

मैं CruiseControl.NET के साथ एक ही मुद्दा है। मेरे पास एक प्रोजेक्ट है जिसे मुझे आईआईएस को रोकना/शुरू करना होगा, लेकिन पूरे क्रूज़ कंट्रोल सेवा को एक ऊंचे खाते के रूप में नहीं चलाएं। – CodingWithSpike

उत्तर

0

आप बिल्ड एजेंट सेवा सेटिंग्स को सिस्टम (डिफ़ॉल्ट) के बजाय सामान्य उपयोगकर्ता खाते के रूप में लॉग-ऑन करने के लिए बदलने का प्रयास कर सकते हैं, यह सेवा नियंत्रण कक्ष (स्टार्ट | रन | services.msc) से किया जा सकता है।

यदि यह मदद नहीं करता है, तो आप भी appcmd हमेशा ऊंचा चलाने के लिए, जानकारी के लिए this document का उल्लेख को विन्यस्त कर सकते हैं।

यदि ऐसा विकल्प appcmd के लिए उपलब्ध नहीं है या यह अभी भी काम नहीं करता है, तो आप इस उपयोगकर्ता के लिए पूरी तरह से यूएसी को अक्षम कर सकते हैं।

1) आपकी सेवा के रूप में चलाने के लिए एक सीमित पहुँच खाता सेट करें:

+0

सुझावों के लिए धन्यवाद। appCmd ​​एक सिस्टम फ़ाइल है, ऐसा लगता है कि इसे हमेशा ऊंचा चलाने के लिए कॉन्फ़िगर नहीं किया जा सकता है। मैं एक समर्पित उपयोगकर्ता खाते के तहत चल रहा हूं लेकिन यह अभी भी मेरे निर्माण सर्वर से एपीसीएमडी चलाने की कोशिश करते समय WAS सेवा से संपर्क करने में विफल रहता है –

+0

बिल्ड एजेंट चलाने वाले उपयोगकर्ता के लिए उपयोगकर्ता खाता नियंत्रण अक्षम करने का प्रयास करें। सेवा के बजाय .bat फ़ाइल का उपयोग कर एजेंट चलाने का प्रयास करें। – CrazyCoder

1

इस काफी hackey वैकल्पिक हल मैं का उपयोग कर समाप्त हो गया है। चूंकि मैं एक CruiseControl.NET सेवा चला रहा हूं, इसलिए मैं अपने उपयोगकर्ता 'सीसीनेट' को कॉल करूंगा। उसके पास प्रशासन अधिकार नहीं हैं।

2) एक नया स्थानीय उपयोगकर्ता खाते, और प्रशासक समूह (मैं उसे इस उदाहरण के लिए 'iis_helper') फोन करता हूँ करने के लिए आवंटित। उसे कुछ पासवर्ड दें, और इसे समाप्त होने के लिए सेट करें।

3) iis_helper के बदले पहुँच अनुमतियाँ नहीं स्थानीय लॉगिन या दूरस्थ डेस्कटॉप लॉगिन, और कुछ और आप इस खाते को लॉक करने के लिए क्या करना चाहते हो सकता है की अनुमति के लिए।

4) इस उदाहरण में अपने गैर-व्यवस्थापक उपयोगकर्ता, 'सीसीनेट' के रूप में लॉग इन करें (या तो स्थानीय रूप से या दूरस्थ डेस्कटॉप के माध्यम से)।

5) एक कमांड टर्मिनल खोलें, और निष्पादित करने के लिए जो कुछ भी यह परिवर्धित चलाया जा करने की जरूरत है 'runas' आदेश का उपयोग करें।/Savecred विकल्प का प्रयोग करें। अपना नया प्रशासनिक उपयोगकर्ता निर्दिष्ट करें।

runas /savecred /user:MYMACHINE\iis_helper "C:\Windows\System32\inetsrv\appcmd.exe" 

पहली बार यह आपको 'iis_helper के पासवर्ड के लिए संकेत देगा। उसके बाद, इसे/savecred विकल्प के लिए धन्यवाद संग्रहीत किया जाएगा (यही कारण है कि हम इसे एक बार वास्तविक कमांड प्रॉम्प्ट से चला रहे हैं, इसलिए हम एक बार पासवर्ड दर्ज कर सकते हैं)।

6) मान लीजिए कि आदेश ठीक से निष्पादित है, अब आप लॉग आउट कर सकते हैं। फिर मैंने स्थानीय व्यवस्थापक के रूप में वापस लॉग इन किया और स्थानीय इंटरैक्टिव लॉगिन, और दूरस्थ डेस्कटॉप के लिए 'सीसीनेट' उपयोगकर्ता बंद कर दिया। खाता केवल एक सेवा चलाने के लिए प्रयोग किया जाता है, लेकिन कोई वास्तविक लॉगिन नहीं होता है। यह एक अनिवार्य कदम नहीं है।

7) अपने उपयोगकर्ता खाते ('सीसीनेट') के रूप में चलाने के लिए अपनी सेवा सेट करें।

8) कॉन्फ़िगर करें कि कौन सी सेवा चल रही है (क्रूज़ कंट्रोल।

की जगह: मेरे मामले में नेट) पहले की तरह ही बजाय 'appcmd.exe' सीधे 'runas' कमांड निष्पादित करने के लिए,

साथ
"C:\Windows\System32\inetsrv\appcmd.exe" start site "My Super Site" 

:

runas /savecred /user:MYMACHINE\iis_helper "\"C:\Windows\System32\inetsrv\appcmd.exe\" start site \"My Super Site\"" 

बात ध्यान दें कि यह आदेश उद्धरण के एक सेट में होना चाहिए, जिसमें सभी आंतरिक उद्धरण बच गए हैं (स्लैश-कोट)।

9) टेस्ट, इसे एक दिन कॉल करें, स्थानीय पब पर क्लिक करें।


संपादित: मैं जाहिरा तौर पर गलत क्रम में # 9 किया था और कुछ भी कई परीक्षण से पहले ...

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

यह एकमात्र वास्तविक संभावना की तरह लग रहा है जो एक विंडोज सेवा लिख ​​रहा है जो व्यवस्थापक के रूप में चलाएगा, और इसका एकमात्र उद्देश्य appcmd.exe को चलाने के लिए है, फिर किसी भी तरह से आईआईएस को शुरू/बंद करने के लिए उस सेवा को कॉल करें।

क्या यह अच्छा नहीं है कि यूएसी चीजों को सुरक्षित करने के लिए कैसे है, लेकिन वास्तविकता में बस अधिक सर्वरों को असुरक्षित करता है, क्योंकि जो भी आप करना चाहते हैं, आपको व्यवस्थापक के रूप में करना होगा, इसलिए हमेशा सब कुछ हमेशा व्यवस्थापक के रूप में चलाने के लिए आसान है और भूलना आसान है यह?

+0

सिर्फ एक कदम आगे बढ़ाने के लिए, 'अच्छा' यहां 2 खातों का उपयोग करने के बारे में सोचता है कि मेरी क्रूज़ कंट्रोल.net सेवा व्यवस्थापक के रूप में नहीं चल रही है, बिल्ड प्रक्रिया व्यवस्थापक के रूप में नहीं चल रही है, यूनिट परीक्षण व्यवस्थापक के रूप में नहीं चल रहे हैं, आदि। ... केवल आईआईएस की शुरुआत/रोक को व्यवस्थापक के रूप में चलाया जा रहा है, और आप किसी भी खाते से स्थानीय रूप से या दूरस्थ डेस्कटॉप के माध्यम से बॉक्स में लॉग इन नहीं कर सकते हैं। मुझे यह काफी सुरक्षित लगता है ... और यूएसी को अक्षम करने या पूरी प्रक्रिया को व्यवस्थापक के रूप में चलाने से बेहतर तरीका है। – CodingWithSpike

7

msbuild community tasks एक AppPoolController आप क्या चाहते करने के लिए प्रतीत होता है कि शामिल है (हालांकि कहा कि यह दिनांकित और वर्तमान में है केवल IIS6 समर्थन करता है।) एक उदाहरण:

<AppPoolController ApplicationPoolName="MyAppPool" Action="Restart" /> 

ध्यान दें कि यदि आवश्यक हो तो आप उपयोगकर्ता नाम और पासवर्ड भी प्रदान कर सकते हैं।

संपादित करें: बस ध्यान दिया गया कि MSBuild Extension Pack में IIS7AppPool कार्य है जो शायद अधिक उपयुक्त है।

+0

आईआईएस 7 – Adam

+0

@ एडम - आह के लिए आईआईएस 6 के लिए केवल समर्थित नहीं है ... दस्तावेज़ में नहीं देखा गया था। ऐसा लगता है कि IISVersion enum में समर्थित संस्करण हैं, जिनमें केवल 4-6 शामिल हैं। MSBuild एक्सटेंशन पैक के लिए – Pedro

+1

+1 – ongle

3

यह article साइट ऑफ़लाइन लेने के लिए App_offline.htm नामक एक एचटीएम फ़ाइल का उपयोग करने का वर्णन करता है। एक बार जब आईआईएस एक वेब अनुप्रयोग निर्देशिका की जड़ में इस फ़ाइल,

ASP.NET 2.0 detectes बंद डाउन होगा आवेदन, सर्वर से आवेदन डोमेन उतारना, और के लिए किसी भी नए आने वाले अनुरोधों प्रोसेसिंग रोक वह आवेदन

App_offline-htm में, आप एक उपयोगकर्ता के अनुकूल संदेश डाल सकते हैं जो दर्शाता है कि साइट वर्तमान में रखरखाव में है।

Jason Lee उन MSDeploy कॉल को दिखाता है जिन्हें आपको उपयोग करने की आवश्यकता है (साथ ही साथ अपनी बिल्ड स्क्रिप्ट में इन चरणों को एकीकृत करने के बारे में और भी बहुत कुछ!)।

MSDeploy 
-verb:sync 
-source:contentPath="[absolute_path]App_offline-Template.htm" 
-dest:contentPath="name_of_site/App_offline.htm",computerName="copmuter_name", 
username=user_with_administrative priviliges,password=passwort 

तैनाती के बाद आप निम्नलिखित कॉल का उपयोग कर App_offline.htm फ़ाइल निकाल सकते हैं:

MSDeploy 
-verb:delete 
-dest:contentPath="name_of_site/App_offline.htm",computerName="computer_name", 
username=user_with_administrative_priviliges,password=passwort 
संबंधित मुद्दे