Azure Pipelines を使用して Azure Stack Hub App Service にデプロイする

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

この記事では、Azure Pipelines を使用して Azure Stack Hub インスタンス内のアプリ サービスにアプリケーションをデプロイするための CI/CD パイプラインを設定する手順について説明します。

この記事では、以下を作成または検証する方法について説明します。

  • パイプラインの Azure Stack Hub サービス プリンシパル (SPN) 資格情報。
  • Azure Stack Hub インスタンス内の Web アプリ。
  • Azure Stack Hub インスタンスへのサービス接続。
  • アプリにデプロイするアプリ コードを含むリポジトリ

前提条件

SPN を作成または検証する

Azure 外部のプロセスでリソースに接続したり、リソースとやり取りしたりするために、SPN によってロールベースの資格情報が提供されます。 Azure DevOps パイプラインで使用するために、共同作成者アクセス権を含む SPN と、以下の手順で指定される属性が必要になります。

Azure Stack Hub のユーザーには、SPN を作成するアクセス許可はありません。 このプリンシパルはクラウド オペレーターに要求する必要があります。 ここで提供する説明を使用することで、クラウド オペレーターである場合は SPN を作成できます。あるいは、クラウド オペレーターから提供された SPN をワークフローで使用する開発者である場合は、SPN を検証できます。

クラウド オペレーターは Azure CLI を使用して SPN を作成する必要があります。

次のコード スニペットは、Azure CLI for Azure Stack Hub で PowerShell プロンプトを使用する Windows マシン用に作成されています。 Linux コンピューターと bash で CLI を使用している場合は、行継続を削除するか、\ に置き換えます。

  1. SPN の作成に使用する次のパラメーターの値を準備します。

    パラメーター 説明
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com" リソース管理エンドポイント。
    suffix-storage-endpoint "orlando.azurestack.corp.microsoft.com" ストレージ アカウントのエンドポイント サフィックス。
    suffix-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Key Vault サービス dns サフィックス。
    endpoint-active-directory-graph-resource-id "https://graph.windows.net/" Active Directory リソース ID。
    endpoint-sql-management https://notsupported SQL サーバー管理エンドポイント。 これを https://notsupported
    プロファイル 2019-03-01-hybrid このクラウドで使用するプロファイル。
  2. Windows PowerShell や Bash などのコマンドライン ツールを開き、サインインします。 次のコマンドを使用します。

    az login
    
  3. 新しい環境の場合は register コマンドを使用し、既存の環境を使用する場合は update コマンドを使用します。 次のコマンドを使用します。

    az cloud register `
        -n "AzureStackUser" `
        --endpoint-resource-manager "https://management.<local>.<FQDN>" `
        --suffix-storage-endpoint ".<local>.<FQDN>" `
        --suffix-keyvault-dns ".vault.<local>.<FQDN>" `
        --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" `
        --endpoint-sql-management https://notsupported  `
        --profile 2019-03-01-hybrid
    
  4. SPN に使用するサブスクリプション ID とリソース グループを取得します。

  5. サブスクリプション ID とリソース グループを使用して、次のコマンドで SPN を作成します。

    az ad sp create-for-rbac --name "myApp" --role contributor `
        --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} `
        --sdk-auth
    

    クラウド オペレーターの特権がない場合は、クラウド オペレーターから提供された SPN を使用してサインインすることもできます。 クライアント ID、シークレット、およびテナント ID が必要になります。 これらの値を使用すると、次の Azure CLI コマンドを使用して、サービス接続を作成するために必要な値を含む JSON オブジェクトを作成できます。

    az login --service-principal -u "<client-id>" -p "<secret>" --tenant "<tenant-ID>" --allow-no-subscriptions
    az account show
    
  6. 結果の JSON オブジェクトを確認します。 JSON オブジェクトを使用して、サービス接続を作成します。 JSON オブジェクトには、次の属性が必要です。

    {
      "environmentName": "<Environment name>",
      "homeTenantId": "<Tenant ID for the SPN>",
      "id": "<Application ID for the SPN>",
      "isDefault": true,
      "managedByTenants": [],
      "name": "<Tenant name>",
      "state": "Enabled",
      "tenantId": "<Tenant ID for the SPN>",
      "user": {
        "name": "<User email address>",
        "type": "user"
      }
    }
    

