TeamCity में एजेंट आवश्यकताओं को कैसे मानकीकृत किया जाए


2

में TeamCity , यह एजेंट परियोजना पर आधारित आवश्यकताओं parameterize या कॉन्फ़िगरेशन पैरामीटर निर्माण करने के लिए संभव है? उदाहरण के लिए %...%प्रतिस्थापन शामिल हो सकते हैं ?

एक उदाहरण: हमारे पास एक परियोजना पैरामीटर है env.XXX_VERSIONजो परियोजना के सभी बिल्ड कॉन्फ़िगरेशन में XXX उत्पाद के आवश्यक संस्करण को निर्दिष्ट करता है। हम इस मान का उपयोग प्रोजेक्ट की संबंधित बिल्ड स्क्रिप्ट में कर सकते हैं। (समय के साथ हम इस उत्पाद के निर्माण के लिए हम जिन कुछ उत्पादों पर निर्भर करते हैं, उनके विभिन्न वेरिएंट की प्रतियां बनाते हैं, इसलिए अब हमारे पास मापदंडों के लिए विभिन्न मूल्यों के साथ 12 अलग-अलग परियोजनाएं हैं)। अब मैं भी परियोजना में सभी प्रासंगिक बिल्ड कॉन्फ़िगरेशन से एक एजेंट की आवश्यकता को शामिल करना चाहूंगा ताकि केवल उपयोग करने योग्य एजेंटों पर विचार किया जाएगा। लेकिन बिल्ड कॉन्फ़िगरेशन की संख्या और विभिन्न परियोजनाओं की संख्या को देखते हुए, मैं बाहर निकलने के मूल्य पर आवश्यकता को पैरामीटर बनाना पसंद करूंगा env.XXX_VERSION। क्या यह संभव है?

(आज, हमारे सभी एजेंटों में सॉफ़्टवेयर के सभी संभावित संस्करण शामिल हैं, लेकिन अब संभव नहीं होगा, इसलिए हमें बिल्ड कॉन्फ़िगरेशन की परियोजनाओं से एजेंटों पर आवश्यकताओं की आवश्यकता होगी)


हाय टॉनी, क्या आप कभी भी आवश्यकताओं के लिए एक मार्ग खोजने में सक्षम हैं? मैं अपने आप को लग रहा है वास्तव में अपने वर्णित स्थिति में और पता चला है कि यह वास्तव में संभव है अच्छा लगेगा।
लियोनिद उसोव

लियोनिद (देर से प्रतिक्रिया के लिए खेद है), लेकिन नहीं, हमें 2018.1 के नए कोटलिन डीएसएल का उपयोग करने के अलावा ऐसा करने का कोई तरीका नहीं मिला है। अब हम वास्तव में पायथन कोड से सभी कॉन्फ़िगरेशन उत्पन्न करते हैं और फिर उन्हें संस्करणित सेटिंग्स समर्थन के माध्यम से "इंस्टॉल" करते हैं ...
टन मैडसेन

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

(देर से, लेकिन ...) बिल्कुल ऐसा ही है। कोई कह सकता है कि हम केवल उन सभी चर को हल करते हैं जब हम कॉन्फ़िगरेशन उत्पन्न करते हैं। निस्संदेह, इसका मतलब यह भी है कि हम सभी प्रकार के जोड़तोड़ कर सकते हैं, इसलिए प्रतिस्थापन को "रैखिक" नहीं होना चाहिए।
मैडसेन

(देर से, लेकिन ...) इसका मतलब यह भी है कि हम सभी प्रकार के जोड़तोड़ कर सकते हैं, इसलिए प्रतिस्थापन को "रैखिक" नहीं होना चाहिए। हमने सभी आवश्यक फ़ाइलों पर निर्भरता के साथ बिल्ड कॉन्फ़िगरेशन के रूप में पीढ़ी को सेट-अप किया है, इसलिए कुछ भी जो कॉन्फ़िगरेशन को बदल देगा, स्वचालित रूप से पीढ़ी को चलाएगा। संस्करण सेटिंग्स सरल है: TeamCity का कॉन्फ़िगरेशन एक VCS (जैसे Git) में स्वचालित रूप से संग्रहीत होता है। यह एक दो-तरफ़ा चीज़ है: VCS में होने वाले परिवर्तनों का स्वतः ही पता चल जाएगा और TeamCity इसके कॉन्फ़िगरेशन को संरेखित करेगा। इसलिए हमारा जनरेटर "बस" वीसीएस में वांछित मान को संग्रहीत करता है ...
टोनी मैडसेन

जवाबों:


2

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

TeamCity's REST API का उपयोग करके इसे स्वचालित क्यों नहीं किया जाता है? TeamCity के सर्वर में एक अंतर्निहित HTTP एपीआई है जिसका उपयोग आप वेब इंटरफ़ेस का उपयोग करने में सक्षम किसी भी क्षेत्र को संपादित / अपडेट (लगभग) करने के लिए कर सकते हैं।

मूल्यों को प्राप्त करने और अद्यतन करने के लिए आप HTTP GET / PUT कॉल का उपयोग करके अपनी पसंदीदा स्क्रिप्टिंग भाषा का उपयोग करके एपीआई के साथ बातचीत कर सकते हैं। इस मामले में, मुझे लगता है कि आपके द्वारा उल्लेखित सभी बिल्ड कॉन्फ़िगरेशन को अपडेट करने के लिए यूआई से गुजरने से बचने के लिए स्क्रिप्ट लिखने के लिए आपके समय के लायक होगा।

