التمرين - تحديث مشغل سير العمل

مكتمل

يطلب منك زميل تشغيل ميزة «AlwaysOn» لتطبيق «App Service» على موقع ويب الشركة، وبالتالي فإن تطبيق موقع الويب يعمل دائمًا.

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

أثناء العملية، ستقوم بما يلي:

  • حدّث سير العمل بحيث يتم تشغيله تلقائيًا كلما تغير الملف في مجلد deploy على الفرع الرئيسي.
  • إجراء تغيير على ملف Bicep الخاص بك.
  • تحقق من تشغيل سير العمل تلقائيًا.

تحديث المشغل ليكون مستندًا إلى الفرع

  1. في «Visual Studio Code»، افتح الملف .github/workflows/workflow.yml.

  2. في أعلى الملف، بعد السطر name: deploy-toy-website أضف التعليمات البرمجية التالية لمنع تشغيل مهام سير عمل متزامنة متعددة:

    name: deploy-toy-website
    concurrency: toy-company
    
  3. قم بإزالة المشغل اليدوي، وهو حاليًا السطر on: [workflow_dispatch].

  4. بين concurrency: وإضافة permissions: تعريف المشغل التالي:

    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
        paths:
          - 'deploy/**'
    
    permissions:
    
  5. حفظ التغييرات الخاصة بك على الملف.

  6. قم بتنفيذ التغييرات، ولكن لا تدفعها بعد. ستدفع التغييرات قريبا.

    git add .
    git commit -m 'Add branch trigger'
    

تحديث ملف Bicep الخاص بك

  1. في Visual Studio Code، افتح الملف main.bicep.

  2. في خاصية appServiceApp تعريف المواردsiteConfig، أضِف الخاصية alwaysOn بقيمة true:

    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: true
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    
  3. حفظ التغييرات الخاصة بك على الملف.

  4. في الوحدة الطرفية «Visual Studio Code»، شغّل التعليمات البرمجية التالية لتثبيت التغييرات ودفع كلا عمليتي التثبيت:

    git add .
    git commit -m 'Configure app Always On setting'
    git push
    

التحقق من فشل تشغيل سير العمل

  1. في المتصفح، حدد قائمةGitHub Actions، وحدد سير العمل.

  2. حدد آخر تشغيل لسير العمل للتأكد من تشغيل سير العمل تلقائيا. تم تشغيل سير العمل لأنك دفعت التغييرات إلى فرع مراقب بواسطة مشغل الدفع. إذا كان سير العمل لا يزال قيد التشغيل، انتظر دقيقة ثم قم بتحديث الصفحة.

    Screenshot of the GitHub interface showing the failed workflow run.

    يعرض سير العمل عملية توزيع فاشلة.

  3. لتشخيص الفشل، حدد وظيفة deploy، وحدد مهمة arm-deploy الفاشلة.

    لاحظ أنها تتضمن النص التالي:

    There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it.
    For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails
    

    تشير رسالة الخطأ هذه إلى فشل عملية التوزيع بسبب توزيع تطبيق App Service باستخدام االمستوى المجاني F1 والذي لا يدعم ميزة «مجموعات قابلية وصول عالية التوفر AlwaysOn».

    هام

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

إصلاح ملف Bicep وعرض سير العمل الذي تم تشغيله مرة أخرى

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

  1. فيVisual Studio Code، قم بإضافة خصائص جديدة لكل نوع بيئة إلى المتغير environmentConfigurationMap:

    var environmentConfigurationMap = {
      nonprod: {
        appServiceApp: {
          alwaysOn: false
        }
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServiceApp: {
          alwaysOn: true
        }
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
  2. تغيير إعداد التطبيق alwaysOn لاستخدام قيمة مخطط التكوين المناسبة لنوع البيئة:

    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. حفظ التغييرات الخاصة بك على الملف.

  4. في الوحدة الطرفية «Visual Studio Code»، قم بتثبيت التغييرات ودفعها:

    git add .
    git commit -m 'Enable App Service Always On for production environments only'
    git push
    

التحقق من نجاح تشغيل سير العمل

  1. في «GitHub»، ارجع إلى قائمة workflows. حدد سير العمل.

  2. حدد أحدث عملية تحديث. إذا كان سير العمل لا يزال قيد التشغيل، انتظر دقيقة ثم قم بتحديث الصفحة.

    يتم عرض تشغيل سير العمل.

    Screenshot of the GitHub interface showing the successful workflow run.

    يعرض سير العمل عملية توزيع ناجحة. نجح هذه المرة لأنك استخدمت ملف Bicep صالح.

تفريغ مجموعة الموارد

الآن بعد الانتهاء من التمرين، يمكنك إزالة الموارد حتى لا تتم محاسبتك عليها.

في Terminal في «Visual Studio Code»، شغِّل الأمر التالي:

az group delete --resource-group ToyWebsite --yes --no-wait

يتم حذف مجموعة الموارد في الخلفية.

Remove-AzResourceGroup -Name ToyWebsite -Force