জাভা প্রকল্পগুলির জন্য বিল্ড এবং সংস্করণ সংখ্যা (পিপীলিকা, সিভিএস, হডসন)


134

জাভা প্রকল্পগুলিতে নিয়মিত বিল্ড নম্বরিং এবং সংস্করণ নম্বর পরিচালনার জন্য বর্তমান সেরা-অনুশীলনগুলি কী কী? বিশেষ করে:

  • বিতরণযোগ্য বিকাশের পরিবেশে পদ্ধতিগতভাবে বিল্ড সংখ্যা কীভাবে পরিচালনা করবেন

  • রানটাইম অ্যাপ্লিকেশনটিতে উত্স / উপলব্ধ সংস্করণ নম্বরগুলি কীভাবে বজায় রাখা যায়

  • উত্স সংগ্রহস্থলের সাথে কীভাবে সঠিকভাবে সংহত করা যায়

  • সংস্করণ সংখ্যা বনাম ভান্ডার ট্যাগগুলি কীভাবে স্বয়ংক্রিয়ভাবে পরিচালনা করবেন

  • ক্রমাগত বিল্ড অবকাঠামোতে কীভাবে সংহত করা যায়

বেশ কয়েকটি সরঞ্জাম উপলব্ধ রয়েছে এবং পিঁপড়ার (আমরা যে বিল্ড সিস্টেমটি ব্যবহার করছি) এর একটি কার্য রয়েছে যা একটি বিল্ড সংখ্যা বজায় রাখবে, তবে সিভিএস, এসএনএন বা অনুরূপ ব্যবহার করে একাধিক, সমবর্তী বিকাশকারীদের সাথে কীভাবে এটি পরিচালনা করা যায় তা পরিষ্কার নয় it's ।

[Edit]

