Azure Web アプリをデプロイするDeploy an Azure Web App

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017

注意

Microsoft Team Foundation Server (TFS) 2018 以前のバージョンでは、ビルドとリリースの "パイプライン" は "定義"、"実行" は "ビルド"、"サービス接続" は "サービス エンドポイント"、"ステージ" は "環境"、"ジョブ" は "フェーズ" と呼ばれます。In Microsoft Team Foundation Server (TFS) 2018 and previous versions, build and release pipelines are called definitions, runs are called builds, service connections are called service endpoints, stages are called environments, and jobs are called phases.

ビルドが成功するたびに、web アプリを Azure App Service web アプリに自動的にデプロイできます。You can automatically deploy your web app to an Azure App Service web app after every successful build.

注意

このガイダンスは、Team Foundation Server (TFS) バージョン2017.3 以降に適用されます。This guidance applies to Team Foundation Server (TFS) version 2017.3 and later.

アプリをビルドするBuild your app

最初のパイプラインの 作成 に関する記事のガイダンスに従って、このトピックを使用する前に提供されている .net Core サンプルを使用します。Follow the guidance in Create your first pipeline and use the .NET Core sample offered there before you use this topic. 完了すると、ソースを成果物としてビルド、テスト、および発行するための YAML パイプラインが作成されます。When you're done, you'll have a YAML pipeline to build, test, and publish the source as an artifact.

新しいユーザーに対して、YAML パイプラインを使用して Azure DevOps Server 2019 からデプロイするように指示することはまだありません。We aren't yet advising new users to use YAML pipelines to deploy from Azure DevOps Server 2019. 経験豊富なパイプラインユーザーであり、既に .NET Core アプリをビルドする YAML パイプラインがある場合は、以下の例を参考にしてください。If you're an experienced pipeline user and already have a YAML pipeline to build your .NET Core app, then you might find the examples below useful.

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

これで、このトピックの残りの部分を読んで、Azure Web アプリのデプロイをカスタマイズするためにユーザーが行う一般的な変更について学習することができます。Now you're ready to read through the rest of this topic to learn some of the more common changes that people make to customize an Azure Web App deployment.

Azure Web アプリのデプロイタスクAzure Web App Deploy task

Azure web アプリにデプロイする最も簡単な方法は、 Azure Web アプリの deploy () タスクを使用することです AzureWebAppThe simplest way to deploy to an Azure Web App is to use the Azure Web App Deploy (AzureWebApp) task.

Web 配置パッケージを展開する (ASP.NET)Deploy a Web Deploy package (ASP.NET)

.Zip Web 配置パッケージ (たとえば、 ASP.NET Web アプリから) を Azure Web アプリにデプロイするには、azure-pipelines ファイルに次のスニペットを追加します。To deploy a .zip Web Deploy package (for example, from an ASP.NET web app) to an Azure Web App, add the following snippet to your azure-pipelines.yml file:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of web app>'
    package: $(System.DefaultWorkingDirectory)/**/*.zip    
  • azuresubscription: Azure サブスクリプション。azureSubscription: your Azure subscription.
  • appName: 既存の app service の名前。appName: the name of your existing app service.
  • package: パッケージへのファイルパスまたは app service の内容を含むフォルダー。package: the file path to the package or a folder containing your app service contents. ワイルドカードを利用できます。Wildcards are supported.

このスニペットは、YAML ファイルのビルドステップによって、エージェントのフォルダーに zip アーカイブが生成されることを前提としてい $(System.DefaultWorkingDirectory) ます。The snippet assumes that the build steps in your YAML file produce the zip archive in the $(System.DefaultWorkingDirectory) folder on your agent.

Azure サービス接続の詳細については、 次のセクションを参照してください。For information on Azure service connections, see the following section.

Java アプリのデプロイDeploy a Java app

