Azure DevOps を使用してCloud Servicesを発行する方法 (延長サポート)

この記事では、Azure Resource Manager (ARM) テンプレートを使用して、Azure Cloud Services (延長サポート) デプロイを作成または更新する方法に関するガイダンスを提供します。

背景

Azure Cloud Services (延長サポート) は、Azure Cloud Services用の新しい ARM ベースのデプロイ モデルです。 Cloud Services (延長サポート) には、リージョンの回復性と、Azure Service Managerを使用してデプロイされた Azure Cloud Servicesとの機能パリティを提供する主な利点があります。 また、ロールベースのアクセスと制御 (RBAC)、タグ、ポリシー、デプロイ テンプレートのサポートなど、一部の ARM 機能も提供します。

クラシック Cloud Servicesの場合、Azure DevOps 組み込みのパイプライン タスク AzureCloudPowerShellDeployment@1は、CI/CD の進行状況を簡単に管理するのに役立ちます。 ただし、Cloud Services (延長サポート) のタスクはまだ準備ができていません。

発行Cloud Servicesの主なポイント (延長サポート)

  1. ARM テンプレートのデプロイを準備するために、ストレージ アカウントの変数をいくつか定義します。
  2. VSBuild@1 - Visual Studio ビルド v1 タスクを使用して、クラウド サービス プロジェクトをビルドし、クラウド サービス パッケージ ファイルまたは構成ファイルを出力します。
  3. 組み込みの AzureFileCopy@5 - Azure ファイル コピー v5 タスク を使用して、ビルド ディレクトリを BLOB ストレージにアップロードします。
  4. アクセス キーを含むストレージ参照を使用して、AzurePowerShell@5 - Azure PowerShell v5 タスクによって SAS トークンを生成し、次のタスクで使用される変数にトークンを出力します。
  5. 前のタスクの出力と、 AzureResourceManagerTemplateDeployment@3 - ARM テンプレートデプロイ v3 タスクの値を使用します。

最近実行されたパイプラインのスクリーンショット。

