دمج Git & Jenkins لجدولة النصوص بويرشيل

إذا كان لديك ولفريقك الكثير جدًا من نصوص PowerShell متناثرة تعمل في أماكن غير معروفة، فهذا المقال موجه لك. في هذا المقال، ستتعلم كيفية إعداد خادم الأتمتة الشهير Jenkins لإدارة وتنفيذ النصوص PowerShell!

سوف تتعلم كيفية دمج التحكم بالنسخ الخاص بـ Git مع Jenkins لإعداد وجدولة النصوص PowerShell للتشغيل في جداول زمنية محددة.

انتشار نصوص PowerShell: هذا لا يعمل

كمهندس أتمتة، كانت أحد التحديات الرئيسية التي كان عليّ وعلى فريقي التغلب عليها هي انتشار النصوص PowerShell المجدولة. وجدت العديد من النصوص PowerShell يتم جدولتها وتشغيلها من أماكن مختلفة جدًا.

كان كل مهندس، أو فريق من المهندسين، لديه خادمه الخاص الذي كان يجدول فيه الأمور. كان كل نوع من النصوص يُنفَّذ على الخادم الذي يشغل تلك الخدمة.

  • A domain controller ran all of the Active Directory scripts.
  • كان هناك خادم تبادل يشغل جميع نصوص تبادل البريد الخاصة.
  • A member server ran all networking team scripts.
  • A member server ran all of the database scripts for the DBAs.
  • A member server ran all of the security team’s scripts.
  • … وهكذا

كل الشفرة التي كانت تعمل على أي من هذه الخوادم كانت محفوظة إما كملف نصي في دليل مؤقت على ذلك الخادم أو كمجلد نصي على محرك أقراص مشترك. كانت كابوسًا!

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

كان من السهل فهمًا للجميع أن يكونوا سعداء بهذا الوضع الحالي. تحسين هذا النظام لم يكن على رأس قائمة الأولويات.

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

ادخل جنكينز.

لماذا جنكينز؟

من بين جميع الخيارات التي لديك لجدولة وتشغيل سكربتات باورشيل، لماذا تختار جنكينز؟ استخدام خادم جنكينز لتشغيل سكربتات باورشيل يوفر العديد من الفوائد. فيما يلي بعض النقاط البارزة:

تحكم أفضل

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

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

جدولة سهلة

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

التحكم في الإصدارات

بإمكان القدرة على وضع نصوص PowerShell تحت نوع ما من التحكم في الإصدارات حل العديد من المشاكل المختلفة. واحدة من تلك المشاكل هي القدرة على التكامل مع أدوات مثل جينكينز. يمكن لجينكينز التكامل مع Git ومنتجات التحكم في الإصدارات الأخرى لاستخراج النسخة الأخيرة تلقائيًا.

تجميع السجلات

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

المتطلبات/المتطلبات

سيكون هذا المقال مشروحًا حول كيفية إعداد جينكينز لتشغيل نصوص PowerShell. وعلى هذا النحو، ستحتاج إلى بعض الأشياء لمتابعة العمل.

تثبيت ملحق PowerShell

لتشغيل نصوص PowerShell مع جينكينز، سيتعين عليك تثبيت ملحق PowerShell. للقيام بذلك، في الصفحة الرئيسية:

  1. انقر فوق إدارة جينكينز ثم على إدارة الإضافات.
  2. انقر فوق علامة التبويب المتاحة.
  3. على الجهة اليمنى من الشاشة، اكتب powershell في مربع التصفية. يجب أن تظهر ملحق PowerShell كما هو مبين أدناه.
Looking for the PowerShell extension

4. حدد مربع الاختيار تثبيت وانقر على تثبيت دون إعادة تشغيل.

5. تثبيت مكون الـ PowerShell سيقوم بإنشاء خيار خطوة بناء PowerShell في Windows عندما تقدم النص البرمجي PowerShell لتشغيله في وقت لاحق.

إنشاء وظيفة

لـ Jenkins يوجد مفهوم يسمى وظائف. الوظيفة هي مجموعة من التعليمات التي يمكنك توفيرها لـ Jenkins لمعرفة السكربتات التي يجب تنفيذها والجداول الزمنية التي يجب الالتزام بها، وما إلى ذلك. ستقوم بإنشاء وظيفة في هذا القسم ستقوم بتنفيذ سكربت PowerShell. لفعل ذلك، ستقوم بإعداد وظيفة ستقوم بنسخ مستودع Git إلى Jenkins.

  1. بمجرد تسجيل الدخول إلى Jenkins، انقر فوق New Item في الزاوية العلوية اليمنى.
New Item menu option

2. ستظهر لك الشاشة المبينة أدناه. حدد مشروع Freestyle. هذا النوع من الوظيفة سيسمح بأقصى قدر من المرونة.

Creating a new Jenkins project

3. قم بإعطاء الوظيفة اسم Hello World وانقر على موافق.

Using Hello World for the project name