বেশ কয়েকটি ভাল এবং সহায়ক আংশিক বা নির্দিষ্ট উত্তর নীচে উপস্থিত হয়েছে, সুতরাং আমি তাদের কয়েকটি সংক্ষিপ্ত করব। আমার কাছে মনে হচ্ছে এটির পক্ষে সত্যই শক্তিশালী "সেরা অনুশীলন" নেই, বরং ওভারল্যাপিং আইডিয়াগুলির সংকলন। নীচে, আমার সংক্ষিপ্তসারগুলি এবং কিছু ফলস্বরূপ প্রশ্নগুলি সন্ধান করুন যা ভাবেন লোকেরা ফলো-আপ হিসাবে উত্তর দেওয়ার চেষ্টা করতে পারে। [স্ট্যাকওভারফ্লোতে নতুন ... আমি যদি এই ভুল করে থাকি তবে দয়া করে মন্তব্য সরবরাহ করুন]]

  • আপনি যদি এসভিএন ব্যবহার করে থাকেন তবে যাত্রার জন্য নির্দিষ্ট চেকআউটটির সংস্করণ উপস্থিত হয়। বিল্ড নাম্বারিং একটি অনন্য বিল্ড নম্বর তৈরি করতে এটি কাজে লাগাতে পারে যা নির্দিষ্ট চেকআউট / সংশোধন সনাক্ত করে identif [সিভিএস, যা আমরা উত্তরাধিকারসূত্রে কারণে ব্যবহার করছি, এই স্তরটির যথেষ্ট অন্তর্দৃষ্টি দেয় না ... ট্যাগগুলির সাথে ম্যানুয়াল হস্তক্ষেপ আপনাকে সেখানে খণ্ড খণ্ড পেয়েছে]]

  • আপনি যদি আপনার বিল্ড সিস্টেম হিসাবে ম্যাভেন ব্যবহার করছেন, এসসিএম থেকে সংস্করণ নম্বর উত্পাদন করার পাশাপাশি স্বয়ংক্রিয়ভাবে প্রকাশের উত্পাদন করার জন্য একটি রিলিজ মডিউল রয়েছে। [আমরা বিভিন্ন কারণে মাকেন ব্যবহার করতে পারি না, তবে এটি তাদের পক্ষে সহায়তা করে। [ মার্সেলো-মনোবলকে ধন্যবাদ ]]

  • আপনি যদি আপনার বিল্ড সিস্টেম হিসাবে পিঁপড়া ব্যবহার করছেন , নিম্নলিখিত টাস্ক বিবরণটি জাভা .poperties ফাইল ক্যাপচার বিল্ড তথ্য তৈরি করতে সহায়তা করতে পারে, যা পরে আপনার বিল্ডে বিভিন্ন উপায়ে ফোল্ড করা যেতে পারে। [আমরা হডসন থেকে প্রাপ্ত তথ্য অন্তর্ভুক্ত করার জন্য এই ধারণাটি প্রসারিত করেছি, ধন্যবাদ শহীদ-ভেড়া ]।

  • পিপীলিকা এবং ম্যাভেন (এবং হডসন এবং ক্রুজ নিয়ন্ত্রণ) একটি .properties ফাইলে বিল্ড নম্বর পেতে বা একটি .txt / .html ফাইলের জন্য সহজ উপায় সরবরাহ করে। ইচ্ছাকৃতভাবে বা দুর্ঘটনাক্রমে হস্তক্ষেপ করা থেকে বিরত রাখার পক্ষে কি এই "নিরাপদ" যথেষ্ট? এটি নির্মাণের সময় "সংস্করণ" শ্রেণিতে সংকলন করা ভাল কি?

  • কথন: সংখ্যায়ন বিল্ড সংজ্ঞায়িত করা উচিত / মত একটি ধারাবাহিক ইন্টিগ্রেশন সিস্টেমের মধ্যে প্রণয়ন হাডসন । [ মার্সেলো-মোড়লসকে ধন্যবাদ ] আমরা এই পরামর্শটি নিয়েছি, কিন্তু এটি মুক্তির প্রকৌশল প্রশ্নটি উন্মুক্ত করে দেয়: একটি মুক্তি কীভাবে হয়? একটি রিলিজে একাধিক বিল্ডনম্বার রয়েছে? বিবিধ প্রকাশ থেকে বিল্ডার নাম্বারগুলির মধ্যে কি কোনও অর্থপূর্ণ সম্পর্ক রয়েছে?

  • প্রশ্ন: একটি বিল্ড সংখ্যার পিছনে উদ্দেশ্য কী? এটি কিউএ জন্য ব্যবহৃত হয়? কিভাবে? এটি কি প্রাথমিকভাবে বিকাশকারীরা বিকাশের সময় একাধিক বিল্ডের মধ্যে বিচ্ছিন্ন করতে ব্যবহার করে, বা কিউএর জন্য নির্ধারিত হয় যে কোনও ব্যবহারকারী কী কী বিল্ড নির্ধারণ করতে পারে? যদি লক্ষ্যটি প্রজননযোগ্যতা হয় তবে তাত্ত্বিকভাবে এটিই একটি রিলিজ সংস্করণ নম্বর সরবরাহ করা উচিত - কেন তা করে না? (দয়া করে নীচে আপনার উত্তরের অংশ হিসাবে এর উত্তর দিন, এটি আপনার পছন্দ / প্রস্তাবিত পছন্দ আলোকিত করতে সহায়তা করবে ...)

  • প্রশ্ন: ম্যানুয়াল বিল্ডগুলিতে বিল্ড নম্বরগুলির জন্য কোনও জায়গা আছে? এটি কি এতটাই সমস্যাযুক্ত যে প্রত্যেকেরই সিআই সমাধান ব্যবহার করা উচিত?

  • প্রশ্ন: বিল্ড নম্বরগুলি কি এসসিএম-এ পরীক্ষা করা উচিত? যদি লক্ষ্যটি নির্ভরযোগ্যভাবে এবং নির্বিঘ্নে একটি নির্দিষ্ট বিল্ড সনাক্ত করে, কীভাবে ক্র্যাশ / পুনঃসূচনা / ইত্যাদি হতে পারে এমন বিভিন্ন ধ্রুবক বা ম্যানুয়াল বিল্ড সিস্টেমগুলি কীভাবে মোকাবেলা করা যায় ...

  • প্রশ্ন: কোনও বিল্ড নম্বরটি সংক্ষিপ্ত এবং মিষ্টি হওয়া উচিত (অর্থাত্‍ একঘেয়েভাবে ক্রমবর্ধমান পূর্ণসংখ্যার) যাতে সংরক্ষণাগারটির জন্য ফাইলের নামগুলি আটকে রাখা, যোগাযোগের ক্ষেত্রে উল্লেখ করা সহজ ইত্যাদি ... ... বা এটি দীর্ঘ এবং ব্যবহারকারীর নাম পূর্ণ হওয়া উচিত, খেজুর, মেশিনের নাম ইত্যাদি?

  • প্রশ্ন: দয়া করে বিল্ড সংখ্যার অ্যাসাইনমেন্টটি কীভাবে আপনার বৃহত্তর স্বয়ংক্রিয় রিলিজ প্রক্রিয়াটির সাথে খাপ খায় সে সম্পর্কে বিশদ সরবরাহ করুন। হ্যাঁ, খোদাই করা প্রেমিকারা, আমরা জানি যে এটি হয়ে গেছে এবং হয়ে গেছে, তবে আমরা সবাই এখনও কুল-এইড পান করি নি ...

