التمرين - إضافة إجراء توزيع Bicep إلى سير العمل
لقد قمت بإنشاء سير عمل أساسي، وتكوين بيئات اتصال «Azure» و «GitHub». الآن أنت مستعد لتوزيع ملف Bicep لموقع الويب الخاص بك إلى Azure من سير العمل.
في هذا التمرين، ستقوم بما يلي:
- إضافة ملف Bicep إلى المستودع الخاص بك.
- أضِف خطوة سير عمل لتنزيل التعليمات البرمجية المصدر للمستودع إلى نظام ملفات المشغّل.
- أضِف خطوة سير عمل لتسجيل الدخول إلى Azure.
- أضِف خطوة سير العمل لتوزيع ملف Bicep.
- قم بتشغيل سير العمل مرة أخرى وتحقق من توزيع موقع الويب الخاص بك بنجاح.
أضِف ملف Bicep لموقع الويب الخاص بك إلى مستودع «GitHub»
لقد أعددت بالفعل ملف Bicep لموقع الويب الخاص بك، والذي يمكنك استخدامه لنشر تكوينات مختلفة لموارد موقع الويب اعتمادا على البيئة والتكوين. هنا، ستضيف ملف Bicep الخاص بك إلى المستودع الخاص بك.
افتح مستكشفVisual Studio Code.
في جذر المستودع الخاص بك، قم بإنشاء مجلد التوزيع.
في مجلد التوزيع، قم بإنشاء ملف جديد يسمى main.bicep. تأكد من إنشاء الملف داخل مجلد deploy:
انسخ التعليمات البرمجية التالية في ملف 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 }
حفظ التغييرات الخاصة بك على الملف.
في المحطة الطرفية لـ Visual Studio Code، شغّل التعليمات البرمجية التالية لإجراء التغييرات، وتنفيذ التغييرات، ودفع التغييرات إلى المستودع الخاص بك:
git add deploy/main.bicep git commit -m 'Add Bicep file' git push
استبدل خطوات سير العمل
ثم حدِّث تعريف سير العمل لتوزيع ملف Bicep إلى Azure.
في «Visual Studio Code»، افتح الملف .github/workflows/workflow.yml.
في أعلى الملف، بين
on:
وjobs:
، أضف مقطعاpermissions:
.name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read jobs:
يسمح هذا التغيير لسير العمل باستخدام هوية حمل العمل.
إعادة تسمية المهمة
say-hello
إلىdeploy
:jobs: deploy: runs-on: ubuntu-latest steps:
لإزالة الخطوة
placeholder
من تعريف سير العمل، احذف السطرين السفليين من الملف.كخطوة أولى، ستضيف مهمة للتحقق من التعليمات البرمجية إلى نظام ملفات المشغل. أضِف خطوة جديدة أسفل الملف:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3
إشعار
إنها فكرة جيدة أن تكتب هذه التعليمات البرمجية بنفسك بدلاً من نسخها ولصقها من هذه الوحدة. انتبه إلى المسافة البادئة للملف. إذا لم تكن المسافة البادئة صحيحة، فلن يكون ملف YAML صالحًا. يُشير «Visual Studio Code» إلى الأخطاء بعرض خطوط متعرجة.
أسفل الخطوة التي قمت بإضافتها للتو، أضِف مهمة لتسجيل الدخول إلى بيئة 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 }}
أسفل الخطوة التي قمت بإضافتها للتو، أضِف خطوة أخرى لتنفيذ توزيع 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.أضف هذه المتغيرات وقيمها في أعلى ملف سير العمل الخاص بك، بين
permissions:
وjobs
:name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsite ENVIRONMENT: nonprod jobs:
حفظ التغييرات الخاصة بك على الملف. يجب أن يبدو الملف الخاص بك مثل هذا المثال:
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 }}
في الوحدة الطرفية لـ Visual Studio Code، قم بعرض التغييرات الخاصة بك، وتثبيتها في المستودع الخاص بك، وادفعها إلى Azure Repos:
git add . git commit -m 'Add Azure CLI tasks to workflow' git push
تشغيل سير العمل
أنت الآن جاهز لتشغيل سير العمل!
في المتصفح، افتح سير العمل عن طريق تحديد Actions>deploy-toy-website.
حدد Run workflow>Run workflow.
سيظهر تشغيل جديد لسير العمل في قائمة التشغيل. إذا لم يظهر، قم بتحديث صفحة المتصفح.
حدد سير العمل قيد التشغيل لعرض تفاصيل التشغيل.
انتظر حتى تنتهي عملية التشغيل.
حدد وظيفة deploy.
حدد Run azure/arm-deploy@v1. وهذا يعرض تفاصيل المهمة.
حدد Run azure/arm-deploy@v1 في تفاصيل المهمة.
لاحظ أن هذه الخطوة تستخدم متغيرات البيئة التي قمت بإضافتها إلى ملف سير العمل.
قم بفحص بقية إخراج سير العمل.
يعرض سير العمل عملية توزيع ناجحة.
تحقق من التوزيع
انتقل إلى مدخل Azure.
في القائمة اليسرى، حدد Resource groups.
حدد ToyWebsite.
في Overview، اعرض حالة التوزيع. يمكنك رؤية نجاح عملية توزيع واحدة.
حدد الارتباط 1 Succeeded للاطلاع على تفاصيل النشر.
لاحظ أن اسم التوزيع يطابق رقم تشغيل سير العمل في «GitHub Actions»، لأنك استخدمت متغير البيئة
github.run_number
لتسمية التوزيع.لمعرفة الموارد التي تم توزيعها، حدد التوزيع. لتوسيع النشر والاطلاع على مزيد من التفاصيل، حدد Deployment details. في هذه الحالة، يوجد حساب تخزين وخطة «Azure App Service» وتطبيق.