2011-04-11 17 views
6

मैं TeamCity 6 में बिल्ड कॉन्फ़िगरेशन के सेट को कॉन्फ़िगर करने का प्रयास कर रहा हूं और TeamCity द्वारा सक्षम सबसे सुरक्षित तरीके से एक विशिष्ट आवश्यकता को मॉडल करने का प्रयास कर रहा हूं।टीमसिटी: स्वीकृति परीक्षणों के लिए तैनाती निर्भरताओं का प्रबंधन?

मेरे पास स्वीकृति परीक्षण का एक सेट है (सिस्टम के कार्यात्मक क्षेत्र द्वारा समूहित परीक्षणों के लगभग 4-8 सूट) जो कि मैं समानांतर में दौड़ना चाहता हूं (मैं उन्हें कॉन्फ़िगरेशन बनाने के रूप में मॉडल करूंगा ताकि वे उन्हें कॉन्फ़िगरेशन के रूप में मॉडल कर सकें एजेंटों के एक सेट में वितरित किया जाना चाहिए)।

मेरे शुरुआती शोध से, ऐसा लगता है कि AcceptanceTests मेटा-बिल्ड कॉन्फ़िगरेशन जो Snapshot dependencies के माध्यम से व्यक्तिगत स्वीकृति परीक्षण कॉन्फ़िगर के सेट में खींचता है, चाल चलाना चाहिए। तब सब मैं क्या करना है का कहना है कि है कि मेरे Commit निर्माण config AcceptanceTests उत्प्रेरित करने चाहिए और वे सब में खींच लिया प्राप्त करेंगे। तो, मान लीजिए कि मैं भी AcceptanceSuiteA, AcceptanceSuiteB और AcceptanceSuiteC

है अब तक, तो अच्छा (मैं मुझे पता है इसे Commit कॉन्फ़िगरेशन AcceptanceSuiteA, AcceptanceSuiteB और AcceptanceSuiteC को ट्रिगर करने के लिए कॉन्फ़िगर करने के लिए Commit कॉन्फ़िगरेशन का कारण बन सकता है - समस्या पूरी तरह स्वीकृति परीक्षणों की समग्र सफलता निर्धारित करने के लिए परिणामों को मैन्युअल रूप से एकत्र करने की आवश्यकता है)।

  • DeploySite (कहते हैं कि यह 2 मिनट लगते हैं और मैं नहीं कर सकते स्पिन का खर्च वहन कर सकते हैं:

    उलझी सा है कि जब AcceptanceSuiteC बस कुछ Commit कलाकृतियों की जरूरत है और फिर अपने आप, AcceptanceSuiteA और AcceptanceSuiteB जरूरत के लिए पर रह सकता है सिर्फ इस दौड़ के लिए एक पूरी तरह से अलग एक)

  • तैनात साइट के खिलाफ रन परीक्षण

समस्या यह है कि मैं एबीएल होने की जरूरत है ई सुनिश्चित करना है कि:

  • वेबसाइट केवल एक बार के लिए कॉन्फ़िगर हो जाता है
  • वेबसाइट clobbered कर नहीं करता है, जबकि दो सुइट्स चल रहे हैं

अगर मैं एक निर्माण config के रूप में DeploySite की स्थापना की और AcceptanceSuiteA है और AcceptanceSuiteB यह एक स्नैपशॉट निर्भरता, AFAICT के रूप में खींच:

  • AcceptanceSuiteB के बाद में एक या समानांतर रन tr सकता है igger DeploySite जो तैनाती को रोक देगा AcceptanceSuiteA और/या AcceptanceSuiteB उपयोग के बीच में हैं।

मैं कह सकता हूँ जबकि सीमा एक साथ चल की संख्या बनाता केवल एक समय में एक होने के लिए मजबूर करने के लिए, मैं एक समय में एक और जबकि नहीं निर्भर टुकड़े अभी भी चल रहे की आवश्यकता है।

