java - जेनकिंस पर कई प्रोजेक्ट बिल्ड जॉब्स में एक आम चींटी बिल्ड स्क्रिप्ट को कैसे प्रबंधित करें?




ant jenkins (2)

मेरे पास विभिन्न जीआईटी रिपॉजिटरीज से आने वाले जावा प्रोजेक्ट्स का एक सेट है, जिसे मैं जेनकिंस के साथ बनाया जाना चाहता हूं

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

फिलहाल मैं मैन्युअल रूप से यह साझा करता हूं, लेकिन सामान्य भाग में होने वाले बदलावों पर यह बहुत ही कम संभावना है।

तो मेरा सवाल है: जेनकिंस सर्वर पर एकाधिक बिल्ड जॉब में साझा चींटी बिल्ड स्क्रिप्ट को प्रबंधित करने का एक अच्छा तरीका क्या है?


@ व्हाइसस्पॉडर के रूप में एक असामान्य समस्या नहीं है कि यह जेनकींस तक सीमित नहीं है मेरी राय में यह उन मुद्दों में से एक भी है जो बड़ी विरासत एएनटी बनाता है। समय-समय पर यह तर्कसंगत भय को सामान्य तर्क को बदलने के लिए कठिन और कठिन हो जाता है जिससे वह निर्भर बनाता है।

एक अलग रिपॉजिटरी या जीआईटी पोड्यूमूल में सामान्य तर्क को ध्यान में रखना उचित सलाह है क्योंकि यह इस तर्क के संस्करण नियंत्रण को सक्षम करता है। एक अन्य विकल्प आम तर्क को एक एएनटी लिब के रूप में पैकेज करना है

<project ... xmlns:common="antlib:com.example.commonbuild">

    <taskdef uri="antlib:com.example.commonbuild">
        <classpath>
             <fileset dir="${lib.dir}" includes="commonbuild-1.0.jar"/>
        </classpath>
    </taskdef>

    ..
    ..

    <target name="build">
        <common:compileAndPackage srcDir="${src.dir}" buildDir="${build.dir}" jarFile="${build.dir}/${ant.project.name}.jar"/>
    </target>

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

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

कैसे एक एएनटी लिब बनाने के लिए

├── build.xml
└── src
    └── com
        └── example
            └── commonbuild
                └── antlib.xml

antlib.xml

<antlib>
    <macrodef name="compileAndPackage">
        <attribute name="srcDir"/>
        <attribute name="buildDir"/>
        <attribute name="jarFile"/>
        <sequential>
            <mkdir dir="@{buildDir}/classes"/>
            <javac srcdir="@{srcDir}" destdir="@{buildDir}/classes" includeantruntime="false"/>
            <jar destfile="@{jarFile}" basedir="@{buildDir}/classes"/>
        </sequential>
    </macrodef>
</antlib>

ध्यान दें:

  • इस उदाहरण में एक कार्य है। वास्तविकता में आपके सामान्य बिल्ड तर्क कई मैक्रोोडेफ़ प्रदान करेगा

build.xml

बस एक्सएमएल फ़ाइल जार:

<target name="build" description="Create jar">
    <jar destfile="${build.dir}/commonbuild-${version}.jar" basedir="${src.dir}"/>
</target>

मेरा निर्माण तर्क अतिरिक्त रूप से इस जार फ़ाइल को मेरी रिपॉजिटरी में प्रकाशित करेगा, ताकि अन्य बनाता है Ivy का उपयोग करके इसे नीचे खींच सकते हैं। इसका भी मतलब यह है कि आम निर्माण तर्क एक अलग और औपचारिक रिलीज प्रबंधन जीवन चक्र (एक बड़े संगठन में बहुत महत्वपूर्ण) हो सकता है


कुछ विचार ...

  1. चींटी स्क्रिप्ट को एक कलाकृतियों के संग्रह में संग्रहीत करें जो आपकी व्यक्तिगत परियोजनाएं किसी दूसरी निर्भरता की तरह खींच सकती हैं।
  2. पेरेंट जीआईटी प्रोजेक्ट बनाएं जिसमें बिल्ड स्क्रिप्ट शामिल है। अपने मूल प्रोजेक्ट में, प्रत्येक व्यक्तिगत उप-परियोजना को एक Git submodule के रूप में नीचे खींचें। बिल्ड स्क्रिप्ट में उप-प्रोजेक्ट संदर्भों को पैरामीटर करने के लिए आपको शायद अपनी स्क्रिप्ट में कुछ मामूली संशोधन करने की आवश्यकता होगी।

यह उत्तर जेनकींस के लिए विशिष्ट नहीं है और अन्य बिल्ड सर्वरों के लिए पोर्टेबल होना चाहिए।