في الآونة الأخيرة ، صادفت وحشًا غير مشهور في عالم DevOps ، خطوط أنابيب Azure DevOps. شعرت على الفور بعدم وجود أي تعليمات أو مقالات واضحة حول هذا الموضوع ، لا أعرف ما هو متصل به ، لكن من الواضح أن لدى Microsoft شيء تعمل عليه من حيث تعميم الأداة. اليوم سنقوم ببناء خط أنابيب للاختبار الآلي داخل سحابة أزور.
لذلك ، المهمة:
هناك برنامج يبني بنفس Azure DevOps ، ويتم تجميعه من مشروع على WIX. إذا كان هناك اهتمام ، سأكتب عن هذه الأداة. في الواقع ، هذه طريقة أكثر آلية لإنشاء أدوات تثبيت Windows ، والتي تحل محل InstallShield القياسي. لذلك ، يقوم برنامجنا بنجاح بإنشاء وتوليد قطعة أثرية ، ملف setup.exe معين ، يضع التطبيق على نظام Windows. من الضروري وضع هذا التطبيق في جهاز افتراضي مشابه للمنتج ، ونسخ الاختبارات الآلية التي أعدها فريق الاختبار هناك ، وتشغيلها وجمع النتائج من أجل اعتبار الفرع جيدًا أو سيئًا قبل الدمج. كل شيء مثل في GitLab ،
إلا من خلال ث ....كبيئة افتراضية حيث سنجري اختباراتنا ، من الواضح أننا نستخدم Azure DevTest Labs ، كيان في اشتراكات Azure ، والذي تم إنشاؤه لتحريف كل أنواع هراء الاختبار فيه مقابل أموال مقبولة.
1. سحابة تكامل الجانب
أولاً ، نحتاج إلى دمج DevTest Labs الخاصة بنا مع Azure DevOps ، والتي نحتاج إلى بعض مدير الخدمة لها ، بشكل أساسي حساب خدمة يتيح لك الانتقال إلى خطوط الأنابيب في السحابة وإنشاء / حذف الموارد هناك لأنفسنا.
انتقل إلى الاشتراك وابحث عن خدمة Azure Active Directory

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

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

بعد ذلك ، في التحكم في الوصول ، انقر فوق تعيين الأدوار وابحث عن هذا الحساب في البحث بالاسم الذي أنشأته للتو. نحن نعطي دور المساهم ، هذا يكفي.

بعد ذلك ، ارجع إلى مدير خدمتنا في Azure AD وافتح خصائصه. في وقت لاحق ، سوف نحتاج إلى جميع بطاقات الهوية الموجودة ، ونحن نوفرها.
هذا هو المكان الذي تنتهي فيه إعدادات البوابة الخاصة بنا ونذهب إلى Azure DevOps.
2. التكامل على جانب Azure DevOps
بادئ ذي بدء ، نذهب إلى إعدادات المشروع وتحديد اتصالات الخدمة. إنشاء عنصر جديد من نوع Azure Resource Manager.

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

3. إنشاء خط أنابيب
الآن ننتقل إلى الأكثر إثارة للاهتمام ، بناء خط الأنابيب نفسه. افتح قائمة Pipelines-Builds

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

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

لذلك ، انقر فوق + والدخول إلى متجر وحدة معينة ، حيث سنحتاج إلى المكونات التالية من القائمة.

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