क्या इस तरह के पदानुक्रम का मॉडल करने के लिए टीमसिटी में कोई तरीका है?

संपादित करें: विचार: -

एक बकवास समाधान DeploySite एक 'उपयोग ध्वज में' मार्कर सेट कर सकते हैं और फिर AcceptanceTests config स्पष्ट है कि झंडा [AcceptanceSuiteA और AcceptanceSuiteB के बाद पूरा कर लिया है] होता है। तब समस्या अगले DeploySite को पाइपलाइन प्रतीक्षा के नीचे आने में से एक बन जाती है जब तक कि गेट फिर से खोला नहीं जाता है (निर्माण के भीतर अवरुद्ध प्रतीक्षा करना, सही महसूस नहीं होता - मैं चाहता हूं कि इसे 'अभी तक शुरू नहीं किया गया' जैसा दिखने के बजाय ध्वजांकित किया जाए कुछ करने में काफी समय लग रहा है)। हालांकि इस तरह की चीजें यहां पर एक झंडा लगाती हैं और यह थोड़ा सा जांच करती है कि यह म्यूटेबल राज्य/flakiness गंध की तरह है मैं दूर जाने की कोशिश कर रहा हूँ।

संपादित करें 2: अगर मैं प्रोग्राम के रूप में एजेंट विन्यास बदल सकता है, मैं की आवश्यकता के लिए Agent Requirements सेट कर सकते हैं inuse = false और फिर झंडा जब एक तैनाती शुरू होता है और स्पष्ट है कि यह बाद परीक्षण चला है

+0

ऐसा लगता है कि यह [जेबी जेरा] (http://youtrack.jetbrains.net/issue/TW-3798) और [devnet] (http://devnet.jetbrains.net/message/5212199 पर कवर किया गया है) # 5212199) –

उत्तर

3

आप लगता सेट Jetbrains Devnet और YouTrack tracker पर पहले देखें और अपनी खोज में जादू शब्द clobber का उपयोग करना याद रखें।

तो फिर तुम groovy-plug स्थापित करने और StartBuildPrecondition सुविधा

सुविधा का उपयोग करने के लिए उपयोग करते हैं, system.locks.readLock जोड़ें। या system.locks.write लॉक। निर्माण विन्यास के लिए संपत्ति। लेखन लॉक के साथ निर्माण केवल तभी शुरू होगा जब एक ही नाम के पढ़ने या लिखने वाले ताले के साथ कोई निर्माण नहीं हो रहा है। रीडलॉक के साथ निर्माण केवल तभी शुरू होगा जब एक ही नाम के लिखने वाले लॉक के साथ कोई बिल्ड नहीं चल रहा हो।

इस तथ्य को प्रबंधित करने के लिए कि निर्भर कॉन्फ़िगर 'पढ़ा' और DeploySite कॉन्फ़िगर साझा आइटम 'लिखता है।

संपादित करें (यह एक पूर्ण productised समाधान इसलिए ट्रैकर आइटम खुला रहता है नहीं है): और मैं अभी भी पता चलेगा कि ताला पैरामीटर बिल्ड के तहत होना चाहिए न | सिस्टम गुण और सटीक नाम क्या प्रारूप होना चाहिए, क्या यह locks.writeLock.MYLOCKNAME है (यानी, संदर्भ वाक्यविन्यास %system.locks.writeLock.MYLOCKNAME% के साथ कॉन्फ़िगर में दिखाएं)?

अन्य गूढ़ व्यक्ति हैं: एक लिखने के निर्माण को पूरा करने के द्वारा ट्रिगर किए जाने का निर्माण कैसे करता है लॉक कार्य पढ़ने का उपयोग - क्या लॉक तब तक गिर जाता है जब तक कि अगला अगला उठाता है (जो किसी अन्य लेखक को अनुमति देता है) - या यह आवश्यक है एक ही समय में माता-पिता और बच्चे निर्भरता को कुछ कतारबद्ध करें?

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