練習 - 升階至開發階段

已完成

團隊有一個計劃,並準備好著手執行其發布流程。 您的 Azure DevOps 專案已設定,且您的 Azure App Service 實例已準備好接收組建成品。

此時,請記住小組的管線只有兩個階段。 第一個階段會產生組建成品。 第二個階段會將 Space Game Web 應用程式部署到 App Service。 在這裡,您會跟著 Andy 和 Mara 修改管線。 他們將部署到對應至 開發 階段的 App Service 環境。

開發階段類似於您在Azure Pipelines模組中建立的發行管線的部署階段。 在那裡,您使用 CI 觸發程式來啟動建構過程。 在此執行同樣的作業。

從 GitHub 擷取分支

在這裡,您會從 GitHub 擷取 release 分支。 您也會簽出或切換至分支。

此分支會作為您的「發行」分支。 它包含先前課程模組中使用的 Space Game 專案。 其也包含可供開始使用的 Azure Pipelines 設定。

若要擷取並切換至分支:

  1. 在 Visual Studio Code 中,開啟整合式終端。

  2. 若要從Microsoft存放庫擷取名為 release 的分支,並切換至該分支,請執行下列 git 命令。

    git fetch upstream release
    git checkout -B release upstream/release
    

    這些命令的格式可讓您從 Microsoft GitHub 存放庫取得入門程式代碼,稱為 upstream。 不久之後,您會將此分支推送至 GitHub 存放庫,稱為 origin

  3. 在選擇性步驟中,從 Visual Studio Code 開啟 azure-pipelines.yml。 熟悉初始組態。

    此組態類似於您在使用 Azure Pipelines 模組建立發行管線 中建立的基本設定。 它只會建置應用程式的發行組態。 基於學習目的,此設定不會執行您在先前課程模組中設定的品質或安全性檢查。

    備註

    更健全的設定可能會指定參與組建流程的分支。 例如,為協助驗證程式碼品質,您可以在每次在任何分支上推送變更時執行單元測試。 您也可以將應用程式部署到執行更詳盡測試的環境。 但是,只有當您有提取要求、有候選版,或將程式碼合併到 main 時,才會進行此部署。

    如需詳細資訊,請參閱使用 Git 和 GitHub 在組建管線實作程式碼流程組建管線觸發程序

將變更升階至開發階段

在這裡,您可以修改管線組態,將組建升級至 開發 階段。

  1. 在 Visual Studio Code 中,修改 azure-pipelines.yml

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      releaseBranchName: 'release'
    
    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'
    

    此組態類似於您在上一個課程模組中建置的組態。 在那裡,您和小組建置了持續部署的概念證明。 但請注意上述程式代碼範例中醒目提示的這些差異:

    • 此組態會在檔案開頭定義變數。 這些變數在整個管線中都被使用。 他們會定義要建置的組態(Release)。 變數也會定義發行分支的名稱 (release)。
    • 在概念驗證的部署階段現在被命名為Dev
    • Dev 階段會使用條件,指示系統只在上一個階段成功且最新分支 release時,才執行階段。 此設定可確保發行功能只會部署到 開發人員 環境。
    • 部署步驟會使用 WebAppNameDev 變數來部署到與 Dev 環境相關聯的 App Service 實例。

    備註

    在實務上,您可能會從其他分支進行部署,例如 main。 您可以包含邏輯,允許從多個分支將變更升級至 Dev 階段,例如 releasemain

  2. 從整合式終端機,將 azure-pipelines.yml 新增至索引。 認可變更,並將其推送至 GitHub。

    小提示

    執行這些 Git 命令之前,請先儲存 azure-pipelines.yml

    git add azure-pipelines.yml
    git commit -m "Deploy to the Dev stage"
    git push origin release
    
  3. 在 Azure Pipelines 中,移至該組建。 在組建執行時加以追蹤。

  4. 建置完成後,若要返回摘要頁面,請選取 [上一頁] 按鈕。

    Azure Pipelines 的螢幕快照,其中顯示已完成的階段。

    您會看到部署已順利完成。

  5. 從網頁瀏覽器,移至與您 Dev 環境之 App Service 實例相關聯的 URL。

    如果您的瀏覽器索引標籤仍保持開啟,請重新整理頁面。 如果您不記得 URL,請在 Azure 入口網站的 App Service 詳細數據 頁面上找到該 URL。

    您會看到 Space Game 網站已部署至 App Service 並正在執行。

    顯示開發環境中 Space Game 網站的網頁瀏覽器螢幕快照。

  6. 在 Azure Pipelines 中,選取 [環境]作為選擇性步驟。 然後,選取 開發 環境。

    Azure Pipelines 會記錄您的部署歷程記錄。 在歷程記錄中,您可以透過環境的變更逆向追蹤到程式碼認可和工作項目。

    Azure Pipelines 的螢幕快照,其中顯示部署歷程記錄。歷程記錄會顯示一個成功的部署。