سؤال

أقوم بتكوين مهمة Jenkins لتحميل الملفات من Subversion إلى SFTP. النشر عبر SSH يعمل بشكل جيد جدًا، ولكنه يقوم بتحميل جميع الملفات على كل إصدار.

بالنسبة لبعض المشاريع، لدينا آلاف الملفات وتستغرق تكلفة التحميل أكثر من ساعة واحدة، لذا فهذا ليس خيارًا.

هل يمكن لأي شخص أن يقترح طريقة لتحميل الملفات التي تم تغييرها في المراجعة الأخيرة فقط؟

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

المحلول

يمكنك استخدام البرنامج المساعد التخريب لاستقصاء تغييرات SVN وتشغيل مهمة لا تفعل شيئًا على وجه الخصوص.دعونا نسميها YourPollingJob.ثم اتصل بـ Jenkins API عبر http مثل هذا:

http://[jenkins_server]/api/xml?depth=2&xpath=/hudson/job[name='YourPollingJob']/build[id='BUILD_ID']/changeSet

أين BUILD_ID هو معرف البناء الفعلي للمهمة التي قمت بتشغيلها للتو (التنسيق المعتاد هو شيء من هذا القبيل 2012-02-21_16-15-49).افحص النتيجة.لاحظ أن جميع المعلومات المتعلقة بالملفات التي تغيرت منذ الإصدار السابق موجودة - ما عليك سوى تحليلها.

والآن يمكنك القيام بما يلي: YourPollingJob سوف نسميها وظيفة أخرى - دعنا نسميها CopyJob - وتمرير إليها BUILD_ID كمعلمة (عبر البرنامج المساعد الزناد المعلمة;تأكد من الاتصال CopyJob كخطوة ما بعد البناء، وليس كخطوة بناء). CopyJob سيقوم بعد ذلك بالاستعلام عن Jenkins عبر http (كما هو مذكور أعلاه، أفضل طريقة هي القيام بذلك عبر wget)، وتحليل النتائج، والقيام بالنسخ.

يمكنك القيام بكل ذلك في مهمة واحدة، ولكنها أكثر تعقيدًا بعض الشيء ويصعب تصحيحها.

ومن الحكمة أيضًا نسخ المستودع بالكامل مرة واحدة يوميًا (ليلاً).

نصائح أخرى

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

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