سيتم الترحيب بنا من خلال قائمة طويلة من الصور كقاعدة ، واختيار حجم الجهاز ، كما هو الحال عند إنشاء جهاز افتراضي. في هذه المرحلة ، لن نتوقف ، سننتقل فورًا إلى العنصر الأخير من خصائص الآلة ، وهي القطع الأثرية. يمكنك استخدام أي تكوينات ضرورية لبيئتك. على سبيل المثال ، أقوم بإضافة جهاز إلى المجال وأضف حساب خدمة إليه كمسؤول بحيث يمكن لخط الأنابيب الوصول إلى هذا الجهاز بعد ذلك ضمن هذا الحساب. قد يختلف كل هذا ، ولكن بالنسبة للاختبار الناجح للرمز ، نحتاج إلى قطعة أثرية واحدة ، والتي سنناقشها بمزيد من التفصيل. لوضع أحدث إصدار من البرنامج الذي اختبرناه على أجهزتنا ، سنستخدم أداة تنزيل Azure Pipelines Artifact و Run Script. تذكر في البداية قلت أنه في مكان ما هناك بنية تسير مع مثبّت التطبيق؟ الآن نحن بحاجة إلى إخبار الجهاز الظاهري ، أو بالأحرى القالب ، حتى يذهب ويأخذ هذا المصنّع. ولم أقم فقط باستلامه ، ولكنني قمت أيضًا بتعيينه ، حيث نملأ الحقول الخاصة التي تشير إلى المشروع واسم المشروع والمفتاح السري. المفتاح السري ، كما هو الحال في جميع الأنظمة من هذا النوع ، يتم إنشاؤه في الحساب ، في هذه الحالة في Azure DevOps وتخزينه في الأسرار في مختبرك. يوجد هنا تحذير صغير ، في Secrets سنحفظه ، لكن هذا القالب ليس باردًا ولا حارًا ، وسيتم إطلاقه من مستخدم آخر كجزء من خط الأنابيب ، وبالتالي سنحتاج إلى إدخال المفتاح السري يدويًا في القالب مرة أخرى.
قطعة أثرية أخرى يجب تضمينها هي "تكوين WinRM" ، وسنحتاجها للوصول اللاحق إلى الجهاز. لا يوجد سوى معلمة واحدة ، اسم المضيف. نظرًا لأننا لا نعرفها مقدمًا ، فسنستخدم المتغير٪ COMPUTERNAME٪.

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

انسخ محتويات الصفحة إلى ملف VMtemplate.json ووضعها في جذر المشروع. لم نعد بحاجة إلى السحابة ، لقد عدنا إلى خط الأنابيب.
5. تكوين خط أنابيب
لنبدأ بالأكثر أهمية وإثارة للاهتمام ، إنشاء جهاز افتراضي ، من أجل هذا قمنا بكل عمليات الدمج هذه والقوالب. في اشتراك Azure RM ، نختار اتصال الخدمة الخاص بنا ، والذي قمنا بتكوينه في الفقرة 2. وبعد ذلك ، ستظهر بيئة المعمل المتوفرة. ثم نختار json الذي أنشأناه ونحدد بعض المتغيرات الإلزامية. يمكن تعيين اسم المستخدم وكلمة المرور للسيارة إما مباشرة أو عن طريق المتغيرات ، لكنني لست متأكداً على الإطلاق من أنها تعمل ، بغض النظر عن ما أكتب هناك ، ثم لم أستطع الوصول إلى السيارة بموجب هذه الائتمانات ، الشيء الرئيسي هو تعيين اسم السيارة بحيث يكون ذلك ممكنًا دائمًا فريدة من نوعها. لهذا ، أنا استخدم متغير بيئة البناء.