Web アプリ ターゲットを作成する

  1. Azure Stack Hub ポータルにサインインします。
  2. [リソースの作成]>[Web + モバイル]>[Web アプリ] を選択します。
  3. サブスクリプションを選択します。
  4. [リソース グループ] を作成または選択します。
  5. アプリの [名前] を入力します。 アプリの名前は、アプリの URL に表示されます (例: yourappname.appservice.<region>.<FQDN>)
  6. アプリの [ランタイム スタック] を選択します。 ランタイムは、Web アプリに使用する予定のコードと一致する必要があります。
  7. ランタイムとアプリをホストする [オペレーティング システム] (OS) を選択します。
  8. Azure Stack Hub インスタンスの [リージョン] を選択または入力します。
  9. Azure Stack Hub のインスタンス、リージョン、およびアプリの OS に基づいてプランを選択します。
  10. [確認および作成] を選択します。
  11. Web アプリを確認します。 [作成] を選択します
  12. [リソースに移動] を選択します。
  13. アプリ名を書き留めます。 リポジトリ内のパイプラインを定義する yml ドキュメントに名前を追加します。

サービス接続を作成する

サービス接続を作成します。 SPN からの値と Azure Stack Hub サブスクリプションの名前が必要です。

  1. Azure DevOps 組織にサインインしてから、プロジェクトに移動します。

  2. [プロジェクトの設定] を選択し、[サービス接続] を選択します。

  3. [サービス接続]>[新しいサービス接続] を選択します。

  4. [Azure Resource Manager] を選択してから、[次へ] を選択します。

  5. [サービス プリンシパル (手動)] を選択します。

  6. [環境] から [Azure Stack] を選択します。

  7. フォームに入力してから、[確認して保存] を選択します。

  8. サービス接続に名前を付けます。 (yaml パイプラインを作成するには、サービス接続名が必要です)。

    Azure Stack Hub へのサービス接続の作成

リポジトリを作成してパイプラインを追加する

  1. リポジトリに Web アプリ コードを追加していない場合は、ここで追加します。

  2. リポジトリを開きます。 リポジトリを選択し、[参照] を選択します。

  3. [パイプライン] を選択します

  4. [新しいパイプライン] を選択します。

  5. [Azure Repos Git] を選択します。

  6. リポジトリを選択します。

  7. [スタート パイプライン] を選択します。

  8. リポジトリに戻り、azure-pipelines.yml を開きます。

  9. 次の yaml を追加します。

    # Starter pipeline
    # Start with a minimal pipeline that you can customize to build and deploy your code.
    # Add steps that build, run tests, deploy, and more:
    # https://aka.ms/yaml
    trigger:
    - main
    variables:
      azureSubscription: '<your connection name>'
      VSTS_ARM_REST_IGNORE_SSL_ERRORS: true
    steps:
    - task: AzureWebApp@1
      displayName: Azure Web App Deploy
      inputs:
        azureSubscription: $(azureSubscription)
        appName: <your-app-name>
        package: '$(System.DefaultWorkingDirectory)'
    

    注意

    SSL エラーを無視するには、次の例のように、ビルドまたはリリース パイプラインで VSTS_ARM_REST_IGNORE_SSL_ERRORS という名前の変数を値 true に設定します。

  10. azureSubscription の値をサービス接続の名前で更新します。

  11. appName をアプリ名で更新します。 これで、デプロイする準備が整いました。

Azure Stack Hub での Azure タスクの使用に関する注意事項

Azure Stack Hub では、次の Azure タスクが検証されます。

次のステップ