আমি কমপক্ষে আমাদের সিভি / পিঁপড়া / হাডসন সেটআপের সুনির্দিষ্ট উদাহরণের জন্য এটি পুরোপুরি উত্তর হিসাবে দেখতে চাই, যাতে কেউ এই প্রশ্নের ভিত্তিতে একটি সম্পূর্ণ কৌশল তৈরি করতে পারে। আমি এই বিশেষ কেসের জন্য স্যুপ-টু-বাদাম বিবরণ দিতে পারে এমন কেউই "উত্তর" হিসাবে চিহ্নিত করব (সিভিএস ট্যাগিং স্কিম, প্রাসঙ্গিক সিআই কনফিগারেশন আইটেম এবং রিলিজ পদ্ধতি যা বিল্ড নম্বরটিকে রিলিজের মধ্যে ভাঁজ করে যেমন প্রোগ্রামিয়ালি অ্যাক্সেসযোগ্য)) যদি আপনি অন্য কোনও নির্দিষ্ট কনফিগারেশনের জন্য / জিজ্ঞাসা করতে চান (বলুন, এসএনএন / মাভেন / ক্রুজ নিয়ন্ত্রণ) আমি এখান থেকে প্রশ্নের সাথে লিঙ্ক করব। --JA

[২৩ অক্টোবর 09 এডিট করুন] আমি শীর্ষ-ভোট প্রাপ্ত উত্তরগুলি গ্রহণ করেছি কারণ আমি মনে করি এটি একটি যুক্তিসঙ্গত সমাধান, অন্য উত্তরগুলির বেশ কয়েকটিতে ভাল ধারণাও রয়েছে। যদি কেউ এই কিছুটিকে শহীদ-মেষশাবকের সাথে সংশ্লেষিত করতে কোনও ক্র্যাক নিতে চান তবে আমি অন্যটিকে গ্রহণ করার বিষয়টি বিবেচনা করব। শহীদ-মেষশাবকের সাথে আমার একমাত্র উদ্বেগটি হ'ল এটি নির্ভরযোগ্যভাবে সিরিয়ালযুক্ত বিল্ড নম্বর তৈরি করে না - এটি নির্মাতার সিস্টেমের স্থানীয় ঘড়ির উপর নির্ভর করে নির্বিঘ্ন বিল্ড সংখ্যা সরবরাহ করে, যা দুর্দান্ত নয়।

[জুলাই 10 সম্পাদনা করুন]

আমরা এখন নীচের মত একটি বর্গ অন্তর্ভুক্ত। এটি সংস্করণ নম্বরগুলি চূড়ান্ত নির্বাহযোগ্যতে সংকলিত করার অনুমতি দেয়। সংস্করণ তথ্যের বিভিন্ন ফর্মগুলি লগিং ডেটা, দীর্ঘমেয়াদী সংরক্ষণাগারভুক্ত আউটপুট পণ্যগুলিতে নির্গত হয় এবং একটি নির্দিষ্ট বিল্ডে আউটপুট পণ্যগুলির আমাদের (কখনও কখনও বহু বছর পরে) বিশ্লেষণ সনাক্ত করতে ব্যবহৃত হয়।

public final class AppVersion
{
   // SVN should fill this out with the latest tag when it's checked out.

