2012-12-20 14 views
5

अक्षम करें क्या टीमसिटी में बिल्ड पर क्यूइंग अक्षम करना संभव है? यदि कोई नौकरी पहले से चल रही है, तो मैं नहीं चाहता कि कोई दूसरा कतार दे (उदाहरण के लिए, यदि ट्रिगर द्वारा शुरू किया गया हो)। मैंने कुछ खोज की है और कतारबद्ध करने से रोकने के लिए एक रास्ता नहीं दिख रहा है।टीमसिटी बिल्ड क्यूइंग

+0

ट्रिगर को अक्षम करें? –

+0

आमतौर पर कोई और काम नहीं चल रहा है, और ट्रिगर के लिए नौकरी छोड़ने के लिए ठीक रहेगा, लेकिन यदि कोई नौकरी है, तो मैं नौकरी कतार नहीं चाहता, यह सब रात में होता है। – user1904898

+0

यह किस प्रकार का ट्रिगर है? –

उत्तर

1

यदि प्रत्येक केवल एक ही निर्माण कॉन्फ़िगरेशन है, तो आप उन्हें उसी एजेंट पर चला सकते हैं, जिससे कि एक ही समय में केवल एक ही चल सके। लेकिन फिर, बिल्ड 2 खत्म करने के बाद 2 बिल्ड चलाएगा, जिसे आप नहीं चाहते हैं।

यहां इस समस्या को हल करने का तरीका बताया गया है। यह बदसूरत है, लेकिन यह आसान है, और कई बिल्ड कॉन्फ़िगरेशन को सामान्यीकृत करता है:

