سؤال

أنا أعمل على C#/VB.صافي المشروع الذي يستخدم SVN و TeamCity بناء الخادم.عشرات أو حتى الجمعيات التي تنتجها بناء.أريد السيطرة على الجمعية الإصدارات بحيث كل مباراة و أيضا مباراة TeamCity بناء التسمية.

لقد تم تكوين TeamCity استخدام بناء التسمية

الرئيسية.طفيفة.{بناء}.{تنقيح}

حيث الرئيسية والثانوية هي الثوابت التي وضعتها يدويا, {تنقيح} يتحدد إس مستودع نسخة في الخروج و {بناء} هو TeamCity صناعة السيارات في تزايد بناء العداد.لذلك على سبيل المثال بناء التسمية سيكون

2.5.437.4423

ما هي الأساليب التي قد توحي لك للتأكد من أن كل من الجمعية إصدارات مباراة TeamCity بناء التسمية ؟

هل كانت مفيدة؟

المحلول

نحن نستخدم CruiseControl.net و SVN.ونحن بالسيارة ذلك بطريقة أخرى.نحن نستخدم MSBuildCommunityTasks نسخة مهمة في MSBuild النصي إلى زيادة رقم الإصدار CI يبني باستخدام هذا الإصدار رقم الوسم شفرة المصدر.

تحرير: طلبت المزيد من التفاصيل على MSBuild الأهداف...
نحن نستخدم مجموعة منفصلة النصي الذي هو CI بناء و لا يستخدم المطور يبني.حاولنا استخدام أهداف مختلفة في MSBuild ملفات الاستوديو يستخدم ملفات المشروع ولكن هذا يجب أن يكون الصداع و اليدوي المطلوب تحرير ملفات الاستديو توليد.
هيكل MSBuild الملف هو بسيط جدا:

  1. استيراد قطع إضافية

    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
    <!-- contains some variables that set project names, paths etc. -->
    <Import Project="Properties.msbuild"/>

  2. BeforeBuild:مجموعة جديدة رقم الإصدار كتابة الملف AssemblyInfo

    <Version VersionFile="$(VersionFile)" BuildType="None" RevisionType="Increment">
    <Output TaskParameter="Major" PropertyName="Major" />
    <Output TaskParameter="Minor" PropertyName="Minor" />
    <Output TaskParameter="Build" PropertyName="Build" />
    <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>

    <!--Modify Assembly Info-->
    <AssemblyInfo CodeLanguage="CS"
    OutputFile="Properties\AssemblyInfo.cs"
    AssemblyTitle="$(TargetAssembly)"
    AssemblyDescription="$(AssemblyDescription) svn:@(SanitizedSvnUrl) revision:$(SvnRevision)"
    AssemblyCompany="Your company name"
    AssemblyProduct="Name of product"
    AssemblyCopyright="Copyright © your company 2009"
    ComVisible="false" Guid="$(WindowGuid)"
    AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)"
    AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"
    Condition="$(Revision) != '0' " />

  3. بناء:بناء المشروع الفعلي الملف MSBuild النصي في وضع الإصدار

  4. AfterBuild:إدارة اختبار وحدة المشاريع (حارسا ضد إنشاء علامات كسر يبني في الخطوات التالية) ، استخدام SvnInfo المهام و بعض RegexReplace المهام لتعيين بعض المتغيرات مع مسارات الوسم أسماء ، واستخدام SvnCopy مهمة لخلق العلامة.

<SvnCopy UserName="username"
Password="password"
SourcePath="@(SvnTrunkPath)"
DestinationPath="@(SvnTagsPath)/BUILD-$(TargetAssembly)-$(Major).$(Minor).$(Build).$(Revision)" Message="Tagging successful build" />

نصائح أخرى

أقترح استخدام TeamCity هو AssemblyInfo الرقاع بناء الميزة:

http://confluence.jetbrains.net/display/TCD65/AssemblyInfo+Patcher

مجرد إنشاء المشاريع الخاصة بك من VisualStudio تكوين بناء الميزة في BuildSteps الصفحة (انظر http://confluence.jetbrains.net/display/TCD65/Adding+Build+Features), و طالما أنك تحافظ على الافتراضي AssemblyInfo.cs الملف ، أنه سوف يعمل.

هذا النهج هو عمل عظيم بالنسبة لي.

المزايا:

  • يمكن للمطورين بناء الحل في الأجهزة الخاصة بهم.
  • لا تحتاج للمس .sln أو .csproj الملفات.انها تعمل فقط.
  • باستخدام TeamCity المتغيرات يمكنك بسهولة جعل النسخة رقم تطابق بعض المشاريع الأخرى نسخة ، إلخ.

العيوب:

  • لا يمكنك التبديل بسهولة إلى آخر CI الخادم من TeamCity لأنك لا تملك البناء النصي (ولكن التحول CI خوادم مثل تبديل ORM أو قاعدة البيانات:فإنه من غير المحتمل جدا و تتطلب الكثير من العمل على أي حال).

سأرحل هاميش الإجابة الجواب المقبول ، ولكن للتأكد من اكتمالها ظننت أنه سوف يكون من المفيد توثيق النهج الذي اعتمد أخيرا.

أنا الحفاظ على 2 منفصلة بناء تكوينات في TeamCity واحد هو CI بناء آخر هو بناء يعمل الأسبوعية عندما يكون هناك أي تغييرات (أو يدويا) و هو الإصدار الرسمي بناء.ذهبت لاثنين-بناء النهج لأن بناء ربما يأخذ 40 دقيقة من النهاية إلى النهاية و اردت المطورين للحصول على ردود فعل سريعة على أي بناء القضايا عندما يرتكبون التغييرات.CI بناء لذلك هو مجموعة فرعية من الإفراج الكامل بناء ولكنه بناء كافة التعليمات البرمجية.في الإصدارات أيضا يختلف بين اثنين يبني:

  • CI بناء أرقام إصدار {الكبرى.طفيفة.BuildCounter.SvnRevision}
    • BuildCounter يبدأ من 0
    • لا الوسم إس مستودع
  • الأسبوعية/الإفراج بناء مماثل النظام الإصدارات ، ولكن
    • بناء العداد يبدأ في (الكبرى * 1000) ، حتى إذا الرئيسية هو '8' ، بناء العداد يبدأ من 8000.
    • يخلق الوسم يسمى 'Build_{النسخة}' في إس في مستودع

والسبب في ذلك تعسفي إلى حد ما الخيار للسماح لنا بوضوح وببساطة التمييز بين CI يبني وإطلاق يبني.

لدينا الحل على صعيد ملف يسمى AssemblyVersionInfo المضمنة (لينة المرتبطة) في كل مشروع في الحل.الملف يحتوي على (في الجوهر) هذا:

using System.Reflection;
// Revision and Build both set to 9999 indicates a private build on a developer's private workstation.
[assembly: AssemblyFileVersion("6.0.9999.9999")]        // Win32 File Version (not used by .NET)

حتى المطور يبني كل استخدام نفس ثابت و يسهل التعرف على رقم الإصدار الذي هو أعلى من أي شيء تنتجها بناء الخادم حتى في الإصدارات الصراع المطور الملف انتصارات.

على بناء الخادم ، ونحن لنا MSBuild المجتمع المهام توليد جديدة AssemblyVersionInfo ملف الكتابة فوق المحتوى الافتراضي.نحن نستخدم TeamCity بناء سلسلة النسخة الجديدة.في هذه الطريقة ، يمكننا بسهولة التمييز بين 3 حالات:

  • خاصة بناء يقوم على المطور محطة العمل
  • CI بناء يقوم على بناء الخادم ولكن الذي لا ينبغي أن يكون صدر
  • وهو رسميا الإفراج عن البناء الذي هو معلم في إس في مستودع

في تطور آخر, علما أنني الإعداد AssemblyFileVersion, لا AssemblyVersion.نحن القوة لدينا إصدارات الجمعية أن تكون ساكنة ، النسخة الثابتة من السلسلة الرئيسية.طفيفة.0.0'.نحن نفعل هذا حتى نتمكن من إصدار إصلاح الخلل النشرات دون الحاجة إلى القلق حول الإصدارات القضايا.على AssemblyFileVersion يتيح لنا معرفة لأي بناء المستخدم بتثبيت دون أن يكون جزءا من الهوية.

وعلى الرغم من أن هذا هو وجود بالفعل إجابة مقبولة، وأنا أود أن أضيف فكرة استخدمنا.

لمشاريع كبيرة قد يكون هناك العديد من الملفات معلومات تجميع لتحديث، ومع ثابت إعادة العوملة، هناك دائما خطر أن السيناريو بناء ليست على علم الملفات الجديدة التي تحتاج إلى تحديث.

لهذا السبب قمنا بإنشاء ملف رمز بسيط الذي يحدد ثابت للحصول على الإصدار الفعلي ومن ثم جميع المشاريع يرث هذا الثابت ولنا في ملف المعلومات التجمع. ثم النصي بناء تحتاج فقط بتحديث ملف واحد.

وفائدة أخرى هنا هي أن هذا يسرع أيضا عملية الإنشاء إلى حد ما لأنه لا حاجة للذهاب من خلال العديد من الملفات والتغيير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top