   private static final String APP_SVNURL_RAW = 
     "$HeadURL: svn+ssh://user@host/svnroot/app/trunk/src/AppVersion.java $";
   private static final String APP_SVN_REVISION_RAW = "$Revision: 325 $";  

   private static final Pattern SVNBRANCH_PAT = 
     Pattern.compile("(branches|trunk|releases)\\/([\\w\\.\\-]+)\\/.*");
   private static final String APP_SVNTAIL = 
     APP_SVNURL_RAW.replaceFirst(".*\\/svnroot\\/app\\/", "");

  private static final String APP_BRANCHTAG;
  private static final String APP_BRANCHTAG_NAME;
  private static final String APP_SVNREVISION = 
    APP_SVN_REVISION_RAW.replaceAll("\\$Revision:\\s*","").replaceAll("\\s*\\$", "");


  static {
    Matcher m = SVNBRANCH_PAT.matcher(APP_SVNTAIL);
    if (!m.matches()) {
      APP_BRANCHTAG = "[Broken SVN Info]";
      APP_BRANCHTAG_NAME = "[Broken SVN Info]";
    } else {
      APP_BRANCHTAG = m.group(1);
      if (APP_BRANCHTAG.equals("trunk")) {
        // this isn't necessary in this SO example, but it 
        // is since we don't call it trunk in the real case
        APP_BRANCHTAG_NAME = "trunk";
      } else {
        APP_BRANCHTAG_NAME = m.group(2);
      }
    }
  }

  public static String tagOrBranchName()
  { return APP_BRANCHTAG_NAME; }

  /** Answers a formatter String descriptor for the app version.
   * @return version string */
  public static String longStringVersion()
  { return "app "+tagOrBranchName()+" ("+
    tagOrBranchName()+", svn revision="+svnRevision()+")"; }

  public static String shortStringVersion()
  { return tagOrBranchName(); }

  public static String svnVersion()
  { return APP_SVNURL_RAW; }

  public static String svnRevision()
  { return APP_SVNREVISION; }

  public static String svnBranchId()
  { return APP_BRANCHTAG + "/" + APP_BRANCHTAG_NAME; } 

  public static final String banner()
  {
    StringBuilder sb = new StringBuilder();
    sb.append("\n----------------------------------------------------------------");
    sb.append("\nApplication -- ");
    sb.append(longStringVersion());
    sb.append("\n----------------------------------------------------------------\n");
    return sb.toString();
  }
}

এটি যদি উইকির আলোচনার দাবি রাখে তবে মন্তব্য করুন।


2
ভবিষ্যতের পাঠকদের জন্য, দয়া করে নোট করুন যে আপনি প্রস্তাবিত কোডটিতে রিভিশন নম্বরটি ফাইলের, এটি বিশ্বব্যাপী সংগ্রহস্থলের সংশোধন নয়। আরও তথ্যের জন্য দেখুন: subversion.apache.org/faq.html#version-value-in-source
maayank

2
আমি ভাবছি যদি কারও gradleএবং / অথবা ব্যবহারের সময় একই ধরণের সহজ পদ্ধতির থাকে git?
বিএনজেএমএন

উত্তর:


63

আমার বেশিরভাগ প্রকল্পের জন্য আমি সাবভারশন রিভিশন নম্বর, সময়, ব্যবহারকারী যেটি বিল্ডটি চালিয়েছিল এবং কিছু সিস্টেমের তথ্য ক্যাপচার করে এগুলি অ্যাপ্লিকেশন জারে অন্তর্ভুক্ত হয়ে যায় এমন একটি প্রাইপার্টি ফাইলে স্টাফ করে এবং রানটাইমে সেই জারটি পড়ি।

পিপীলিকা কোডটি দেখতে এরকম:

<!-- software revision number -->
<property name="version" value="1.23"/>

<target name="buildinfo">
    <tstamp>
        <format property="builtat" pattern="MM/dd/yyyy hh:mm aa" timezone="America/New_York"/>
    </tstamp>        
    <exec executable="svnversion" outputproperty="svnversion"/>
    <exec executable="whoami" outputproperty="whoami"/>
    <exec executable="uname" outputproperty="buildsystem"><arg value="-a"/></exec>

    <propertyfile file="path/to/project.properties"
        comment="This file is automatically generated - DO NOT EDIT">        
        <entry key="buildtime" value="${builtat}"/>
        <entry key="build" value="${svnversion}"/>
        <entry key="builder" value="${whoami}"/>
        <entry key="version" value="${version}"/>
        <entry key="system" value="${buildsystem}"/>
    </propertyfile>