एक विशिष्ट सर्वर चुनें। चूंकि यह सर्वर निर्धारित करेगा कि कोई बिल्ड चलता है या नहीं, हम इसे आपके गेट सर्वर पर कॉल करेंगे। हमें एक फ़ाइल स्थान की आवश्यकता है जो अब मौजूद नहीं है, न ही इसे किसी अन्य कार्यक्रम द्वारा बनाया जाएगा। कहते हैं, उदाहरण के लिए, `/teamcity/.lock '

के लिए निम्नलिखित सामग्री के साथ निर्माण विन्यास करें:

lockFileLocation="/teamcity/.lock" 
if [ -f $lockFileLocation ]; 
then 
    echo "oops, we're already running a build." 
    exit 1 
else 
    echo "No build is running. Let's lock it up!" 
    touch $lockFileLocation 
fi 

Powershell के लिए, यह इस है:

$lockFileLocation = "C:\teamcity\lock" 
if(Test-Path $lockFileLocation) 
{ 
    echo "oops, we're already running a build." 
    exit 1 
} 
else 
{ 
    echo "No build is running. Let's lock it up!" 
    echo "lock'd!" > $lockFileLocation 
} 

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

lockFileLocation="/teamcity/.lock" 
if [ -f $lockFileLocation ]; 
then 
    echo "Build's over. You don't have to do home, but you can't stay here" 
    rm $lockFileLocation 
else 
    echo "No build is running. How did we get here?" 
    exit 1 
fi 

Powershell के लिए:

$lockFileLocation = "C:\teamcity\lock" 
if(Test-Path $lockFileLocation) 
{ 
    echo "Build's over. You don't have to do home, but you can't stay here"   
    rm "$lockFileLocation" 
} 
else 
{ 
    echo "No build is running. How did we get here?" 
    exit 1 
} 

सुनिश्चित करें कि निर्माण गेट पर केवल चलाने के लिए सेट किया गया है, और कहा कि निर्माण फ़ाइल अगर यह नष्ट करेगा मौजूद। आइए बिल्ड अनलॉक करें।

कूल, अब हम फ़ाइल में लिखने का ताला चला सकते हैं, और अनलॉक इसे हटाने के लिए। यदि आप लॉक लॉक अनलॉक किए बिना दो बार लॉक का पहला रन पास हो जाएगा, और दूसरा विफल हो जाएगा। अच्छा लगा।

लेकिन यह हमारी मदद कैसे करता है? आइए मान लें कि आपका निर्माण एक एकल निर्माण कॉन्फ़िगरेशन है जिसे काम कहा जाता है। पर एक निर्माण निर्माण ट्रिगर सेट करें काम करें ताकि यह लॉक सफल होने के बाद चलता है। इसी तरह, पर एक फिनिश बिल्ड ट्रिगर सेट करें अनलॉक करें ताकि यह कार्य कार्य, के बाद चलता है चाहे वह गुजरता या विफल हो जाता है। यदि आप खराब कोड करते हैं तो भी हम बिल्ड को अनलॉक करना चाहते हैं।

यदि आपका निर्माण बिल्ड कॉन्फ़िगरेशन का एक सेट है, तो आपके निर्माण को आंतरिक रूप से स्नैपशॉट निर्भरताओं के माध्यम से कनेक्ट करने की आवश्यकता है, और ट्रिगर बनाने को समाप्त नहीं करना चाहिए। मान लें कि आपका निर्माण दो बिल्ड कॉन्फ़िगरेशन है: कार्य-ए और कार्य-बी। आप कार्य-ए पहले चलाना चाहते हैं, फिर जब यह हो जाए, तो कार्य-बीकार्य-बी से कार्य-ए सामान्य रूप से स्नैपशॉट निर्भरता सेट करें। फिर, पर एक फिनिश बिल्ड ट्रिगर सेट करें अनलॉक करें जो लॉक पास करता है।अनलॉक से काम-बी, "भले ही निर्भरता में नाकाम रही है निर्माण चलाने के लिए सेट करने के लिए एक स्नैपशॉट निर्भरता सेट यहाँ का निर्माण, जहां नीचे तीर खत्म चलाता निर्माण कर रहे हैं की एक ड्राइंग है, और ऊपर की ओर तीर स्नैपशॉट निर्भरता हैं:।

+----+       
|lock|       
+----+ +------+     
    |  |work-A|     
    |  +------+     
    |  ^     
    |  |      
    |  |      
    \ +------+     
    \ |work-B|     
    \ +------+     
     \ ^      
     \ |      
     v |      
     +------+     
     |unlock|     
     +------+     

अब, जब आप ताला पर "रन" मारा, यह निर्माण लॉक हो जाएगा, अपने निर्माण विन्यास को गति प्रदान, तो निर्माण अनलॉक। "रन" कई बार एक गुच्छा मारो, और देखते हैं कि न तो काम और न ही कार्य-बी कतारबद्ध हो गया।

लेकिन यह बिल्ड कॉन्फ़िगरेशन का केवल एक सेट है। आपके पास दो हैं तो दोनों को इस तरह से सेट करें, सुनिश्चित करें कि वे एक ही फ़ाइल को देखते हैं, और दोनों केवल गेट एजेंट पर चलाने के लिए सेट हैं।

हाँ! हो गया था! लेकिन प्रतीक्षा करें, काम-ए और कार्य-बी स्नैपशॉट निर्भरताओं के माध्यम से कनेक्ट होने की आवश्यकता क्यों है? क्या हुआ अगर काम-ए विफल रहता है

+----+ 
|lock| 
+----+ 
    | 
    | 
    v 
+------+ 
|work-A| 
+------+ 
    | 
    | 
    v    
+------+ 
|work-B| 
+------+ 
    | 
    | 
    v 
+------+ 
|unlock| 
+------+ 

अब,: ठीक है, चलो कहते हैं कि निर्माण इस प्रकार है है? कार्य-बी नहीं चलेंगे, और इसलिए अनलॉक अनलॉक करेगा।

नोट: इस प्रकार है सैद्धांतिक रूप से, आप का निर्माण पड़ सकते है:

+----+   
|lock|   
+----+ +------+ 
    \ |work-A| 
    \ +------+ 
    \ ^
     \ | 
     v | 
     +------+ 
     |work-B| 
     +------+ 
     |  
     |  
     v 
     +------+ 
     |unlock| 
     +------+ 

यह काम करना चाहिए, लेकिन मैं इसे परीक्षण नहीं किया है, इसलिए मैं आप सभी सेटिंग्स नहीं दे सकता।

+0

यहां आपकी सभी दिशाओं के लिए धन्यवाद, मैं इसे एक कोशिश देने जा रहा हूं और यहां तक ​​कि मेरे परिणामों के साथ भी जवाब दूंगा। – user1904898

0

मुझे किसी ट्रिगर को गतिशील रूप से अक्षम करने या किसी अन्य स्थिति के आधार पर सशर्त रूप से चलाने के लिए कोई रास्ता नहीं मिल रहा है।

यदि ये दो नौकरियां एक दूसरे से असंबंधित हैं, तो शायद आप उन्हें अलग एजेंटों पर चलाने के लिए कॉन्फ़िगर कर सकते हैं? इस तरह वे एक-दूसरे के साथ हस्तक्षेप किए बिना दौड़ सकते थे।

+0

ये दो नौकरियां एक दूसरे के साथ हस्तक्षेप करेंगी इसलिए मैं उन्हें एक साथ चलाने नहीं दे सकता। इसे देखने के लिए धन्यवाद। – user1904898

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