Java アプリを構築している場合は、次のスニペットを使用して、web アーカイブ (.war) を Linux Webapp にデプロイします。If you're building a Java app, use the following snippet to deploy the web archive (.war) to a Linux Webapp:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: webAppLinux
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)/**/*.war'
  • azuresubscription: Azure サブスクリプション。azureSubscription: your Azure subscription.
  • appType: Web アプリの種類。appType: your Web App type.
  • appName: 既存の app service の名前。appName: the name of your existing app service.
  • package: パッケージへのファイルパスまたは app service の内容を含むフォルダー。package: the file path to the package or a folder containing your app service contents. ワイルドカードを利用できます。Wildcards are supported.

このスニペットは、YAML ファイルのビルドステップによって、ソースコードフォルダー構造内のいずれかのフォルダーに .war アーカイブが生成されることを前提としています。たとえば、の下 <project root>/build/libs です。The snippet assumes that the build steps in your YAML file produce the .war archive in one of the folders in your source code folder structure; for example, under <project root>/build/libs. ビルド手順で war ファイルをにコピーする場合は $(System.DefaultWorkingDirectory) 、スニペットの最後の行をに変更し $(System.DefaultWorkingDirectory)/**/*.war ます。If your build steps copy the .war file to $(System.DefaultWorkingDirectory) instead, change the last line in the snippet to $(System.DefaultWorkingDirectory)/**/*.war.

Azure サービス接続の詳細については、 次のセクションを参照してください。For information on Azure service connections, see the following section.

JavaScript Node.js アプリをデプロイするDeploy a JavaScript Node.js app

JavaScript Node.js アプリを構築している場合は、作業ディレクトリの内容全体を web アプリに発行します。If you're building a JavaScript Node.js app, you publish the entire contents of your working directory to the web app. このスニペットは、デプロイ中に、アプリケーションに含まれていない場合にも Web.config ファイルを生成し、Azure Web アプリで iisnode ハンドラーを開始します。This snippet also generates a Web.config file during deployment if the application does not have one and starts the iisnode handler on the Azure Web App:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connections>'
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)'
    customWebConfig: '-Handler iisnode -NodeStartFile server.js -appType node'
  • azuresubscription: Azure サブスクリプション。azureSubscription: your Azure subscription.
  • appName: 既存の app service の名前。appName: the name of your existing app service.
  • package: パッケージへのファイルパスまたは app service の内容を含むフォルダー。package: the file path to the package or a folder containing your app service contents. ワイルドカードを利用できます。Wildcards are supported.
  • Customwebconfig: Python、Node.js、ゴー、および Java アプリの web.config パラメーターを生成します。customWebConfig: generate web.config parameters for Python, Node.js, Go and Java apps. 標準ファイルが生成され、アプリケーションに含まれて web.config いない場合は Azure App Service に展開されます。A standard web.config file will be generated and deployed to Azure App Service if the application does not have one.

Azure サービス接続の詳細については、 次のセクションを参照してください。For information on Azure service connections, see the following section.

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

Azure サービス接続Azure service connection

すべての組み込み Azure タスクには、入力として Azure サービス接続が必要です。All the built-in Azure tasks require an Azure service connection as an input. Azure サービス接続には、Azure Pipelines または TFS から Azure に接続するための資格情報が格納されます。The Azure service connection stores the credentials to connect from Azure Pipelines or TFS to Azure.

タスクへの Azure サービス接続を指定する必要があり AzureWebApp ます。You must supply an Azure service connection to the AzureWebApp task. Azure サービス接続には、Azure Pipelines から Azure に接続するための資格情報が格納されます。The Azure service connection stores the credentials to connect from Azure Pipelines to Azure. Azure サービス接続を作成する」を参照してください。See Create an Azure service connection.

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

仮想アプリケーションへのデプロイDeploy to a virtual application

既定では、デプロイは Azure Web アプリのルートアプリケーションに対して行われます。By default, your deployment happens to the root application in the Azure Web App. タスクのプロパティを使用して、特定の仮想アプリケーションに展開でき VirtualApplication AzureRmWebAppDeployment ます。You can deploy to a specific virtual application by using the VirtualApplication property of the AzureRmWebAppDeployment task:

- task: AzureRmWebAppDeployment@4
  inputs:
    VirtualApplication: '<name of virtual application>'

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

スロットへのデプロイDeploy to a slot

複数のスロットを持つように Azure Web アプリを構成できます。You can configure the Azure Web App to have multiple slots. スロットを使用すると、アプリを安全にデプロイしてテストしてから、顧客が使用できるようにすることができます。Slots allow you to safely deploy your app and test it before making it available to your customers.

次の例は、ステージングスロットにデプロイし、運用スロットにスワップする方法を示しています。The following example shows how to deploy to a staging slot, and then swap to a production slot:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<name of web app>'
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<Azure service connection>'
    WebAppName: '<name of web app>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

複数の web アプリへのデプロイDeploy to multiple web apps

YAML ファイルで ジョブ を使用して、デプロイのパイプラインを設定できます。You can use jobs in your YAML file to set up a pipeline of deployments. ジョブを使用すると、複数の web アプリへのデプロイの順序を制御できます。By using jobs, you can control the order of deployment to multiple web apps.

jobs:

- job: buildandtest
  pool:
    vmImage: 'ubuntu-16.04'
  steps:
  # publish an artifact called drop
  - task: PublishBuildArtifacts@1
    inputs:
      artifactName: drop

  # deploy to Azure Web App staging
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<test stage Azure service connection>'
      appName: '<name of test stage web app>'

- job: deploy
  pool:
    vmImage: 'ubuntu-16.04'
  dependsOn: buildandtest
  condition: succeeded()
  steps:

  # download the artifact drop from the previous job
  - task: DownloadBuildArtifacts@0
    inputs:
      artifactName: drop

  # deploy to Azure Web App production
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<prod Azure service connection>'
      appName: '<name of prod web app>'

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

構成の変更Configuration changes

ほとんどの言語スタックでは、 アプリケーション設定接続文字列 は実行時に環境変数として設定できます。For most language stacks, app settings and connection strings can be set as environment variables at runtime. アプリ設定は、Key Vault 参照を使用して Key Vault から解決することもできます。App settings can also be resolved from Key Vault using Key Vault references.

ASP.NET と ASP.NET Core の開発者にとって、App Service でのアプリ設定の設定は Web.config でのの設定に似てい ます。デプロイする前に、web アプリターゲットに特定の構成を適用することができます。For ASP.NET and ASP.NET Core developers, setting app settings in App Service are like setting them in in Web.config. You might want to apply a specific configuration for your web app target before deploying to it. これは、パイプライン内の複数の web アプリに同じビルドを配置する場合に便利です。This is useful when you deploy the same build to multiple web apps in a pipeline. たとえば、Web.config ファイルにという名前の接続文字列が含まれている場合、 connectionString 各 web アプリにデプロイする前に値を変更できます。For example, if your Web.config file contains a connection string named connectionString, you can change its value before deploying to each web app. これを行うには、Web.config 変換を適用するか、Web.config ファイルで変数を代入します。You can do this either by applying a Web.config transformation or by substituting variables in your Web.config file.

Azure App Service の展開タスク を使用すると、ユーザーは、指定されたステージ名に基づいて、web パッケージと XML パラメーターファイル (parameters.xml) 内の構成ファイル (* .config ファイル) 内の構成設定を変更できます。Azure App Service Deploy task allows users to modify configuration settings in configuration files (*.config files) inside web packages and XML parameters files (parameters.xml), based on the stage name specified.

注意

ファイル変換と変数の置換は、Azure Pipelines で使用するための個別の ファイル変換タスク でもサポートされています。File transforms and variable substitution are also supported by the separate File Transform task for use in Azure Pipelines. ファイル変換タスクを使用して、構成ファイルとパラメーターファイルにファイル変換と変数置換を適用できます。You can use the File Transform task to apply file transformations and variable substitutions on any configuration and parameters files.

次のスニペットは、変数の代入の例を示しています。The following snippet shows an example of variable substitution:

jobs:
- job: test
  variables:
    connectionString: <test-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Test stage Azure service connection>'
      WebAppName: '<name of test stage web app>'
      enableXmlVariableSubstitution: true

