التمرين - إضافة إجراء توزيع Bicep إلى سير العمل

مكتمل

لقد قمت بإنشاء سير عمل أساسي، وتكوين بيئات اتصال «Azure» و «GitHub». الآن أنت مستعد لتوزيع ملف Bicep لموقع الويب الخاص بك إلى Azure من سير العمل.

في هذا التمرين، ستقوم بما يلي:

  • إضافة ملف Bicep إلى المستودع الخاص بك.
  • أضِف خطوة سير عمل لتنزيل التعليمات البرمجية المصدر للمستودع إلى نظام ملفات المشغّل.
  • أضِف خطوة سير عمل لتسجيل الدخول إلى Azure.
  • أضِف خطوة سير العمل لتوزيع ملف Bicep.
  • قم بتشغيل سير العمل مرة أخرى وتحقق من توزيع موقع الويب الخاص بك بنجاح.

أضِف ملف Bicep لموقع الويب الخاص بك إلى مستودع «GitHub»

لقد أعددت بالفعل ملف Bicep لموقع الويب الخاص بك، والذي يمكنك استخدامه لنشر تكوينات مختلفة لموارد موقع الويب اعتمادا على البيئة والتكوين. هنا، ستضيف ملف Bicep الخاص بك إلى المستودع الخاص بك.

  1. افتح مستكشفVisual Studio Code.

  2. في جذر المستودع الخاص بك، قم بإنشاء مجلد التوزيع.

  3. في مجلد التوزيع، قم بإنشاء ملف جديد يسمى main.bicep. تأكد من إنشاء الملف داخل مجلد deploy:

    Screenshot of the Visual Studio Code Explorer, with the main dot bicep file highlighted and located in the deploy folder.

  4. انسخ التعليمات البرمجية التالية في ملف main.bicep:

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The type of environment. This must be nonprod or prod.')
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    @description('A unique suffix to add to resource names that need to be globally unique.')
    @maxLength(13)
    param resourceNameSuffix string = uniqueString(resourceGroup().id)
    
    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website-plan'
    var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}'
    
    // Define the SKUs for each component based on the environment type.
    var environmentConfigurationMap = {
      nonprod: {
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
    var toyManualsStorageAccountConnectionString = 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}'
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: environmentConfigurationMap[environmentType].appServicePlan.sku
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
    resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
      name: toyManualsStorageAccountName
      location: location
      kind: 'StorageV2'
      sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku
    }
    
  5. حفظ التغييرات الخاصة بك على الملف.

  6. في المحطة الطرفية لـ Visual Studio Code، شغّل التعليمات البرمجية التالية لإجراء التغييرات، وتنفيذ التغييرات، ودفع التغييرات إلى المستودع الخاص بك:

    git add deploy/main.bicep
    git commit -m 'Add Bicep file'
    git push
    

استبدل خطوات سير العمل

ثم حدِّث تعريف سير العمل لتوزيع ملف Bicep إلى Azure.

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

  2. في أعلى الملف، بين on: و jobs:، أضف مقطعا permissions: .

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    jobs:
    

    يسمح هذا التغيير لسير العمل باستخدام هوية حمل العمل.

  3. إعادة تسمية المهمة say-hello إلى deploy:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
    
  4. لإزالة الخطوة placeholder من تعريف سير العمل، احذف السطرين السفليين من الملف.

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

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
    

    إشعار

    إنها فكرة جيدة أن تكتب هذه التعليمات البرمجية بنفسك بدلاً من نسخها ولصقها من هذه الوحدة. انتبه إلى المسافة البادئة للملف. إذا لم تكن المسافة البادئة صحيحة، فلن يكون ملف YAML صالحًا. يُشير «Visual Studio Code» إلى الأخطاء بعرض خطوط متعرجة.

  6. أسفل الخطوة التي قمت بإضافتها للتو، أضِف مهمة لتسجيل الدخول إلى بيئة Azure. تستخدم هذه المهمة البيانات السرية التي قمت بتعريفها مسبقاً لتسجيل الدخول باستخدام هوية حمل العمل:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  7. أسفل الخطوة التي قمت بإضافتها للتو، أضِف خطوة أخرى لتنفيذ توزيع Bicep:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT }}
    

    لاحظ أن هذه المهمة تستخدم github.run_number متغير البيئة الافتراضي لتسمية التوزيع في Azure. كما يستخدم متغيرات البيئة لاسم مجموعة الموارد والمعلمة environmentType في ملف Bicep.

  8. أضف هذه المتغيرات وقيمها في أعلى ملف سير العمل الخاص بك، بين permissions: و jobs:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
    
  9. حفظ التغييرات الخاصة بك على الملف. يجب أن يبدو الملف الخاص بك مثل هذا المثال:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT }}
    
  10. في الوحدة الطرفية لـ Visual Studio Code، قم بعرض التغييرات الخاصة بك، وتثبيتها في المستودع الخاص بك، وادفعها إلى Azure Repos:

    git add .
    git commit -m 'Add Azure CLI tasks to workflow'
    git push
    

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

أنت الآن جاهز لتشغيل سير العمل!

  1. في المتصفح، افتح سير العمل عن طريق تحديد Actions>deploy-toy-website.

  2. حدد Run workflow>Run workflow.

  3. سيظهر تشغيل جديد لسير العمل في قائمة التشغيل. إذا لم يظهر، قم بتحديث صفحة المتصفح.

  4. حدد سير العمل قيد التشغيل لعرض تفاصيل التشغيل.

    انتظر حتى تنتهي عملية التشغيل.

  5. حدد وظيفة deploy.

    Screenshot of the GitHub interface showing the run page, with the deploy job highlighted.

  6. حدد Run azure/arm-deploy@v1. وهذا يعرض تفاصيل المهمة.

  7. حدد Run azure/arm-deploy@v1 في تفاصيل المهمة.

    Screenshot of the GitHub interface showing the workflow log, with the 'environment variables' highlighted.

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

  8. قم بفحص بقية إخراج سير العمل.

    يعرض سير العمل عملية توزيع ناجحة.

تحقق من التوزيع

  1. انتقل إلى مدخل Azure.

  2. في القائمة اليسرى، حدد ⁧⁩Resource groups⁦⁩.

  3. حدد ToyWebsite.

  4. في Overview، اعرض حالة التوزيع. يمكنك رؤية نجاح عملية توزيع واحدة.

    Screenshot of the Azure portal that shows the resource group with one successful deployment.

  5. حدد الارتباط 1 Succeeded للاطلاع على تفاصيل النشر.

    Screenshot of the Azure portal that shows the resource group deployment history, with the deployment highlighted.

    لاحظ أن اسم التوزيع يطابق رقم تشغيل سير العمل في «GitHub Actions»، لأنك استخدمت متغير البيئة github.run_number لتسمية التوزيع.

  6. لمعرفة الموارد التي تم توزيعها، حدد التوزيع. لتوسيع النشر والاطلاع على مزيد من التفاصيل، حدد Deployment details. في هذه الحالة، يوجد حساب تخزين وخطة «Azure App Service» وتطبيق.

    Screenshot of the Azure portal that shows the resource group deployment details, with the App Service resources highlighted.