Latihan - Mempromosikan ke tahap Pengujian

Selesai

Alur rilis Anda masih memiliki dua tahap, namun kini berbeda dengan sebelumnya. Tahap ini adalah Build dan Dev. Setiap perubahan yang Anda terapkan ke GitHub memicu tahap Build untuk dijalankan. Tahap Dev hanya berjalan saat perubahan berada di cabang rilis. Di sini, Anda menambahkan tahap Uji ke alur.

Ingatlah bahwa mempromosikan build dari tahap Dev ke tahap Uji pada pukul 3 pagi setiap pagi. Untuk menyiapkan pemicu terjadwal:

  • Tentukan jadwal dalam konfigurasi build Anda.
  • Tentukan tahap Uji, yang mencakup kondisi yang menjalankan tahap hanya jika alasan build ditandai sebagai Schedule.

Untuk tujuan pembelajaran, di sini, Anda menentukan jadwal tetapi mengizinkan build langsung dari Dev ke Uji. Penyiapan ini menghindari kebutuhan untuk menunggu jadwal dipicu. Setelah Anda menyelesaikan modul ini, coba bereksperimen dengan ekspresi cron yang berbeda untuk menjalankan tahap Uji hanya pada waktu yang dijadwalkan.

Mempromosikan perubahan ke tahap Uji

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

  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'
    

    Bagian schedules menentukan satu ekspresi cron. Anda dapat menentukan lebih dari satu ekspresi dalam konfigurasi. Ekspresi memicu alur berjalan terhadap cabang rilis pada pukul 3 pagi setiap hari. Bendera always diatur ke false sehingga alur hanya berjalan saat cabang rilis berisi perubahan dari eksekusi sebelumnya.

    Tahap Test menentukan kondisi yang menjalankan tahap hanya ketika alasan build sama dengan Schedule. (Variabel bawaan Build.Reason menentukan alasan build.) Jika kondisi ini false, tahap akan dilewati, tetapi tahap sebelumnya tetap berjalan.

    Catatan

    Kondisi ini ditampilkan untuk tujuan pembelajaran. Ini dikomentari agar perubahan dapat berpindah dari Dev ke Test tanpa menunggu jadwal dipicu.

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

    Tip

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

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

  4. Setelah build selesai, untuk kembali ke halaman ringkasan, pilih tombol kembali.

    A screenshot of Azure Pipelines showing three completed stages: Build, Dev, and Test.

    Anda melihat bahwa penyebaran berhasil diselesaikan.

  5. Dari browser web, buka URL yang terkait dengan instans App Service untuk lingkungan Pengujian 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 a web browser showing the Space Game website in the Test environment.

  6. Sebagai langkah opsional, di Azure Pipelines, pilih Lingkungan. Kemudian, pilih lingkungan uji.

    Azure Pipelines merekam riwayat penyebaran Anda. Dalam riwayat, Anda dapat 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.

Andy dan Mara menambahkan tahap Uji ke alur. Mereka menunjukkan hasilnya kepada Amita.

Amita: Saya suka perubahan itu dibangun dan disebarkan sehingga saya dapat mengujinya setiap pagi. Tapi saya tidak melihat bagaimana saya dapat mengontrol ketika perubahan sampai pada Penahapan.

Mara: Ya, penyebaran melalui otomatisasi menghemat banyak waktu. Ingatlah bahwa kami hanya menyertakan pemicu terjadwal. Mari kita tambahkan persetujuan rilis untuk Anda saat kami menyiapkan lingkungan Penahapan untuk Tim. Dengan begitu, perubahan berpindah ke Penahapan hanya saat Anda siap.