Cloud Servicesを発行する手順 (延長サポート)

  1. スターター パイプラインを作成し、ストレージ アカウントにアップロードする準備をします。 これらの変数は、次の操作に役立ちます。

    • ストレージ アカウントの名前をstg_account <する>
    • <ストレージ アカウントのstg_key アクセス キー>
    • ストレージ アカウントのコンテナー名をstg_container <する>
    • stg_prefix $[format('{0:yyymMddHHmm}', pipeline.startTime)]
    • stg_url https://$(stg_account).blob.core.windows.net/$(stg_container)
    • <構成ファイルの名前をcscfg_nameする>
    • パッケージ ファイルの名前をcspkg_name <する>
    • url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
    • url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)

    変数のスクリーンショット。

  2. Visual Studio ビルド タスクを使用して、クラウド サービス プロジェクト ソリューション ファイルに基づいてタスクをビルドし、エージェントのローカル パスに出力します。 詳細については、「 MSBuild」を参照してください。

    クラウド サービス プロジェクト ソリューション ファイルの例のスクリーンショット。

    プロジェクトをビルドするための YAML ファイルを次に示します。

    # Build your project under your repository.
    # 1. Restore the NuGet dependency.
    
    - task: NuGetCommand@2
      inputs:
        command: 'restore'
        restoreSolution: '**/*.sln'
        feedsToUse: 'select'
        vstsFeed: xxx
    
    # 2. Use MS build to output the cloud service project configuration and package to the temporary location of the local agent.
    
    - task: VSBuild@1
      inputs:
        solution: '**\*.sln'
        msbuildArgs: '/t:Publish /p:DeployOnBuild=true /p:AutomatedBuild=True /p:configuration=release /p:TargetProfile=Cloud /p:PublishDir=%SYSTEM_DEFAULTWORKINGDIRECTORY%/Debug/publish'
    
    # 3. Copy the configuration and package files to the local path on the agent where any artifacts locate.
    
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'Debug/publish'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
    # 4. Copy the definition file to the local path on the agent where any artifacts locate.
    
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'Project'
        Contents: '*.csdef'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
  3. パイプライン タスク AzureFileCopy@4 - Azure ファイル コピー v4 タスク を使用して、クラウド サービスの構成、定義、パッケージ ファイルをアップロードします。 このタスクでは、Microsoft Entra IDに基づく認証がサポートされます。 認証は、サービス プリンシパルとマネージド ID を使用して行うことができます。 サービス 接続へのアクセスを許可するには、アクセス許可共同作成者とストレージ BLOB データ共同作成者を割り当てることができます。

    プロジェクト設定でサービス原則を見つけます。

    サービス接続の種類の例のスクリーンショット。

    ロールの割り当てのスクリーンショット。

    ファイル コピーの YAML バージョン:

    # Upload the cloud service via Azure File Copy
    - task: AzureFileCopy@5
      inputs:
        SourcePath: '$(Build.ArtifactsStagingDirectory) /*'        # you can set $(Build.ArtifactsStagingDirectory) as Build part for output of the MSBuild.
        azureSubscription: xxx                                     # the name of service connector
        Destination: 'AzureBlob'
        storage: $(stg_account)                                    # variable stg_account
        ContainerName: $(stg_container)                            # variable stg_container
        BlobPrefix: $(stg_prefix)                                  # variable stg prefix is $[format('{0:yyyyMMddHHmm}', pipeline.startTime)]
        AdditionalArgumentsForBlobCopy: '--recursive'              # recursively copy the files in this directory
    

    ファイルをコピーすると、コピーしたクラウド サービス パッケージがストレージに表示されます。

    ストレージにコピーされたクラウド サービス パッケージのスクリーンショット。

  4. Azure PowerShell パイプライン タスクを使用して、一時的な SAS トークンを 5 分間生成します。

    # Generate temp SAS token for 5 mins
    - task: AzurePowerShell@5                                                     # please make sure the Azure PowerShell contains the module of Az and AzureRm.
      name: GenerateSasToken
      inputs:
        azureSubscription: xxx                                                    # the name of service connector
        ScriptType: 'InlineScript'
        Inline: |
          $account_name = ${env:STG_ACCOUNT}
          $account_key = ${env:STG_KEY}
          $context = New-AzStorageContext -StorageAccountName $account_name -StorageAccountKey $account_key
          $sas = New-AzStorageAccountSASToken -Service Blob -ResourceType Service,Container,Object -Permission "rl" -ExpiryTime (Get-Date).AddMinutes(5) -Context $context
          $cspkg = ${env:URL_CSPKG} + $sas
          $cscfg = ${env:URL_CSCFG} + $sas
          Write-Host ("##vso[task.setvariable variable=cspkg]$cspkg")             # output $cspkg in PowerShell to global variable cspkg
          Write-Host ("##vso[task.setvariable variable=cscfg]$cscfg")             # output $cscfg in PowerShell to global variable cscfg
        azurePowerShellVersion: 'LatestVersion'
    
  5. ARM テンプレート パイプライン タスクを使用して、Cloud Services (延長サポート) デプロイをデプロイします。 サンプル テンプレートを取得するには、「 101-cses-multirole-rdp」を参照してください

    #Azure Resource Manager template deployment
    - task: AzureResourceManagerTemplateDeployment@3                               
      inputs:
        deploymentScope: 'Resource Group'                                           # resource group level deployment
        azureResourceManagerConnection: xxx                                         # the name of service connector
        subscriptionId: xxx                                                         # subscription id of the service connector
        action: 'Create Or Update Resource Group'
        resourceGroupName: 'rg-002'                                                                               
        location: 'Australia Central'
        templateLocation: 'Linked artifact'
        csmFile: 'Template/CSES.template.json'
        csmParametersFile: 'Template/CSES.parameter.json'
        overrideParameters: '-packageSasUri $(cspkg) -configurationSasUri $(cscfg) -cloudServiceName cses4test002 -deploymentLabel deploy$(stg_prefix)' # overwrite some parameters of template.
        deploymentMode: 'Incremental'
    
  6. デプロイが完了すると、次のタスクの結果と、タグを持つクラウド サービスが表示されます。 コードと構成を変更して、現在のデプロイを更新できます。

    タスクの結果の例のスクリーンショット。

Azure portalでは、デプロイの結果をクラウド サービス リソース グループで確認できます。

デプロイ結果の例のスクリーンショット。

デプロイ ラベルは、定義したタイムスタンプと同じである必要があります。

デプロイ ラベルの例のスクリーンショット。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。