</target>

আপনি যে তথ্য যুক্ত করতে চান তা অন্তর্ভুক্ত করার জন্য এটি প্রসারিত করা সহজ।


12
ক্রস-প্ল্যাটফর্ম সংস্করণের জন্য, উপরের হোয়ামি সংস্থার পরিবর্তে এটি ব্যবহার করুন: <এন্ট্রি কী = "বিল্ডার" মান = "$ {ইউজারআরনাম}" />
এড ব্রানিন

প্ল্যাটফর্ম নির্ভর সমাধান থাকার জন্য -1। সমস্ত পিঁপড়াকে একটি ফাইলের কাছে উপলব্ধ করার একটি দুর্দান্ত উপায় হ'ল: property <সম্পত্তি নাম = "antprop.file" অবস্থান = "।। build.temp.project.dir} /used_ant.properties" /> <echoproperties destfile = "$ {antprops.file} "/> <! - ফাইলটি বাছাই করুন, পিঁপড়া 1.7.0 এর জন্য কেবল নতুন এবং নতুন !!! -> <concat> <union> <sort> <টোকেন> <ফাইল ফাইল =" {{পিঁপড়া .file} "/> <লিনেটোকেনাইজার অন্তর্ভুক্তিমিলাম =" সত্য "/> </ টোকেনস </ translation> </union> </concat>`
রাউডি

আপনি কি এটা করার পরে আবার প্রতিশ্রুতিবদ্ধ? বা আপনার আসল সংশোধন করার আগে এটি করা হয়েছে?
চার্লস উড

6
গিট সংগ্রহস্থলের জন্য এটি কীভাবে করবেন?
টেকক্রাঞ্চ

46

আপনার বিল্ড.এক্সএমএল

...
<property name="version" value="1.0"/>
...
<target name="jar" depends="compile">
    <buildnumber file="build.num"/>
    <manifest file="MANIFEST.MF">
        ...
        <attribute name="Main-Class" value="MyClass"/>
        <attribute name="Implementation-Version" value="${version}.${build.number}"/>
        ...
    </manifest>
</target>
...

আপনার জাভা কোড

String ver = MyClass.class.getPackage().getImplementationVersion();

6
জাভা ইতিমধ্যে এমন কোনও পদ্ধতিতে সমর্থন করে এমন কোনও সম্পত্তি ব্যবহার করার জন্য +1।
এড ব্রান্নিন


6
  • বিল্ড নম্বরগুলি হডসনের মতো অবিচ্ছিন্ন একীকরণের সার্ভারের সাথে যুক্ত হওয়া উচিত । বিভিন্ন শাখা / দল / বিতরণে বিভিন্ন চাকরী ব্যবহার করুন।
  • চূড়ান্ত বিল্ডটিতে সংস্করণ নম্বর রাখতে, আমি বিল্ড সিস্টেমের জন্য কেবল মেভেন ব্যবহার করার পরামর্শ দেব । এটি একটি .properties ফাইল তৈরি করবে চূড়ান্ত .জার / .war /। যাই হোক না কেন - এ সংরক্ষণাগারভুক্ত META-INF/maven/<project group>/<project id>/pom.properties। .Properties ফাইলটিতে সংস্করণ বৈশিষ্ট্য থাকবে।
  • যেহেতু আমি মাভেনের প্রস্তাব দিচ্ছি, আমি আপনাকে উত্স সংগ্রহস্থলের রিলিজ প্রস্তুত করতে এবং সংস্করণগুলিকে সিঙ্কে রাখার জন্য আপনাকে রিলিজ প্লাগইনটি পরীক্ষা করে দেখার অনুরোধ করব ।

6

সফটওয়্যার:

  • SVN
  • পিপীলিকা
  • একটানা সংহত করার জন্য হাডসন
  • এসভিএন সংশোধন সন্ধান করার জন্য একটি পিঁপড়া কাজ এসভিএনটাস্ক:

হাডসনের তিনটি বিল্ড / কাজ রয়েছে: অবিচ্ছিন্ন, রাত্রি এবং প্রকাশ।

অবিচ্ছিন্ন / নাইটলি বিল্ডের জন্য: বিল্ড নম্বর হ'ল এসভিএন রিভিশন, যা সান্টাস্ক ব্যবহার করে পাওয়া যায়।

একটি রিলিজ বিল্ড / কাজের জন্য: বিল্ড নম্বর হ'ল রিলিজ নম্বর, একটি প্রपर्টি ফাইল থেকে পিঁপড়ে পড়া। রানটাইমের সময় বিল্ড নম্বর প্রদর্শন করার জন্য বৈশিষ্ট্য ফাইলটি রিলিজের সাথে বিতরণও করা যেতে পারে।

পিপীলিকা বিল্ড স্ক্রিপ্টটি বিল্ডের সময় নির্মিত জার / ওয়ার ফাইলগুলির ম্যানিফেস্ট ফাইলটিতে বিল্ড নম্বরটি রাখে। সমস্ত বিল্ডে প্রযোজ্য।

রিলিজ বিল্ডগুলির জন্য পোস্ট-বিল্ড অ্যাকশন, হডসন প্লাগ-ইন ব্যবহার করে সহজেই সম্পন্ন করা হয়: বিল্ড নম্বর সহ এসভিএন ট্যাগ করুন।

উপকারিতা:

  • জার / যুদ্ধের ডেভ সংস্করণের জন্য, বিকাশকারী জার / যুদ্ধের থেকে এসভিএন সংশোধনটি পেতে এবং এসভিএন-এ সম্পর্কিত কোডটি সন্ধান করতে পারে
  • একটি রিলিজের জন্য, এসভিএন সংশোধনটি এসভিএন ট্যাগের সাথে সম্পর্কিত যা এতে প্রকাশের সংখ্যা রয়েছে has

আশাকরি এটা সাহায্য করবে.


আপনার কি রিলিজ বিল্ড / কাজটি বিল্ড / রিলিজ নম্বর বৈশিষ্ট্যগুলির ফাইলটি এসভিএন-এ ফিরে আছে?
ম্যাট বি

অবিচ্ছিন্ন বিল্ডগুলির জন্য, বিল্ড নম্বরটি হ'ল এসভিএন সংশোধন নম্বর। সুতরাং, চেক ইন করার জন্য কিছুই নেই release মুক্তির বিল্ডগুলির জন্য, এটি চেক-ইন করা ফাইল যা বিল্ড নম্বর পাওয়ার জন্য ব্যবহৃত হয়। সাধারণত, রিলিজ ইঞ্জিনিয়ার বা অন্য যে কেউ রিলিজের আগে এই ফাইলটি ভালভাবে আপডেট করতে চাইবে।
র্যালি

4

আমি হডসনকেও ব্যবহার করছি, যদিও এর চেয়ে আরও সহজ পরিস্থিতি:

আমার পিপীলিকার স্ক্রিপ্টটিতে এটির মতো লক্ষ্য রয়েছে যা দেখে মনে হচ্ছে:

<target name="build-number">
    <property environment="env" />
    <echo append="false" file="${build.dir}/build-number.txt">Build: ${env.BUILD_TAG}, Id: ${env.BUILD_ID}, URL: ${env.HUDSON_URL}</echo>
</target>

আমার কাজ যখনই চলবে তখন হাডসন আমার জন্য এই পরিবেশের পরিবর্তনশীলগুলি সেট করে।

আমার ক্ষেত্রে, এই প্রকল্পটি একটি ওয়েব অ্যাপ্লিকেশন এবং আমি এই build-number.txtফাইলটি ওয়েব অ্যাপের মূল ফোল্ডারে অন্তর্ভুক্ত করছি - কে সত্যি তা দেখায় আমি সত্যিই যত্নশীল নই।

এটি সম্পন্ন হওয়ার সময় আমরা উত্স নিয়ন্ত্রণটিকে ট্যাগ করি না কারণ বিল্ডটি সফল হওয়ার সাথে সাথে আমাদের বিল্ড নম্বর / টাইমস্ট্যাম্পের সাথে এটি ট্যাগ করার জন্য ইতিমধ্যে আমাদের হাডসনের কাজ সেট আপ হয়েছে।

