تمرين - الترقية إلى التقسيم المرحلي

مكتمل

يحتوي مسار الإصدار الآن على ثلاث مراحل: الإنشاء والتطوير والاختبار. لديك أنت وفريق 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 التي تتضمن معايير محددة لإصدارك. يمكن أن تتضمن هذه المعايير المسارات المصرح لها بالنشر في البيئة. يمكنك أيضا تحديد الموافقات البشرية المطلوبة لتعزيز الإصدار من مرحلة إلى أخرى. هنا، يمكنك تحديد هذه الموافقات.

لإنشاء بيئة التقسيم المرحلي :

  1. من Azure Pipelines، حدد Environments.

    A screenshot of Azure Pipelines showing the location of the Environments menu option.

  2. حدد New environment.

  3. ضمن الاسم، أدخل التقسيم المرحلي.

  4. اترك الحقول المتبقية بقيمها الافتراضية.

  5. حدد إنشاء.

  6. في صفحة بيئة التشغيل المرحلي، افتح القائمة المنسدلة، ثم حدد الموافقات وعمليات التحقق.

    A screenshot of Azure Pipelines, showing the location of the approvals and checks menu item.

  7. حدد الموافقات.

  8. ضمن الموافقون، حدد إضافة مستخدمين ومجموعات، ثم حدد حسابك.

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

  10. حدد إنشاء.

ترقية التغييرات إلى التقسيم المرحلي

هنا يمكنك تعديل تكوين البنية الأساسية لبرنامج ربط العمليات التجارية لنشر البنية إلى مرحلة التقسيم المرحلي .

  1. قم بتعديل 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 . لأغراض التعلم، نكرر الخطوات في كل مرحلة.

  2. من الوحدة الطرفية المتكاملة، أضف azure-pipelines.yml إلى الفهرس. بعد ذلك، قم بتثبيت التغيير ودفعه إلى GitHub.

    تلميح

    قبل تشغيل أوامر Git هذه، احفظ azure-pipelines.yml.

    git add azure-pipelines.yml
    git commit -m "Deploy to Staging"
    git push origin release
    
  3. في Azure Pipelines، انتقل إلى البنية. تتبع البنية أثناء تشغيلها.

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

    A screenshot of Azure Pipelines showing the Staging stage, which requires manual approval.

    يمكنك تكوين Azure DevOps لإرسال إشعار بالبريد الإلكتروني عندما يتطلب الإصدار الموافقة. إليك مثال:

    A screenshot of a portion of a build approval email notification.

  4. حدد Review>Approve.

    في الممارسة العملية، للتحقق من أنها تفي بمتطلباتك، يمكنك فحص التغييرات.

  5. بعد انتهاء البناء، افتح مستعرض ويب. انتقل إلى عنوان URL المقترن بمثيل App Service لبيئة التشغيل المرحلي الخاصة بك.

    إذا كان لا يزال لديك علامة تبويب المستعرض مفتوحة، فقم بتحديث الصفحة. إذا كنت لا تتذكر عنوان URL، فابحث عنه في مدخل Microsoft Azure، في صفحة تفاصيل App Service.

    ترى أن موقع Space Game على الويب يتم نشره في App Service وأنه قيد التشغيل.

    A screenshot of web browser showing the Space Game website in the Staging environment.

  6. كخطوة اختيارية، في Azure Pipelines، حدد Environments. بعد ذلك، حدد بيئة التقسيم المرحلي .

    تسجل Azure Pipelines محفوظات النشر الخاصة بك، والتي تمكنك من تتبع التغييرات في البيئة مرة أخرى إلى عمليات تثبيت التعليمات البرمجية وعناصر العمل.

    A screenshot of Azure Pipelines showing the deployment history. The history shows one successful deployment.

يجتمع فريق Tailspin لمناقشة تقدمهم. توافق أميتا على التغييرات في مرحلة الاختبار بينما يشاهدها الآخرون.

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

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

أندي: قريبا. أعتقد أننا ما زلنا بحاجة إلى ملء بعض القطع هنا أولا قبل أن نضيف ذلك.