بعد ذلك ، أنشأنا نقطة مهمة أخرى. بعد إقلاع السيارة ، نحتاج أيضًا إلى معرفة معالمها بطريقة أو بأخرى ، ومن الأفضل ألا نعلمها بل إلى قائمة الرواتب. للقيام بذلك ، نقوم بعمل نص ، على سبيل المثال GetLabVMParams.ps1 ونضعه في المشروع. أخذت نص البرنامج النصي على موقع Microsoft على الويب ، لكنني قمت بتصحيحه قليلاً لبيئي ، لأنه أخذ آلات PublicIP و FQDN. ليس لدي أي منهما ، لكن هناك PrivateIP الذي ليس من السهل الحصول عليه ، لذا أضفت قطعة.
Param( [string] $labVmId) $labVmComputeId = (Get-AzureRmResource -Id $labVmId).Properties.ComputeId # Get lab VM resource group name $labVmRgName = (Get-AzureRmResource -Id $labVmComputeId).ResourceGroupName # Get the lab VM Name $labVmName = (Get-AzureRmResource -Id $labVmId).Name # Get lab VM public IP address # $labVMIpAddress = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).IpAddress # Get lab VM FQDN # $labVMFqdn = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).DnsSettings.Fqdn # Get lab VM private IP address $VmNetworkdetails= (((Get-AzureRmVM -ResourceGroupName $labVmRgName -Name $labVmName).NetworkProfile).NetworkInterfaces).Id $nicname = $VmNetworkdetails.substring($VmNetworkdetails.LastIndexOf("/")+1) $labVMnetwork = (Get-AzureRmNetworkInterface -Name $nicname -ResourceGroupName $labVmRgName)|Select-Object -ExpandProperty IPConfigurations $labVMIpAddress = $labVMnetwork.PrivateIpAddress # Set a variable labVmRgName to store the lab VM resource group name Write-Host "##vso[task.setvariable variable=labVmRgName;]$labVmRgName" # Set a variable labVMIpAddress to store the lab VM Ip address Write-Host "##vso[task.setvariable variable=labVMIpAddress;]$labVMIpAddress" # Set a variable labVMFqdn to store the lab VM FQDN name Write-Host "##vso[task.setvariable variable=labVMFqdn;]$labVMFqdn" Write-Output $labVMIpAddress Set-Item wsman:\localhost\client\trustedhosts * -Force
من بين كل ما يقرأه البرنامج النصي ، نحتاج فقط إلى labVMIpAddress المتغير. حسنًا ، هذا بالنسبة لي ، ربما تحتاج إلى شيء آخر ، ولهذا لم أحذف أي شيء وعلقت للتو على الفائض.
سأشرح أيضًا السطر الأخير من البرنامج النصي ، فهو يسمح بوصول آلة البناء الخاصة بنا إلى أي مضيف عبر WinRM.
الخطوة التالية ، نحن ندير نصنا الرائع. سيحتاج إلى نفس الاتصال بالسحابة ، متغير الإدخال بمعرف الجهاز ، والذي بحلول ذلك الوقت سيكون معروفًا بالفعل من الخطوة السابقة. كيف؟ هنا لا بد من ذكر شيء رائع مثل متغيرات الإخراج. يمكن أن تحتوي كل خطوة على قائمة بالمتغيرات التي يتم تمريرها إلى خطوات خط الأنابيب التالية. وفقًا لذلك ، بالنسبة لبرنامجنا النصي الفائق ، فإن هذا المتغير سيكون labVMIpAddress ، ولا تنس الإشارة إلى هذا.

علاوة على ذلك ، أفعل أشياء بسيطة إلى حد ما ، والتي ، بالإضافة إلى ذلك ، يمكن أن تختلف من حالة إلى أخرى. أقوم بتنفيذ برنامج نصي عن بُعد من خلال إنشاء الكرات ، والتي سأقوم بعدها بتحميل البرامج النصية الخاصة بي.
New-Item “C:\test" –type directory New-SMBShare –Name “test” –Path “C:\test” –FullAccess everyone
من اسم الملفوف ، من الواضح أننا نقوم بعد ذلك بنسخ بعض نماذج النصوص إلى الجهاز وتنفيذها في خطوة واحدة أخرى. كعنوان للجهاز البعيد ، يكون متغيرنا $ (labVMIpAddress) مفيدًا لنا. بعد ذلك ، نستخدم المهمة "التقاط قطعة أثرية من الكرات" ونسخ نتائج البرنامج النصي إلى بيئة البناء الخاصة بنا ، ثم نقوم بحفظ هذه الملفات في قطعة أثرية البناء بنفس المهمة القياسية. بعد أن لم نعد بحاجة إلى السيارة ، فإننا نقتلها في الخطوة الأخيرة. تكمن الصعوبة الرئيسية ، كما يتضح في حجم المقالة ، في الاندماج مع السحابة وإقامة اتصال مع الجهاز الظاهري الذي قمت بإنشائه ، ثم يمكنك الاستمتاع بالفعل بالقدر اللازم.
هذا هو مقالي الأول ، لذلك لا نحكم بدقة ، والتعليقات هي موضع ترحيب.