سؤال

أريد أن أكون قادرًا على نشر التحديثات بسرعة إلى موقع مشغول إلى حد ما. بالنسبة للمواقع الأصغر ، أود فقط FTP الملفات الجديدة على تلك القديمة. ومع ذلك ، يحتوي هذا على عدد قليل من DLL كبير يتم تحديثه بانتظام ، وبينما يقومون بنسخ الموقع إلى أسفل بشكل فعال (بالإضافة إلى وجود متاعب في صنع نسخ احتياطية منها في حالة حدوث خطأ ما.

تتمثل خطتي في استخدام السلحفاة لمزامنة مع نسخة انطلاق على الخادم عبر FTP (باستخدام NetDrive أو شيء مشابه). يمكنني بعد ذلك التحقق من أن كل شيء يعمل بسلاسة وبمجرد اكتمال ذلك ، أود تشغيل ملف .bat (أو أي شيء آخر) من شأنه أن ينشئ نسخة احتياطية من الموقع المباشر (ويفضل فقط الملفات التي على وشك التغيير ، ولكن هذا ليس حرجًا) ثم نسخ الملفات التي تم تغييرها حديثًا إلى الموقع المباشر.

إذا أمكن ، أرغب أيضًا في تجاهل النسخة بعض الدلائل (مثل تحميلات المستخدم) حتى لا تكتب تلك الملفات على الموقع المباشر؟

لقد سمعت أن robocopy هو السبيل للذهاب ، لكنني لست متأكدًا من من أين أبدأ. هل سأحتاج إلى الاتصال بأمر 2 (1 للنسخ الاحتياطي الأولي وواحد للنسخة)؟ هل هناك أي طريقة لاستعادة الموقع المباشر إلى حالته السابقة هل يجب أن يحدث خطأ ما؟

الموقع في ASP.NET وسيتم نسخه إلى خادم Windows 2003.

تحرير: يصبح الأمر صعبًا بعض الشيء عند تغيير العناصر على الويب. كيف يتم التعامل مع ذلك؟

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

المحلول

ما نستخدمه هو ما يلي

  • قم أولاً ببناء الموقع الإلكتروني مع MSBuild في cruisecontrol.net لبناء الثنائيات
  • أرشفة الملفات التي تم نشرها حاليًا تحت مجلد طابع زمني لتجنب فقدان البيانات في حالة وجود مشكلة

    C:\DevTools\Robocopy\robocopy.exe /R:1 /W:10 /mir "D:\WebSite\Files" "D:\Webarchive\ArchivedFiles\Documents.%date:~0,-8%.%date:~3,-5%.%date:~6%.%time:~0,-9%.%time:~3,-6%.%time:~6,-3%" /XF *.scc

  • أوقف الموقع

  • نشر موقع الويب عن طريق نسخ كل شيء باستثناء الملفات التي أرشئناها (/XD تستبعد الدليل)

    C:\DevTools\Robocopy\robocopy.exe /R:1 /W:10 /mir "c:\dev\site" "D:\WebSite" /XF *.scc /XD "D:\WebSite\Files"

  • نسخ وإعادة تسمية (مع Xcopy ، هذه المرة) إصدار. web.config على الطيران).

  • أعد تشغيل الموقع
  • (اختياري) حذف الأرشيف الذي قمت به في الخطوة الثانية

في حالتك ، سيتعين عليك إضافة أعلام /XD لأي دليل تريد تجاهله ، مثل تحميل المستخدمين. وما لم يكن ملف الإنتاج.

نصائح أخرى

هل Robocopy متطلب صعب؟ لماذا لا تستخدم MSBuild؟ كل ما أدرجته يمكن أن يتم في MSBuild.

<!-- Attempt to build new code -->
<MSBuild Projects="$(BuildRootPath)\ThePhotoProject.sln" Properties="Configuration=$(Environment);WebProjectOutputDir=$(OutputFolder);OutDir=$(WebProjectOutputDir)\" />

<!-- Get temp file references -->
<PropertyGroup>
  <TempConfigFile>$([System.IO.Path]::GetTempFileName())</TempConfigFile>
  <TempEnvironmentFile>$([System.IO.Path]::GetTempFileName())</TempEnvironmentFile>
</PropertyGroup>

<!-- Copy current web configs to temp files -->
<Copy SourceFiles="$(OutputFolder)\web.config" DestinationFiles="$(TempConfigFile)"></Copy>
<Copy SourceFiles="$(OutputFolder)\web.$(Environment).config" DestinationFiles="$(TempEnvironmentFile)"></Copy>
<ItemGroup>
  <DeleteConfigs Include="$(OutputFolder)\*.config" />
</ItemGroup>

<Delete Files="@(DeleteConfigs)" />

...

<!-- Copy app_offline file -->
<Copy SourceFiles="$(CCNetWorkingDirectory)\Builder\app_offline.htm"  DestinationFiles="$(DeployPath)\app_offline.htm"  Condition="Exists('$(CCNetWorkingDirectory)\Builder\app_offline.htm')"  />

<ItemGroup>
  <DeleteExisting Include="$(DeployPath)\**\*.*" Exclude="$(DeployPath)\app_offline.htm" />      
