يوم جيد يا هبر !
اليوم ، أود أن أشارك إحدى الطرق في كيفية استخدام المكون الإضافي لـ Active Choices لجعل المهمة في جنكينز هي الأكثر توحيدًا وفهمًا للمستخدم.
مقدمة
اختصار مثل DevOps لم يعد شيئًا جديدًا لمجتمع تكنولوجيا المعلومات. بالنسبة لكثير من الناس ، ترتبط عبارة "make DevOps" بنوع من السحر ، عندما تنقر عليه ، يتحول رمز التطبيق تلقائيًا إلى تطبيق منشور ومختبر (كل شيء أكثر تعقيدًا بالفعل ، لكننا نستخلصه من جميع العمليات).
لذلك ، تلقينا طلبًا لإنشاء زر سحري بحيث يمكن للمسؤولين نشر التطبيق بنقرة واحدة. هناك أنواع مختلفة من تنفيذ هذه المهمة: من كتابة روبوت لأي من الرسل إلى تطوير تطبيق منفصل. ومع ذلك ، فإن الغرض من كل هذا هو نفسه - لجعل إطلاق التجميع ونشر التطبيق أكثر شفافية ومريحة.
في حالتنا ، سوف نستخدم جنكينز .
مهمة
قم بإنشاء مهمة Jenkins مريحة ستقوم بتشغيل التجميع و / أو نشر الخدمة المجهرية المحددة لإصدار معين.
إدخال البيانات
لدينا العديد من المستودعات التي تحتوي على الكود المصدري للخدمات المختلفة.
تعريف المعلمة
يجب أن تدخل المعلمات التالية في مدخلات وظيفتنا:
- عنوان URL الخاص بالمستودع الذي يحتوي على كود microservice الذي نريد تجميعه ونشره عند بدء المهمة.
- معرّف الالتزام الذي سيتم منه التجميع.
كما هي
أسهل طريقة لإنجاز المهمة هي إنشاء معلمتين من النوع String.
في هذه الحالة ، سيحتاج المستخدم إلى إدخال مسار معرف المستودع والالتزام يدويًا ، والذي ، كما ترى ، غير مناسب تمامًا.
كما يجب
الآن لنجرب نوعًا مختلفًا من المعلمات للنظر في جميع مزاياها.
قم بإنشاء المعلمة الأولى من نوع Choice Parameter ، والمعلمة الثانية - الخيارات النشطة. في المعلمة التي تحتوي على نوع الاختيار ، نضيف أسماء المستودعات حيث يتم تخزين رمز خدماتنا المصغرة يدويًا في حقل الخيارات
إذا أعجب الجمهور بهذه المقالة ، فسأشرح في المقالة التالية عملية تكوين المهام في جنكينز باستخدام الوصف من خلال الكود (التكوين كرمز) ، أي لا نحتاج إلى إدخال أسماء المستودعات يدويًا وإنشاء معلمات ، كل شيء سيحدث تلقائيًا (سيتلقى الرمز الخاص بنا قائمة مستودعات من SCM وإنشاء معلمة مع هذه القائمة).
سيتم ملء قيم المعلمة الثانية ديناميكيًا لدينا ، اعتمادًا على القيمة التي ستتخذها المعلمة الأولى (test1 أو test2) ، لأن كل مستودع به قائمة من الالتزامات الخاصة به.
تحتوي الخيارات النشطة للمعلمة المرجعية التفاعلية على الحقول التالية لملء:
- الاسم - اسم المعلمة.
- البرنامج النصي - الرمز الذي سيتم تنفيذه في كل مرة يتم تغيير قيمة المعلمة من حقل المعلمة المشار إليها (في حالتنا ، عندما نختار بين test1 و test2).
- الوصف - وصف قصير للمعلمة.
- نوع الاختيار - نوع الكائن الذي يتم إرجاعه بواسطة البرنامج النصي (في حالتنا ، سنقوم بإرجاع رمز html).
- المعلمة المشار إليها - اسم المعلمة ، عند تغيير القيمة التي سيتم بها تنفيذ التعليمات البرمجية من قسم Script.
ننتقل مباشرة إلى ملء الحقل الرئيسي في هذه المعلمة. نحن نقدم نوعين من التنفيذ للاختيار من بينها: استخدام برنامج Groovy Script أو Scriptler Script .
نختار الأول ، لأن Scriptler هو مجرد مكون إضافي يحفظ البرامج النصية التي كتبتها بالفعل ويسمح لك باستخدامها في مهام أخرى دون الحاجة إلى نسخها مرة أخرى.
رمز رائع للحصول على جميع التعيينات من المستودع المحدد:
AUTH = " Base64" GIT_URL = "url SCM (https://bitbucket.org/)" PROJECT_NAME = " , " def htmlBuild() { html = """ <html> <head> <meta charset="windows-1251"> <style type="text/css"> div.grayTable { text-align: left; border-collapse: collapse; } .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead { padding: 0px 3px; } .divTable.grayTable .divTableBody .divTableCell { font-size: 13px; } </style> </head> <body> """ def commitOptions = "" getCommitsForMicroservice(MICROSERVICE_NAME).each { commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>" } html += """<p style="display: inline-block;"> <select id="commit_id" size="1" name="value"> ${commitOptions} </select></p></div>""" html += """ </div> </div> </div> </body> </html> """ return html } def getCommitsForMicroservice(microserviceRepo) { def commits = [:] def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits" def conn = new URL(endpoint).openConnection() conn.setRequestProperty("Authorization", "Basic ${AUTH}") def response = new groovy.json.JsonSlurper().parseText(conn.content.text) response.values.each { commits.put(it.displayId, it.message) } return commits } return htmlBuild()
إذا لم تدخل في التفاصيل ، فسيتلقى هذا الرمز اسم الخدمة المجهرية (MICROSERVICE_NAME) ، ويرسل طلبًا إلى Bitbucket (طريقة getCommitsForMicroservice ) باستخدام واجهة برمجة التطبيقات الخاصة به ، ويتلقى المعرّف والرسالة الخاصة بجميع الإلتزامات لهذه الخدمة المجهرية.
كما ذكرنا سابقًا ، يجب أن يعرض هذا الرمز HTML الذي سيتم عرضه على صفحة Build with Parameters في Jenkins ، لذلك نحن نلتف جميع القيم المستلمة من Bitbucket في القائمة ونضيفها لتحديدها.
بعد الانتهاء من جميع الخطوات ، يجب أن نحصل على هذه الصفحة الجميلة Build with Parameters .
إذا قمت بتحديد test1 microservice:
إذا اخترت test2 microservice:
توافق على أن المستخدم سيكون أكثر ملاءمة للتفاعل مع مهمتك بهذه الطريقة من نسخ عنوان url في كل مرة والبحث عن معرف الالتزام اللازم.
ملاحظة: تقدم هذه المقالة مثالًا مبسطًا للغاية ، والذي قد لا يكون له تطبيق عملي في هذا النموذج ، نظرًا لأن التجميعات لها معلمات مختلفة أكثر بكثير ، ولكن الغرض من هذه المقالة هو إظهار تشغيل الأداة وعدم توفير حل عملي.
PSS كما كتبت سابقًا ، إذا كانت هذه المقالة مفيدة ، فستتمثل المقالة التالية في تكوين مهام Jenkins ديناميكيًا باستخدام الكود .