Latihan - Mempromosikan ke Pentahapan

Selesai

Alur rilis Anda sekarang memiliki tiga tahap: Build, Dev, dan Test. Anda dan tim Tailspin memiliki satu tahap lagi untuk diimplementasikan: Pentahapan.

Di bagian ini, Anda akan:

  • Buat lingkungan penahapan di Azure Pipelines, dan tetapkan diri Anda sebagai pemberi persetujuan.
  • Tentukan tahap Pentahapan, yang hanya berjalan setelah pemberi izin memverifikasi hasil tahap Pengujian.

Membuat staging environment

Di sini, Anda membuat lingkungan di Azure Pipelines untuk Pentahapan. Untuk tujuan pembelajaran, Anda menetapkan diri Anda sebagai pemberi izin. Dalam praktiknya, Anda akan menetapkan pengguna yang diharuskan menyetujui perubahan sebelum perubahan tersebut berpindah ke tahap berikutnya. Untuk tim Tailspin, Amita menyetujui perubahan sehingga mereka dapat dipromosikan dari Uji ke Pentahapan.

Sebelumnya dalam modul ini, Anda menentukan environment pengaturan untuk tahap Dev dan Pengujian. Berikut adalah contoh untuk tahap Dev.

- stage: 'Deploy'
  displayName: 'Deploy the web application'
  dependsOn: Build
  jobs:
  - deployment: Deploy
    pool:
      vmImage: 'ubuntu-20.04'
    environment: dev
    variables:
    - group: Release

Anda dapat menentukan lingkungan melalui Azure Pipelines yang menyertakan kriteria khusus untuk rilis Anda. Kriteria ini dapat mencakup alur yang berwenang untuk disebarkan ke lingkungan. Anda juga dapat menentukan persetujuan manusia yang diperlukan untuk mempromosikan rilis dari satu tahap ke tahap berikutnya. Di sini, Anda menentukan persetujuan tersebut.

Untuk membuat staging environment:

  1. Dari Azure Pipelines, pilih Lingkungan.

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

  2. Pilih Lingkungan baru.

  3. Di bagian Nama, masukkan pentahapan.

  4. Untuk singkatnya, Anda membiarkan bidang yang tersisa pada nilai defaultnya.

  5. Pilih Buat.

  6. Pada halaman staging environment, buka menu dropdown, lalu pilih Persetujuan dan pemeriksaan.

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

  7. Pilih Persetujuan.

  8. Di bawah Pemberi Izin, pilih Tambahkan pengguna dan grup, lalu pilih akun Anda.

  9. Di bawah Instruksi untuk pemberi izin, masukkan Setujui perubahan ini saat siap untuk pentahapan.

  10. Pilih Buat.

Mempromosikan perubahan ke Pentahapan

Di sini, Anda mengubah konfigurasi alur untuk menyebarkan build ke tahap Pentahapan.

  1. Di Visual Studio Code, ubah azure-pipelines.yml seperti berikut:

    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'
    

    Kode ini menambahkan tahap Pentahapan. Tahap ini disebarkan ke lingkungan pentahapan, yang mencakup persetujuan rilis.

    Tip

    Anda mungkin memperhatikan bahwa ketiga tahap penyebaran Anda mengikuti langkah-langkah serupa. Anda dapat menggunakan templat untuk menentukan tugas build umum satu kali dan menggunakannya kembali beberapa kali. Anda sudah menggunakan teknik ini dalam modul Membuat alur build dengan Azure Pipelines. Untuk tujuan pembelajaran, kami mengulangi langkah-langkah di setiap tahap.

  2. Dari terminal terintegrasi, tambahkan azure-pipelines.yml ke indeks. Selanjutnya, terapkan perubahan dan dorong hingga GitHub.

    Tip

    Sebelum Anda menjalankan perintah Git ini, simpan azure-pipelines.yml.

    git add azure-pipelines.yml
    git commit -m "Deploy to Staging"
    git push origin release
    
  3. Di Azure Pipelines, buka build. Lacak build saat berjalan.

    Ketika build mencapai Pentahapan, Anda melihat bahwa alur menunggu semua pemeriksaan diteruskan. Dalam hal ini, ada satu pemeriksaan - persetujuan rilis manual.

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

    Anda dapat mengonfigurasi Azure DevOps untuk mengirimi Anda pemberitahuan email saat build memerlukan persetujuan. Berikut contohnya:

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

  4. Pilih Tinjau>Setujui.

    Dalam praktiknya, untuk memverifikasi bahwa mereka memenuhi kebutuhan Anda, Anda akan memeriksa perubahan.

  5. Setelah build selesai, buka browser web. Buka URL yang terkait dengan instans App Service untuk lingkungan penahapan Anda.

    Jika Anda masih membuka tab browser, refresh halaman. Jika Anda tidak ingat URL-nya, temukan di portal Azure, di halaman detail App Service.

    Anda melihat bahwa situs web Space Game disebarkan ke App Service, dan sedang berjalan.

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

  6. Sebagai langkah opsional, di Azure Pipelines, pilih Lingkungan. Selanjutnya, pilih staging environment.

    Azure Pipelines merekam riwayat penyebaran Anda, yang memungkinkan Anda melacak perubahan di lingkungan kembali ke penerapan kode dan item kerja.

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

Tim Tailspin berkumpul untuk mendiskusikan kemajuan mereka. Amita menyetujui perubahan dalam tahap Ujian sementara yang lain menonton.

Tim: Sejujurnya, awalnya aku sedikit gugup dengan alur rilis otomatis. Tapi aku benar-benar menyukai ini sekarang bahwa saya melihatnya bekerja. Setiap tahap dapat memiliki lingkungan sendiri, pengujian terkait, dan pemberi persetujuan. Alur mengotomatiskan banyak hal yang harus kami lakukan secara manual. Tapi kita masih memiliki kontrol di mana kita membutuhkannya.

Amita: Aku bisa membayangkan kita melakukan sesuatu yang mirip dengan mempromosikan perubahan dari Pentahapan ke Produksi. Berbicara tentang... kapan kita menambahkan lingkungan produksi ?

- Sebentar lagi. Saya pikir kita masih perlu mengisi beberapa bagian di sini terlebih dahulu sebelum kita menambahkan itu.