- job: prod
  dependsOn: test
  variables:
    connectionString: <prod-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Prod stage Azure service connection>'
      WebAppName: '<name of prod stage web app>'
      enableXmlVariableSubstitution: true

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

条件付きで展開するDeploying conditionally

特定のビルドのみを Azure Web アプリにデプロイすることを選択できます。You can choose to deploy only certain builds to your Azure Web App.

YAML でこれを行うには、次のいずれかの方法を使用します。To do this in YAML, you can use one of these techniques:

  • 配置手順を別のジョブに分離し、そのジョブに条件を追加します。Isolate the deployment steps into a separate job, and add a condition to that job.
  • ステップに条件を追加します。Add a condition to the step.

次の例では、ステップ条件を使用して、main 分岐からのビルドのみを配置する方法を示します。The following example shows how to use step conditions to deploy only builds that originate from the main branch:

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<name of web app>'

条件の詳細については、「 条件の指定」を参照してください。To learn more about conditions, see Specify conditions.

YAML パイプラインは TFS では使用できません。YAML pipelines aren't available on TFS.

Azure Government クラウドまたは Azure Stack にデプロイするDeploy to an Azure Government cloud or to Azure Stack

適切なサービス接続を作成します。Create a suitable service connection:

配置メカニズムDeployment mechanisms

上記の例は、azure との簡単な統合を提供する組み込みの Azure Web アプリタスクに依存しています。The preceding examples rely on the built-in Azure Web App task, which provides simplified integration with Azure.

Windows エージェントを使用する場合、このタスクは Web 配置テクノロジを使用して Azure Web アプリと対話します。If you use a Windows agent, this task uses Web Deploy technology to interact with the Azure Web App. Web 配置には、ロックされたファイルの名前変更や、展開時の App_Data フォルダーからのファイルの除外など、便利な配置オプションがいくつか用意されています。Web Deploy provides several convenient deployment options, such as renaming locked files and excluding files from the App_Data folder during deployment.

Linux エージェントを使用する場合、タスクは KUDU REST apiに依存します。If you use the Linux agent, the task relies on the Kudu REST APIs.

を展開する前にチェックする価値があるのは、Azure App Service アクセス制限の一覧です。One thing worth checking before deploying is the Azure App Service access restrictions list. この一覧には、IP アドレスまたは Azure Virtual Network サブネットを含めることができます。This list can include IP addresses or Azure Virtual Network subnets. 1 つまたは複数のエントリがある場合、リストの最後にあるものは暗黙的に "すべて拒否" になります。When there are one or more entries, there is then an implicit "deny all" that exists at the end of the list. アプリに対するアクセス制限規則を変更するには、「 Azure portal でのアクセス制限規則の追加と編集」を参照してください。To modify the access restriction rules to your app, see Adding and editing access restriction rules in Azure portal. また、 ソース管理管理 (scm) サイトへのアクセスを変更または制限することもできます。You can also modify/restrict access to your source control management (scm) site.

Azure App Service 管理タスクは、配置に便利な別のタスクです。The Azure App Service Manage task is another task that's useful for deployment. このタスクを使用して、配置の前または後に web アプリを開始、停止、または再起動することができます。You can use this task to start, stop, or restart the web app before or after deployment. また、このタスクを使用して、スロットのスワップ、サイト拡張機能のインストール、または web アプリの監視を有効にすることもできます。You can also use this task to swap slots, install site extensions, or enable monitoring of the web app.

ファイル変換タスクを使用して、構成ファイルとパラメーターファイルにファイル変換と変数置換を適用できます。You can use the File Transform task to apply file transformations and variable substitutions on any configuration and parameters files.

組み込みのタスクがニーズに合わない場合は、他の方法を使用して配置をスクリプト化できます。If the built-in tasks don't meet your needs, you can use other methods to script your deployment. いくつかの例については、次の各タスクの YAML スニペットを参照してください。View the YAML snippets in each of the following tasks for some examples: