سؤال

لقد قمت بإعداد CruiseControl.NET الإصدار 1.4 على خادم التطوير الخاص بي.عندما يقوم المطور بالتحقق من التعليمات البرمجية، فإنه يقوم بعملية التحويل البرمجي.

نحن الآن في مكان حيث يمكننا البدء في تقديم طلبنا إلى المختبرين.نود استخدام ClickOnce لتوزيع التطبيق، مع فكرة أنه عندما يذهب أحد المختبرين لاختبار التطبيق، يكون لديه أحدث إصدار.

لا يمكنني العثور على طريقة لتحقيق ذلك باستخدام CruiseControl.NET.نحن نستخدم MSBUILD لتنفيذ البنيات.

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

المحلول 2

شكرا لجميع التعليمات.الحل النهائي الذي قمنا بتنفيذه أخذ القليل من كل إجابة.

لقد وجدنا أنه من الأسهل التعامل مع العمل مع بيئات متعددة باستخدام ملفات دفعية بسيطة.أنا لا أقترح أن هذه هي أفضل طريقة للقيام بذلك، ولكن بالنسبة للسيناريو والمتطلبات المحددة لدينا، فقد نجح هذا الأمر بشكل جيد.قم بتكملة "المشروع" باسم مشروعك و"البيئة" باسم البيئة الخاصة بك (تطوير، اختبار، مرحلة، إنتاج، أيًا كان).

هذه هي منطقة المهام في ملف "ccnet.config".

<!-- override settings  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\CopySettings.bat</executable>
</exec>

<!-- compile -->
<msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
    <workingDirectory>F:\Source\Project\Environment\</workingDirectory>
    <projectFile>Project.sln</projectFile>
    <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
    <targets>Rebuild</targets>
    <timeout>0</timeout>
    <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>

<!-- clickonce publish  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\Publish.bat</executable>
</exec>

أول شيء ستلاحظه هو تشغيل CopySettings.bat.يؤدي هذا إلى نسخ إعدادات معينة للبيئة، مثل اتصالات قاعدة البيانات.

بعد ذلك، يتم تشغيل مهمة MSBUILD القياسية.يتم اكتشاف أي أخطاء في الترجمة هنا والتعامل معها كالمعتاد.

آخر شيء يجب تنفيذه هو Publish.bat.يؤدي هذا في الواقع إلى "إعادة بناء" MSBUILD مرة أخرى من سطر الأوامر، ويتم تمرير المعلمات من CruiseControl تلقائيًا وإنشاؤها.بعد ذلك، يتم استدعاء MSBUILD للهدف "النشر".يتم إعطاء نفس المعلمات بالضبط للنشر عند إصدار إعادة البناء.يؤدي هذا إلى الحفاظ على مزامنة أرقام البناء.أيضًا، تتم تسمية ملفاتنا التنفيذية بشكل مختلف (على سبيل المثال:- ProjectDev وProjectTest).وينتهي بنا الأمر بأرقام وأسماء إصدارات مختلفة، وهذا يسمح لـ ClickOnce بالقيام بعملها.

يقوم الجزء الأخير من Publish.bat بنسخ الملفات الفعلية إلى منازلهم الجديدة.نحن لا نستخدم Publish.htm نظرًا لأن جميع مستخدمينا موجودون على الشبكة، فنحن فقط نمنحهم اختصارًا لملف البيان الموجود على سطح المكتب الخاص بهم ويمكنهم النقر فوق الملف القابل للتنفيذ الصحيح وتشغيله دائمًا باستخدام رقم الإصدار الذي يرتبط به مثبت السرعة.

هنا CopySettings.bat

XCOPY "F:\Source\Project\Environment\CruiseControl\Project\app.config" "F:\Source\Project\Environment\Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.Designer.vb" "F:\Source\Project\Environment\Project\My Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.settings" "F:\Source\Project\Environment\Project\My Project" /Y /I /R

وأخيرًا، هنا Publish.bat

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:rebuild "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationRevision=%CCNetLabel% /property:AssemblyName="ProjectEnvironment" /property:PublishUrl="\\Server\bin\Project\Environment\\"
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:publish "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationVersion="1.0.0.%CCNetLabel%" /property:AssemblyVersion="1.0.0.%CCNetLabel%" /property:AssemblyName="ProjectEnvironment" 

XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish" "F:\Binary\Project\Environment" /Y /I
XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish\Application Files" "F:\Binary\Project\Environment\Application Files" /Y /I /S

كما قلت، ربما لم يتم تنفيذ الأمر بالطريقة التي أراد مطورو CruiseControl وMSBUILD أن تعمل بها الأمور، ولكنها تعمل.إذا كنت بحاجة إلى تشغيل هذا بالأمس، فقد يكون هذا هو الحل الذي تبحث عنه.حظ سعيد!

نصائح أخرى

لقد فعلنا هذا ويمكننا أن نقدم لك بعض المؤشرات للبدء.

2 أشياء يجب أن تكون على علم بها:

  • يمكن لـ MSBuild إنشاء ملفات النشر الضرورية لك.
  • لن يقوم MSBuild بنشر الملفات إلى مشاركة FTP أو UNC.ستحتاج إلى خطوة منفصلة لهذا الغرض.

لاستخدام MSBuild لإنشاء بيانات ClickOnce، إليك الأمر الذي ستحتاج إلى إصداره:

msbuild /target:publish /p:Configuration=Release /p:Platform=AnyCPU; "c:\yourProject.csproj"

سيؤدي ذلك إلى إخبار MSBuild ببناء مشروعك وإنشاء ملفات نشر ClickOnce داخل ملف bin elease\YourProject.publish الدليل.

كل ما تبقى هو نسخ هذه الملفات إلى مشاركة FTP/UNC/في أي مكان، وستكون جاهزًا.

يمكنك إخبار CruiseControl.NET بالإنشاء باستخدام معلمات MSBuild تلك.

ستحتاج بعد ذلك إلى مهمة بناء CruiseControl.NET لأخذ ملفات النشر التي تم إنشاؤها ونسخها إلى مشاركة FTP أو UNC.نحن نستخدم برنامج وحدة تحكم C# صغيرًا مخصصًا لهذا الغرض، ولكن يمكنك بسهولة استخدام برنامج Powershell النصي.

أتذكر قيامي بذلك العام الماضي لمشروع ClickOnce الذي كنت أعمل عليه.أتذكر أن الأمر استغرق مني إلى الأبد لمعرفة ذلك ولكن ها هو.ما أردت أن تفعله النصوص البرمجية الخاصة بي هو إنشاء مُثبِّت مختلف يشير إلى بيئة التطوير الخاصة بنا ومُثبِّت مختلف للمنتج.ليس هذا فحسب، بل كنت في حاجة إليها لإدخال معلومات الإصدار الصحيحة حتى "يدرك" العملاء الحاليون أن هناك إصدارًا جديدًا وهو الهدف الأساسي من ClickOnce.في هذا البرنامج النصي، يجب عليك استبدال أسماء الخادم الخاصة بك وما إلى ذلك.الحيلة هي حفظ ملف Publish.htm وproject.publish وإدخال رقم الإصدار الجديد بناءً على الإصدار المقدم لك بواسطة CC.NET.

إليك ما يبدو عليه البرنامج النصي للبناء الخاص بي:

<target name="deployProd">
  <exec program="<framework_dir>\msbuild.exe" commandline="<project>/<project>.csproj /property:Configuration=PublishProd /property:ApplicationVersion=${build.label}.*;PublishUrl=\\<prod_location>\binups$\;InstallUrl=\\<prod_location>\binups$\;UpdateUrl=\\<prod_location>\binups$\;BootstrapperComponentsUrl=\\<prod_location>\prereqs$\ /target:publish"/>

  <copy todir="<project>\bin\PublishProd\<project>.publish">

    <fileset basedir=".">
      <include name="publish.htm"/>
    </fileset>

    <filterchain>
      <replacetokens>
        <token key="CURRENT_VERSION" value="${build.label}"/>
      </replacetokens>
     </filterchain>
  </copy>

</target>

أتمنى أن يساعدك هذا

إن مجرد التمكن من تمرير ${CCNetLabel} في مهمة CCNET.config msbuild سيكون بمثابة تحسن كبير.

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

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