次の方法で共有


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 フィードバック コミュニティに製品フィードバックを送信することもできます。