次の方法で共有


Azure Pipelines を使用して App Service にカスタム コンテナーをデプロイする

Azure DevOps を使うと、無料のワークフローでコードをホスト、ビルド、計画、テストできます。 これらのワークフローの 1 つとして Azure Pipelines を使用すると、任意のプラットフォームとクラウドで機能する CI/CD によってアプリケーションをデプロイできます。 パイプラインは、リポジトリのルート ディレクトリ内の YAML ファイルとして定義されます。

この記事では、Azure Pipelines を使って、Azure DevOps で Git リポジトリから App Service に Windows コンテナー アプリケーションをデプロイします。 サポート dockerfile が Azure DevOps に含まれる .NET アプリケーションが既に存在するものとします。

前提条件

サービス接続を追加する

テンプレートを作成するときに接続の選択と検証を求められるため、パイプラインを作成する前にまず、サービス接続を作成する必要があります。 サービス接続を使うと、タスク テンプレートを使うときに、任意のレジストリ (ACR または Docker Hub) に接続できます。 新しいサービス接続を追加するときに、Docker レジストリ オプションを選びます。 次のフォームでは、関連する情報と共に Docker Hub または Azure Container Registry の選択を求められます。 このチュートリアルに従って行うには、Azure Container Registry を使います。 手順に従って、新しいサービス接続を作成できます。

シークレットをセキュリティで保護する

他のユーザーにアクセスさせたくない機密情報を使っているため、変数を使って情報を保護します。 ここで説明する手順に従って変数を作成します。

変数を追加するには、パイプラインの編集ビューの右上にある [保存] ボタンの横にある [ 変数 ] ボタンをクリックします。 [ 新しい変数 ] ボタンを選択し、情報を入力します。 以下の変数を、各リソースからの適切な独自のシークレットと共に追加します。

  • vmImageName: 'windows-latest'
  • imageRepository: 'your-image-repo-name'
  • dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
  • dockerRegistryServiceConnection: 'あなたのサービス接続番号'

新しいパイプラインを作成する

.NET アプリケーションとサポート dockerfile を含むリポジトリを作成したら、次の手順のようにしてパイプラインを作成できます。

  1. 左側のメニュー バーの [パイプライン ] に移動し、[ パイプラインの作成 ] ボタンをクリックします。
  2. 次の画面で、リポジトリ オプションとして Azure Repos Git を選択し、コードがあるリポジトリを選択します
  3. [構成] タブで、[ スターター パイプライン ] オプションを選択します。
  4. 次の [校閲] タブで、[ 保存 ] ボタンをクリックします。

イメージをビルドして Azure Container Registry にプッシュする

パイプラインを作成して保存したら、コンテナーのビルド、レジストリへのプッシュ、App Service へのイメージのデプロイの手順を実行するように、パイプラインを編集する必要があります。 開始するには、[ パイプライン ] メニューに移動し、作成したパイプラインを選択し、[ 編集 ] ボタンをクリックします。

まず、イメージをビルドできるように Docker タスクを追加する必要があります。 次のコードを追加し、Dockerfile: app/Dockerfile を実際の Dockerfile へのパスに置き換えます。

trigger:
 - main

 pool:
   vmImage: 'windows-latest' 

 variables:
   vmImageName: 'windows-latest'
   imageRepository: 'your-image-repo-name'
   dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
   dockerRegistryServiceConnection: 'your-service-connection-number'

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

App Service デプロイ タスクを追加する

次に、デプロイ タスクを設定する必要があります。 これには、サブスクリプション名、アプリケーション名、コンテナー レジストリが必要です。 次のコードを貼り付けて、yaml ファイルに新しいステージを追加します。

- stage: Deploy
  displayName: Deploy to App Service
  jobs:
  - job: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    steps:

次に、右上隅にある [アシスタントの表示 ] タブに移動し、 Azure App Service デプロイ タスクを見つけて、次のフォームに入力します。

  • 接続の種類: Azure Resource Manager
  • Azure サブスクリプション: 自分のサブスクリプション名
  • App Service の種類: Web App for Containers (Windows)
  • App Service 名: 自分のアプリ名
  • レジストリまたは名前空間: 自分の Azure Container Registry 名前空間
  • イメージ: 自分の Azure Container Registry イメージ名

入力したら、[ 追加 ] ボタンをクリックして以下のタスクを追加します。

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'my-subscription-name'
    appType: 'webAppHyperVContainer'
    WebAppName: 'my-app-name'
    DockerNamespace: 'myregsitry.azurecr.io'
    DockerRepository: 'dotnetframework:12'

タスクを追加すると、パイプラインを実行できる状態になります。 [ 検証して保存 ] ボタンをクリックし、パイプラインを実行します。 このパイプラインは、Windows コンテナー イメージをビルドして Azure Container Registry にプッシュし、そのイメージを App Service にデプロイする手順を実行します。

完全な yaml ファイルの例を次に示します。

trigger:
 - main

 pool:
   vmImage: 'windows-latest' 

 variables:
   vmImageName: 'windows-latest'
   imageRepository: 'your-image-repo-name'
   dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
   dockerRegistryServiceConnection: 'your-service-connection-number'

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

- stage: Deploy
  displayName: Deploy to App Service
  jobs:
  - job: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: AzureRmWebAppDeployment@4
		  inputs:
		    ConnectionType: 'AzureRM'
		    azureSubscription: 'my-subscription-name'
		    appType: 'webAppHyperVContainer'
		    WebAppName: 'my-app-name'
		    DockerNamespace: 'myregsitry.azurecr.io'
		    DockerRepository: 'dotnetframework:12'