تمرين - الترقية إلى التقسيم المرحلي
يحتوي مسار الإصدار الآن على ثلاث مراحل: الإنشاء والتطوير والاختبار. لديك أنت وفريق Tailspin مرحلة أخرى لتنفيذها: التقسيم المرحلي.
في هذا الجزء، ستقوم ب:
- إنشاء بيئة التقسيم المرحلي في Azure Pipelines، وتعيين نفسك كمعتمد.
- حدد مرحلة التقسيم المرحلي، والتي تعمل فقط بعد أن يتحقق الموافق من نتائج مرحلة الاختبار.
إنشاء بيئة التقسيم المرحلي
هنا، يمكنك إنشاء بيئة في Azure Pipelines للتقسيم المرحلي. لأغراض التعلم، يمكنك تعيين نفسك كموافق. في الممارسة العملية، يمكنك تعيين المستخدمين المطلوبين للموافقة على التغييرات قبل انتقال هذه التغييرات إلى المرحلة التالية. بالنسبة لفريق Tailspin، توافق أميتا على التغييرات بحيث يمكن ترقيتها من Test إلى Staging.
سابقاً في هذه الوحدة النمطية، قمت بتحديد environment
الإعدادات لكل من مراحل التطوير والاختبار. فيما يلي مثال لمرحلة التطوير .
- stage: 'Deploy'
displayName: 'Deploy the web application'
dependsOn: Build
jobs:
- deployment: Deploy
pool:
vmImage: 'ubuntu-20.04'
environment: dev
variables:
- group: Release
يمكنك تعريف البيئة من خلال Azure Pipelines التي تتضمن معايير محددة لإصدارك. يمكن أن تتضمن هذه المعايير المسارات المصرح لها بالنشر في البيئة. يمكنك أيضا تحديد الموافقات البشرية المطلوبة لتعزيز الإصدار من مرحلة إلى أخرى. هنا، يمكنك تحديد هذه الموافقات.
لإنشاء بيئة التقسيم المرحلي :
من Azure Pipelines، حدد Environments.
حدد New environment.
ضمن الاسم، أدخل التقسيم المرحلي.
اترك الحقول المتبقية بقيمها الافتراضية.
حدد إنشاء.
في صفحة بيئة التشغيل المرحلي، افتح القائمة المنسدلة، ثم حدد الموافقات وعمليات التحقق.
حدد الموافقات.
ضمن الموافقون، حدد إضافة مستخدمين ومجموعات، ثم حدد حسابك.
ضمن إرشادات الموافقين، أدخل الموافقة على هذا التغيير عندما يكون جاهزا للتقسيم المرحلي.
حدد إنشاء.
ترقية التغييرات إلى التقسيم المرحلي
هنا يمكنك تعديل تكوين البنية الأساسية لبرنامج ربط العمليات التجارية لنشر البنية إلى مرحلة التقسيم المرحلي .
قم بتعديل azure-pipelines.ymlفي تعليمة Visual Studio البرمجية، كما يلي:
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' schedules: - cron: '0 3 * * *' displayName: 'Deploy every day at 3 A.M.' branches: include: - release always: false stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build condition: | and ( succeeded(), eq(variables['Build.SourceBranchName'], variables['releaseBranchName']) ) jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Test' displayName: 'Deploy to the test environment' dependsOn: Dev #condition: eq(variables['Build.Reason'], 'Schedule') jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: test variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameTest)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Test jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: staging variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
تضيف هذه التعليمة البرمجية مرحلة التقسيم المرحلي . يتم نشر المرحلة في بيئة التقسيم المرحلي ، والتي تتضمن الموافقة على الإصدار.
تلميح
ربما لاحظت أن جميع مراحل التوزيع الثلاث تتبع خطوات مماثلة. يمكنك استخدام القوالب لتحديد مهام الإنشاء الشائعة مرة واحدة وإعادة استخدامها عدة مرات. لقد استخدمت هذه التقنية بالفعل في الوحدة النمطية Create a build pipeline with Azure Pipelines . لأغراض التعلم، نكرر الخطوات في كل مرحلة.
من الوحدة الطرفية المتكاملة، أضف azure-pipelines.yml إلى الفهرس. بعد ذلك، قم بتثبيت التغيير ودفعه إلى GitHub.
تلميح
قبل تشغيل أوامر Git هذه، احفظ azure-pipelines.yml.
git add azure-pipelines.yml git commit -m "Deploy to Staging" git push origin release
في Azure Pipelines، انتقل إلى البنية. تتبع البنية أثناء تشغيلها.
عندما يصل البناء إلى التقسيم المرحلي، ترى أن المسار ينتظر جميع عمليات التحقق لتمريرها. في هذه الحالة، هناك فحص واحد - الموافقة على الإصدار اليدوي.
يمكنك تكوين Azure DevOps لإرسال إشعار بالبريد الإلكتروني عندما يتطلب الإصدار الموافقة. إليك مثال:
حدد Review>Approve.
في الممارسة العملية، للتحقق من أنها تفي بمتطلباتك، يمكنك فحص التغييرات.
بعد انتهاء البناء، افتح مستعرض ويب. انتقل إلى عنوان URL المقترن بمثيل App Service لبيئة التشغيل المرحلي الخاصة بك.
إذا كان لا يزال لديك علامة تبويب المستعرض مفتوحة، فقم بتحديث الصفحة. إذا كنت لا تتذكر عنوان URL، فابحث عنه في مدخل Microsoft Azure، في صفحة تفاصيل App Service.
ترى أن موقع Space Game على الويب يتم نشره في App Service وأنه قيد التشغيل.
كخطوة اختيارية، في Azure Pipelines، حدد Environments. بعد ذلك، حدد بيئة التقسيم المرحلي .
تسجل Azure Pipelines محفوظات النشر الخاصة بك، والتي تمكنك من تتبع التغييرات في البيئة مرة أخرى إلى عمليات تثبيت التعليمات البرمجية وعناصر العمل.
يجتمع فريق Tailspin لمناقشة تقدمهم. توافق أميتا على التغييرات في مرحلة الاختبار بينما يشاهدها الآخرون.
تيم: لأخبرك الحقيقة، في البداية كنت متوترا قليلا حول البنية الأساسية لبرنامج ربط العمليات التجارية التلقائية للإصدار. لكنني أحب هذا الآن بعد أن أراه يعمل. يمكن أن يكون لكل مرحلة بيئتها الخاصة والاختبارات المقترنة والمعتمدين. تعمل البنية الأساسية لبرنامج ربط العمليات التجارية على أتمتة العديد من الأشياء التي كان علينا القيام بها يدويا. ولكن لا يزال لدينا السيطرة حيث نحتاجها.
أميتا: يمكنني أن أتخيل أننا نفعل شيئا مشابها لتعزيز التغييرات من التقسيم المرحلي إلى الإنتاج. بالحديث عن... متى نضيف بيئة إنتاج ؟
أندي: قريبا. أعتقد أننا ما زلنا بحاجة إلى ملء بعض القطع هنا أولا قبل أن نضيف ذلك.