हम बैट-फाइल को कॉल करने के लिए टीमसिटी के कमांड लाइन बिल्ड रनर का उपयोग कर रहे हैं। बैट-फ़ाइल विजुअल स्टूडियो 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 अपने निर्माण के रूप में एक "संकलन में विफलता" के कारण विफल रिपोर्ट करेंगे।
कहाँ 'गोटो OK' जाते हैं? और% ERRORLEVEL% क्या है? –