2010-09-09 6 views
27

हम बैट-फाइल को कॉल करने के लिए टीमसिटी के कमांड लाइन बिल्ड रनर का उपयोग कर रहे हैं। बैट-फ़ाइल विजुअल स्टूडियो 2008 के "devenv.exe" को कॉल करके हमारे समाधान का निर्माण करती है और फिर यह इकाई परीक्षण निष्पादित करती है और सही फ़ोल्डर संरचना बनाता है।टीमसिटी कमांड लाइन बिल्डर रनर: निर्माण कैसे विफल हो सकता है?

हम क्या करना चाहते हैं बैटन फ़ाइल को निष्पादित करना बंद करना है यदि डेवनव कॉल करने में विफल रहता है और टीमसिटी को यह महसूस करने के लिए बनाता है कि निर्माण विफल हो गया है। हम त्रुटि लेवल (जो बिल्ड विफल होने पर 1 है) की जांच करके विफल डेवेन कॉल को पकड़ सकते हैं और हम उस बिंदु पर हमारी बल्ले-फ़ाइल से बाहर निकल सकते हैं। लेकिन हम टीमसिटी को कैसे बता सकते हैं कि निर्माण विफल रहा?

यह है कि हम क्या करने की कोशिश की है:

call "build.bat" 
IF ERRORLEVEL 1 EXIT /B 1 

लेकिन TeamCity हमारे बाहर निकलने के कोड को नहीं पहचानता। इसके बजाय बिल्ड लॉग इस तरह दिखता है:

[08:52:12]: ========== Build: 28 succeeded or up-to-date, 1 failed, 0 skipped ========== 
[08:52:13]: C:\_work\BuildAgent\work\bcd14331c8d63b39\Build>IF ERRORLEVEL 1 EXIT /B 1 
[08:52:13]: Process exited with code 0 
[08:52:13]: Publishing artifacts 
[08:52:13]: [Publishing artifacts] Paths to publish: [build/install, teamcity-info.xml] 
[08:52:13]: [Publishing artifacts] Artifacts path build/install not found 
[08:52:13]: [Publishing artifacts] Publishing files 
[08:52:13]: Build finished 

तो टीमसिटी रिपोर्ट करेगी कि निर्माण सफल रहा। हम यह कैसे तय कर सकते हैं?

समाधान:

TeamCity एक तंत्र Service Messages कहा जाता है जो इस तरह की स्थितियों को संभालने के लिए इस्तेमाल किया जा सकता प्रदान करता है। मैं अपने निर्माण स्क्रिप्ट को नवीनीकृत किया है निम्नलिखित की तरह लग रहे करने के लिए:

IF %ERRORLEVEL% == 0 GOTO OK 
echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation'] 
EXIT /B 1 
:OK 

नतीजतन TeamCity अपने निर्माण के रूप में एक "संकलन में विफलता" के कारण विफल रिपोर्ट करेंगे।

+1

कहाँ 'गोटो OK' जाते हैं? और% ERRORLEVEL% क्या है? –

उत्तर

21

Build Script Interaction with TeamCity विषय देखें।

आप निम्नलिखित तरीके से निर्माण लॉग के लिए संदेशों की रिपोर्ट कर सकते हैं:

##teamcity[message text='<message text>' errorDetails='<error details>' status='<status value>']

जहां:

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

यह संदेश मामले में निर्माण में विफल रहता है तो उसकी स्थिति त्रुटि और चेकबॉक्स "असफल निर्माण एक त्रुटि संदेश निर्माण धावक द्वारा प्रवेश किया गया हो" निर्माण विन्यास सामान्य सेटिंग पृष्ठ पर चेक किया गया है है। उदाहरण के लिए:

##teamcity[message text='Exception text' errorDetails='stack trace' status='ERROR']

अद्यतन 2013-08-30:

TeamCity 7 के रूप में।1 विफलताओं का निर्माण बजाय buildProblem सेवा संदेश का उपयोग कर सूचित किया जाना चाहिए:

##teamcity[buildProblem description='<description>' identity='<identity>'] 
+0

धन्यवाद! मैं बिल्डस्टैटस संदेश का उपयोग करके काम करने में सक्षम था। मैं इस जानकारी के साथ मूल पोस्ट अपडेट करूंगा। –

+3

यह शक्तिशक्ति स्क्रिप्ट के साथ भी काम करता है, उदा। 'echo" ## teamcity [संदेश पाठ = 'oops' त्रुटि विवरण = '' स्थिति = 'त्रुटि'] "' –

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