আমার সমাধানটি কেবল বিকাশের জন্য বর্ধনশীল বিল্ড সংখ্যাগুলি কভার করে, আমরা এখনও প্রকল্পে মুক্তির সংখ্যা কভার করছি না এমন পর্যায়ে আমরা এখনও পাইনি।


`env.SVN_URL_1 env.SVN_REVISION_1 env.SVN_URL_2 env.SVN_REVISION_2 ইত্যাদি অতিরিক্ত (বর্তমান Jenkins সংস্করণে অন্তত) আপনি খুঁজে বার করো পারে বৈশিষ্ট্য
raudi

3

আপনি http://code.google.com/p/codebistro/wiki/BuildNumber এ পাওয়া একটি জারে বিল্ডনিম্বার মাভেন প্লাগইন এবং পিঁপড়া টাস্কটি একবার দেখতে চাইতে পারেন । আমি এটিকে সহজ এবং সোজা করার চেষ্টা করেছি। এটি একটি খুব ছোট জার ফাইল যা কেবলমাত্র ইনস্টল করা কমান্ড লাইন সাবভার্সনের উপর নির্ভর করে।


3

এইভাবে আমি এটি সমাধান করেছি:

  • উত্সগুলি বিল্ড ডিরেক্টরিতে অনুলিপি করা হয়
  • তারপরে অ্যান্টাস্ক "ভার্সনফোন" প্রয়োগ করা হয়
  • পরিবর্তিত উত্স সংকলন

এখানে জাভা ফাইলটি সংস্করণ তথ্য সংরক্ষণ করছে:

public class Settings {

    public static final String VERSION = "$VERSION$";
    public static final String DATE = "$DATE$";

}

এবং এখানে অ্যান্টাস্ক "ভার্সনফোন" রয়েছে:

    <!-- ================================= 
     target: versioninfo              
     ================================= -->
    <target name="versioninfo"
            depends="init"
            description="gets version info from svn"
    >

        <!-- 
        get svn info from the src folder 
        -->
        <typedef resource="org/tigris/subversion/svnant/svnantlib.xml"
                 classpathref="ant.classpath"
        />
        <svnSetting id="svn.setting"
                    javahl="false"
                    svnkit="true"
                    dateformatter="dd.MM.yyyy"
        />
        <svn refid="svn.setting">
            <info target="src" />
        </svn>

        <!-- 
        if repository is a taged version use "v <tagname>"
        else "rev <revisionnumber> (SVN)" as versionnumber
         -->
        <taskdef resource="net/sf/antcontrib/antcontrib.properties"
                 classpathref="ant.classpath"
        />
        <propertyregex property="version"
                       input="${svn.info.url}"
                       regexp=".*/tags/(.*)/${ant.project.name}/src"
                       select="v \1"
                       defaultvalue="rev ${svn.info.lastRev} (SVN)"
                       override="true"
        />


        <!-- 
        replace date and version in the versionfile ()
         -->
        <replace file="build/${versionfile}">
            <replacefilter token="$DATE$" value="${svn.info.lastDate}" />
            <replacefilter token="$VERSION$" value="${version}" />
        </replace>

    </target>

2

এখানে আমার 2 সেন্ট:

  • আমার বিল্ড স্ক্রিপ্টটি প্রতিবার অ্যাপটি তৈরি করার সময় একটি বিল্ড নম্বর (টাইমস্ট্যাম্প সহ!) তৈরি করে। এটি অনেকগুলি সংখ্যা তৈরি করে তবে খুব কম কখনও হয় না। কোডটিতে আমার যদি পরিবর্তন হয় তবে বিল্ড নম্বরটি কমপক্ষে একবারে পরিবর্তিত হবে।

  • আমি প্রতিটি রিলিজের সাথে বিল্ড নম্বরটি সংস্করণ করি (যদিও অভ্যন্তরীণ নয়)। আমি যখন প্রকল্পটি আপডেট করি এবং আমি একটি নতুন বিল্ড নম্বর পাই (কারণ অন্য কেউ প্রকাশ করেছে), আমি আমার স্থানীয় সংস্করণটি ওভাররাইট করে আবার শুরু করব। এটি কম বিল্ড নম্বর নিয়ে যেতে পারে যার কারণে আমি টাইমস্ট্যাম্পটি অন্তর্ভুক্ত করেছি।

  • যখন একটি রিলিজ হয়, বিল্ড নম্বরটি "বিল্ড 1547" বার্তাটি দিয়ে একক প্রতিশ্রুতিতে শেষ আইটেম হিসাবে প্রতিশ্রুতিবদ্ধ হয়। এর পরে, এটি যখন সরকারীভাবে প্রকাশিত হয়, পুরো গাছটি ট্যাগ হয়। এইভাবে, বিল্ড ফাইলটিতে সর্বদা সমস্ত ট্যাগ থাকে এবং ট্যাগ এবং বিল্ড সংখ্যার মধ্যে একটি সাধারণ 1: 1 ম্যাপিং থাকে।

[সম্পাদনা] আমি আমার প্রকল্পগুলির সাথে একটি সংস্করণ। Html স্থাপন করি এবং তারপরে, আমি কোনও স্ক্র্যাপারটি কেবল যেখানে ইনস্টল করা আছে তা সঠিক মানচিত্র সংগ্রহ করতে ব্যবহার করতে পারি। আপনি যদি টমকাট বা অনুরূপ ব্যবহার করছেন তবে বিল্ড নম্বর এবং টাইমস্ট্যাম্পটি ওয়েব.এক্সএমএল এর descriptionউপাদানটিতে রাখুন । মনে রাখবেন: কম্পিউটার যখন আপনার জন্য করতে পারে তখন কোনও কিছুই মুখস্থ করবেন না।


হ্যাঁ ... আমাদেরও তাই আছে। এবং এটি ব্যবহারে ব্যথা হয় যখন আপনার মনে রাখতে হয় কোনটি অবিশ্বাস্যরকম দীর্ঘ বিল্ডটি এখানে বা সেখানে স্থাপন করা হয়েছে। অনেক বেশি সংখ্যাও সমস্যা ...
বর্ধন

@ ভারখান: কেন? এইচটিএমএল স্ক্র্যাপার আপনার জন্য এটি সংগ্রহ করতে পারে যেখানে কেবল সংস্করণটি রাখুন ...
অ্যারন ডিগুল্লা

1

আমরা ক্রুজ কন্ট্রোলের মাধ্যমে আমাদের বিল্ডটি পরিচালনা করি (আপনার প্রিয় বিল্ড ম্যানেজারটি এখানে sertোকান), এবং প্রধান বিল্ড এবং পরীক্ষাগুলি করি।

এরপরে আমরা পিপীলিকা এবং বিল্ডবার্বার ব্যবহার করে সংস্করণ নম্বরটি বাড়িয়ে তুলি এবং এই তথ্যের সাথে বিল্ডের তারিখ এবং অন্যান্য মেটাডেটা দিয়ে একটি সম্পত্তি ফাইল তৈরি করি।

আমাদের এটি পড়ার এবং এটি জিইআইআই / লগ ইত্যাদিতে সরবরাহ করার জন্য উত্সর্গীকৃত একটি শ্রেণি রয়েছে

এরপরে আমরা এই সমস্তটি প্যাকেজ করি এবং বিল্ড নম্বর এবং সংশ্লিষ্ট বিল্ডকে একত্রে একটি স্থাপনযোগ্য বেঁধে তৈরি করি। আমাদের সমস্ত সার্ভারগুলি শুরু করার সময় এই মেটা তথ্যটি ডাম্প করে। আমরা ক্রুজকন্ট্রোল লগগুলি দিয়ে ফিরে যেতে পারি এবং তারিখ এবং চেকিনগুলিতে বিল্ড নম্বরটি বেঁধে রাখতে পারি।


টিপ: আপনি যদি সিসি এবং পিঁপড়ের বিল্ডবার্বার ব্যবহার করেন তবে আপনি সিসি লেবেলগুলি বিল্ড নম্বরের সাথে একত্রে রাখার জন্য প্রপার্টিফাইলেবেলআইঙ্ক্রেমেন্টার ব্যবহার করতে পারেন।
জেফ্রি ফ্রেড্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.