आप एक सिंगल स्क्रिप्ट लिखेंगे (जिस भी स्क्रिप्टिंग भाषा में आप आराम से उपयोग कर रहे हैं) जिसे आप सभी एजेंट आवश्यकताओं को सेट करने के लिए एक बार चला सकते हैं। निम्नलिखित छद्म कोड

  1. TeamCity में प्रोजेक्ट्स के बारे में बताएं

परियोजनाओं की सूची प्राप्त करें

curl -i -H "Accept: application/json" http://teamcity/httpAuth/app/rest/projects --user username:password
  1. XXX_VERSIONपरियोजनाओं से पैरामीटर प्राप्त करें ।

सभी परियोजनाओं पर लूप करें, सभी पैरामीटर प्राप्त करें और हमारे XXX_VERSION को पार्स करें

curl http://teamcity/app/rest/projects/id:PROJECT_NAME/parameters
  1. बिल्ड कॉन्फ़िगरेशन पर एजेंट आवश्यकता सेट करें।

प्रत्येक बिल्ड कॉन्फ़िगरेशन के लिए, प्रत्येक प्रोजेक्ट में, XX_VERSION मान को पार्स किए गए बिल्ड कॉन्फ़िगरेशन पर एजेंट आवश्यकताओं को सेट करें

curl -X PUT http://teamcity/httpAuth/app/rest/buildTypes/<buildTypeLocator>/agent-requirements/<id> --user username:password

यह सामान्य विचार है, लेकिन पूरा नहीं है, इस स्क्रिप्ट को समय बिताने से आप टीमटाइम UI के माध्यम से इसे प्रबंधित करने में बहुत समय बचाएंगे।

https://confluence.jetbrains.com/display/TCD9/REST+API


मैं नहीं देख सकता कि यह कैसे काम करेगा। कृपया आगे व्याख्या कीजिये।
टॉनी मैडसेन

आज, मैंने कुछ अतिरिक्त विवरणों के साथ अपडेट किया। आपको इसे पूरी तरह से पूरा नहीं होने के लिए मुझे बहाना होगा। आशा है कि यह मदद करता है या कम से कम आपको सही रास्ते पर ले जाता है।
kdtong

0

आप अन्य सभी जुड़े हुए एजेंटों को अक्षम किए बिना एक विशिष्ट एजेंट के निर्माण के लिए TeamCity को बाध्य कर सकते हैं ।

ऐसे:

गोटो बिल्ड कॉन्फ़िगरेशन सेटिंग्स

अगली एजेंट आवश्यकताएँ

अब आपको एक विशेष एजेंट के लिए एक स्पष्ट आवश्यकता निर्धारित करनी है :

पैरामीटर नाम: system.agent.name

शर्त: बराबर

मान: Your_SPECIFIC_AGENT_NAME

इसके अलावा आप यह कोशिश कर सकते हैं:

के माध्यम से ब्राउज़ करें: TeamCity -> प्रशासन -> एजेंट -> एक एजेंट का चयन करें -> संगत विन्यास टैब, फिर वर्तमान रन कॉन्फ़िगरेशन नीति तब केवल असाइन किए गए कॉन्फ़िगरेशन चलाएँ और + असाइन कॉन्फ़िगरेशन और समाप्त पर क्लिक करें

यदि यह सहायता करता है तो कृपया मुझे इसकी जानकारी दें।

धन्यवाद।


लेकिन दुर्भाग्य से इसके लिए कुछ सूक्ष्म प्रबंधन की आवश्यकता होगी, हम बचना चाहते हैं। हमारे पास 10 एजेंट हैं जहां 8-9 एक विशिष्ट परियोजना के बिल्ड कॉन्फ़िगरेशन के लिए उपयोग करने योग्य हो सकते हैं। इसलिए हमें 12 बिल्ड 23 बार कॉन्फ़िगरेशन के माध्यम से जाना होगा और उनमें से प्रत्येक के लिए इस एजेंट की आवश्यकता होगी। इतना अच्छा नहीं। और इससे भी बदतर, हम अधिक एजेंट प्राप्त करेंगे और सभी एजेंटों के कॉन्फ़िगरेशन को लगातार बदलेंगे।
टॉनी मैडसेन

-1

मैं %...%प्रतिस्थापन के साथ मूल्य को पैरामीटर करने का एक तरीका नहीं खोज सका , लेकिन मुझे एक वर्कअराउंड मिला। यह आदर्श नहीं है, लेकिन यह मेरे छोटे उपयोग के मामले के लिए काम करता है।

मामले का उपयोग करें: मैं एक टेम्पलेट से बिल्ड कॉन्फ़िगरेशन बना रहा हूं और प्रत्येक बिल्ड कॉन्फ़िगरेशन की आवश्यकता केवल एकल, विशिष्ट मशीन पर चलाने के लिए है। मैं teamcity.agent.name equals %buildAgentName%टेम्पलेट में बिल्ड कॉन्फिगरेशन बनाने के लिए टीमकाइटी को मुझे पैरामीटर में भरने के लिए टेम्पलेट में करना चाहता था ।

समाधान: मैं एक पैरामीटर का उपयोग करने के बजाय सिर्फ एक स्ट्रिंग में डाल देता हूं जो किसी भी एजेंट के नाम से मेल नहीं खाता, जैसे teamcity.agent.name equals replaceThisWithActualAgentNameकि टेम्पलेट में। मुझे पैरामीटर के लिए संकेत नहीं दिया गया है, लेकिन यह गलत तरीके से गलत मशीन पर चलने से बिल्ड कॉन्फ़िगरेशन को रोकता है जब तक कि मैं एजेंट की आवश्यकता को ओवरराइड नहीं करता।

मुझे यकीन नहीं है कि यह आपके उपयोग के मामले को हल करता है, लेकिन मैं इसे यहां पोस्ट कर रहा हूं यदि यह किसी और के लिए सहायक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.