</ItemGroup>

<!-- Delete Existing files from site -->
<Delete Files="@(DeleteExisting)"  />
<ItemGroup>
  <DeployFiles Include="$(OutputFolder)\**\*.*" />
</ItemGroup>

<!-- Deploy new files to deployment folder. -->
<Copy SourceFiles="@(DeployFiles)"  DestinationFiles="@(DeployFiles->'$(DeployPath)\%(RecursiveDir)%(Filename)%(Extension)')"  />

<!-- Delete app_offline file -->
<Delete Files="$(DeployPath)\app_offline.htm" Condition="Exists('$(DeployPath)\app_offline.htm')"  />

على الخوادم المستندة إلى NIX ، سأستخدم RSYNC وأتفهم أنه على Windows يمكنك استخدامه Deltacopy أي منفذ RSYNC ومصادر مفتوحة (لم يتم استخدامها أبدًا Deltacopy ، لذا يرجى التحقق من ذلك بعناية) على أي حال بافتراض أنه يعمل مثل RSYNC ، فهو سريع وتحديث فقط الملفات التي تم تغييرها.

يمكنك استخدام خيارات التكوين المختلفة لحذف الملفات على الهدف الذي تم حذفه على المصدر ويمكنك أيضًا استخدام إضافة في ملف يستبعد الملفات أو الدلائل ، أي التكوين المحلي ، لا تريد النسخ. إلخ.

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

تحقق من هذه الروابط لمعرفة ما إذا كانت تساعد:

ستجد ذلك robocopy.exe /? مفيد للغاية. على وجه الخصوص سوف تريد /XF التبديل لاستبعاد الملفات ، و /XD لاستبعاد المجلدات.

ستحتاج إلى كتابة برنامج نصي (مثل الخفافيش ، PowerShell ، Cscript) لرعاية مشكلات الويب.

يستخدم Microsoft نفسها Robocopy لنشر التحديثات لبعض المواقع.

لا أعرف ما إذا كان لديك خوادم متعددة ، لكن البرنامج النصي للنشر قد ذهب إلى شيء مثل: 1) أوقف IIS (الذي سيأخذ الخادم من دوران التحميل ، 2) Robocopy /mir من traging path to webroot إلى web ## path to webroot حيث ## هو رقم الخادم ، 3) ابدأ IIS. تم ذلك بعد أن تم اختبار الدخان على الموقع على خادم التدريج.

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

ما تحتاجه (وأنا بحاجة) هو أ مزامنة البرنامج مع القدرة على انشئ نسخة احتياطية من الملفات على الخادم ، وجعلها نسخة سريعة فوق FTP من الملفات الموجودة في تلك من خلال نسخها أولاً على دليل مؤقت ، أو عن طريق التحديث الجزئي.

هذا برنامج واحد وجدته: http://www.superflexible.com/ftp.htm

WebDeploy هي طريقة أفضل بكثير للتعامل مع عمليات النشر (انظر Scott H http://www.hanselman.com/blog/webDeploymentMadeAwesomeifeOreusingxCopyyouredoingTwrong.aspx)

لكن Robocopy هي أداة نشر رائعة منخفضة التكلفة ما زلت أستخدمها في بعض المواقع (لم أجد الوقت لتغييرها إلى WebDeploy). يشبه Robocopy Xcopy ولكن مع مجموعة أكثر ثراءً من الخيارات. لذلك ستحتاج إلى 2 أوامر robocopy (1 للنسخ الاحتياطي و 1 للنشر). عادةً ما أقوم بأمر النسخ الاحتياطي عند تنظيم الملفات.

تعد إدارة ملفات التكوين أمرًا صعبًا دائمًا (وسبب كبير لاستخدام WebDeploy). نهج واحد ، هو الاحتفاظ بنسخة من ملفات التكوين لكل بيئة تم فحصها في عنصر تحكم المصدر الخاص بك (على سبيل المثال ، web.dev.config ، web.uat.config ، web.prod.config ، إلخ). سيقوم التدريج (أو نشر البرنامج النصي) باستيلاء على ملف التكوين اللازم وإعادة تسميته.

ربما تحتاج إلى استخدام مجموعة من الأدوات.

سألقي نظرة على DFSR (دور خادم الملفات) مع مجلد للقراءة فقط على موقعك المباشر (بحيث يكون النسخ المتماثل في اتجاه واحد).

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

بمجرد حصولك على الجزء الأكبر من ملفاتك المتماثلة ، يمكنك بعد ذلك الحصول على المساعدة في أتمتة الاندماج المحتمل على web.config ، على افتراض أنك تريد ذلك الآلي.

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

أدخل robocopy. مع Robocopy ، تقوم بنسخ منتج تم اختباره بالكامل (نأمل) إلى بيئة الإنتاج الخاصة بك. ستحتاج إما إلى تعديل الويب الخاص بك يدويًا. config/app.config لتعكس بيئة الإنتاج ، أو استخدام أداة تحويل للقيام بذلك. لقد كنت أستخدم "أداة تحويل التكوين" المتوفرة على SourceForge لهذا الغرض - فهي تعمل تمامًا مثل تحويلات MSBuild Web/App.Config.

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