4. الآن يجب أن تكون الآن في شاشة تكوين الوظيفة. يجب أن ترى الآن قسمًا يسمى إدارة الشيفرة المصدرية كما هو مبين أدناه. يتيح لك ذلك تحديد مستودع Git الذي سيقوم Jenkins بنسخه لتوفيره للوظيفة. لهذا العرض التوضيحي، اختر Git.

Source Code Management option

5. عند النقر على Git، يجب أن ترى الآن خيارًا يطلب منك معلومات مستودع Git الخاص بك. هذا هو مستودع Git الذي يحتوي على سكربتات PowerShell الخاصة بك.

Setting the Git repo

أدناه هو تفكيك لكل حقل:

  • عنوان URL للمستودع – العنوان الذي يشير إلى مستودع Git. في TFS، على سبيل المثال، يمكن أن يكون العنوان كما يلي: *http://SERVERNAME:8080/tfs//Messaging/_git/Dynamic Distro List*
  • بيانات الاعتماد – اسم المستخدم/كلمة المرور الذي يمتلك صلاحيات الوصول إلى المستودع. إذا لم تكن قد قمت بإعداد اعتماد بعد، يمكنك إنشاء واحد عن طريق النقر على إضافة.
  • الاسم – يمكن تركه فارغًا.
  • Refspec – يمكن تركه فارغًا.
  • محدد الفرع – يسمح لك بتحديد الفرع الذي تريد أن يستخدم هذا العمل به. بشكل افتراضي، سيتم جلب master branch، ولكن إذا كان لديك فرع اختبار آخر تريد استخدامه، يمكنك تحديده هنا.

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

إضافة خطوة بناء PowerShell لنظام Windows

ربما لديك سكريبت في جذر مستودع Git الخاص بالفرع الرئيسي يسمى Hello World.ps1. داخل هذا السكريبت، لديك سطر واحد:

Write-Host "Hello World, I'm a Jenkins build!"

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

تتيح لك Jenkins تحديد العديد من خطوات البناء لكل وظيفة. لأغراضك، تحتاج إلى إضافة خطوة بناء PowerShell لنظام Windows. للقيام بذلك، في شاشة تكوين الوظيفة:

  1. انقر فوق إضافة خطوة بناء واختر PowerShell لنظام Windows.
Windows PowerShell Build step

2. داخل صندوق Command ، نقطة المصدر النص البرمجي PowerShell الموجود في مستودع Git الخاص بك كما هو موضح أدناه. يمكنك رؤية أننا نستخدم متغير بيئة PowerShell يُدعى WORKSPACE. يُمثل هذا المتغير الدليل الحالي للعمل (مجلد الجذر لمستودع Git).

Running the Hello World.ps1 script

3. انقر الآن فوق حفظ لحفظ المهمة.

يجب أن يكون لديك الآن مهمة مُعدة لاستدعاء نص برمجي PowerShell من مستودع Git!

تنفيذ النص البرمجي PowerShell

الآن بعد أن قمت بإنشاء مهمة ، قم بتشغيلها وانظر إلى الناتج.

  1. تأكد من أنك في شاشة المهمة الرئيسية. إذا استخدمت اسم Hello World لهذه المهمة ، فسيكون عنوان URL الافتراضي http://localhost:8080/job/Hello world/.
  2. على شاشة المهمة الرئيسية ، انقر فوق بناء الآن في الجانب الأيسر كما هو موضح أدناه.
Running the build

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

4. لرؤية النتائج ، انقر فوق العلامة الخضراء المجاورة للبناء.

Inspecting build results

إذا تم كل شيء وفقًا للخطة ، فسترى شيئًا مثل ما يلي في الناتج الخاص بك:

Build log results

الجداول والمشغلات

لديك الآن وظيفة يمكن تشغيلها في أي وقت تحتاج إليه والتي تخرج رسالة Hello World. ولكن واحدة من النقاط المهمة لبيع Jenkins هي استبدال المهام المجدولة. نحن لا نرغب في الالتزام بتشغيلها يدويًا. إذا فتحت هذه الوظيفة مرة أخرى، سترى قسمًا يسمى Build Triggers.

Available build triggers

هذه هي خياراتك لتشغيل الوظيفة دون الحاجة إلى النقر على Build Now في Jenkins.

إنشاء جدول زمني

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

  1. حدد Build periodically. يسمح لك هذا المشغل بجدولة الوظائف باستخدام بنية توقيتية مشابهة لـ cron.

2. قم بتعيين تشغيل الوظيفة في الساعة 7:30 صباحًا يوم الاثنين والأربعاء والجمعة كما هو موضح أدناه.

Setting schedule to 7:30AM MWF

3. احفظ التغييرات وانتظر.

عندما يحين الموعد والوقت المحدد، سترى النص البرمجي يعمل كما هو مرغوب تحت Build History.

Build running on schedule

لديك الآن سكريبت PowerShell مجدول في Jenkins سيتم تنفيذه بشكل دوري.

قراءة إضافية

Source:
https://adamtheautomator.com/powershell-jenkins/