Azure DevOps を使用した継続的デリバリーContinuous delivery by using Azure DevOps

Azure Pipelines を使用して、関数を Azure Functions アプリに自動的にデプロイできます。You can automatically deploy your function to an Azure Functions app by using Azure Pipelines.

パイプラインを定義するには、次の 2 つのオプションがあります。You have two options for defining your pipeline:

  • YAML ファイル:YAML ファイルは、パイプラインを記述します。YAML file: A YAML file describes the pipeline. このファイルには、ビルド ステップ セクションとリリース セクションが含まれている場合があります。The file might have a build steps section and a release section. YAML ファイルは、アプリと同じリポジトリにある必要があります。The YAML file must be in the same repo as the app.
  • テンプレート:テンプレートは、アプリをビルドまたはデプロイする既製のタスクです。Template: Templates are ready-made tasks that build or deploy your app.

YAML ベースのパイプラインYAML-based pipeline

YAML ベースのパイプラインを作成するには、まずアプリをビルドしてから、アプリをデプロイします。To create a YAML-based pipeline, first build your app, and then deploy the app.

アプリの構築Build your app

Azure Pipelines でアプリをビルドする方法は、アプリのプログラミング言語によって異なります。How you build your app in Azure Pipelines depends on your app's programming language. 言語ごとにデプロイ成果物を作成するための固有のビルド ステップがあります。Each language has specific build steps that create a deployment artifact. デプロイ成果物は、Azure で関数アプリをデプロイするために使用されます。A deployment artifact is used to deploy your function app in Azure.

.NET.NET

次のサンプルを使用して、.NET アプリをビルドする YAML ファイルを作成できます。You can use the following sample to create a YAML file to build a .NET app:

pool:
      vmImage: 'VS2017-Win2016'
steps:
- script: |
    dotnet restore
    dotnet build --configuration Release
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: '*.csproj'
    publishWebProjects: false
    modifyOutputPath: true
    zipAfterPublish: false
- task: ArchiveFiles@2
  displayName: "Archive files"
  inputs:
    rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
    name: 'drop'

JavaScriptJavaScript

次のサンプルを使用して、JavaScript アプリをビルドする YAML ファイルを作成できます。You can use the following sample to create a YAML file to build a JavaScript app:

pool:
      vmImage: ubuntu-16.04 # Use 'VS2017-Win2016' if you have Windows native +Node modules
steps:
- bash: |
    if [ -f extensions.csproj ]
    then
        dotnet build extensions.csproj --output ./bin
    fi
    npm install 
    npm run build --if-present
    npm prune --production
- task: ArchiveFiles@2
  displayName: "Archive files"
  inputs:
    rootFolderOrFile: "$(System.DefaultWorkingDirectory)"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
    name: 'drop'

PythonPython

次のサンプルを使用して、Python アプリをビルドする YAML ファイルを作成できます。You can use the following sample to create a YAML file to build a Python app. Python は Linux Azure Functions でのみサポートされています。Python is supported only for Linux Azure Functions. Python 3.7 の YAML は、次の YAML で 3.6 となっている箇所をすべて 3.7 に置き換えることで作成できます。The YAML for Python 3.7 can be built by replacing all the instances of 3.6 with 3.7 in this YAML.

pool:
      vmImage: ubuntu-16.04
steps:
- task: UsePythonVersion@0
  displayName: "Setting python version to 3.6 as required by functions"
  inputs:
    versionSpec: '3.6'
    architecture: 'x64'
- bash: |
    if [ -f extensions.csproj ]
    then
        dotnet build extensions.csproj --output ./bin
    fi
    python3.6 -m venv worker_venv
    source worker_venv/bin/activate
    pip3.6 install setuptools
    pip3.6 install -r requirements.txt
- task: ArchiveFiles@2
  displayName: "Archive files"
  inputs:
    rootFolderOrFile: "$(System.DefaultWorkingDirectory)"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
    name: 'drop'

PowerShellPowerShell

次のサンプルを使用して、PowerShell アプリをパッケージ化する YAML ファイルを作成できます。You can use the following sample to create a YAML file to package a PowerShell app. PowerShell は、Windows Azure Functions でのみサポートされています。PowerShell is supported only for Windows Azure Functions.

pool:
      vmImage: 'VS2017-Win2016'
steps:
- task: ArchiveFiles@2
  displayName: "Archive files"
  inputs:
    rootFolderOrFile: "$(System.DefaultWorkingDirectory)"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
    name: 'drop'

アプリをデプロイするDeploy your app

ホストしている OS によっては、YAML ファイルに次の YAML サンプルのいずれかを含める必要があります。You must include one of the following YAML samples in your YAML file, depending on the hosting OS.

Windows 関数アプリWindows function app

Windows 関数アプリをデプロイするには、次のスニペットを使用します。You can use the following snippet to deploy a Windows function app:

steps:
- task: AzureFunctionApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: functionApp
    appName: '<Name of function app>'
    #Uncomment the next lines to deploy to a deployment slot
    #deployToSlotOrASE: true
    #resourceGroupName: '<Resource Group Name>'
    #slotName: '<Slot name>'

Linux 関数アプリLinux function app

Linux 関数アプリをデプロイするには、次のスニペットを使用します。You can use the following snippet to deploy a Linux function app:

steps:
- task: AzureFunctionApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: functionAppLinux
    appName: '<Name of function app>'
    #Uncomment the next lines to deploy to a deployment slot
    #Note that deployment slots is not supported for Linux Dynamic SKU
    #deployToSlotOrASE: true
    #resourceGroupName: '<Resource Group Name>'
    #slotName: '<Slot name>'

テンプレート ベースのパイプラインTemplate-based pipeline

Azure DevOps ではテンプレートは、アプリをビルドまたはデプロイするタスクの定義済みのグループです。Templates in Azure DevOps are predefined groups of tasks that build or deploy an app.

アプリの構築Build your app

Azure Pipelines でアプリをビルドする方法は、アプリのプログラミング言語によって異なります。How you build your app in Azure Pipelines depends on your app's programming language. 言語ごとにデプロイ成果物を作成するための固有のビルド ステップがあります。Each language has specific build steps that create a deployment artifact. デプロイ成果物は、Azure で関数アプリを更新するために使用されます。A deployment artifact is used to update your function app in Azure.

新しいビルド パイプラインを作成するときに、組み込みのビルド テンプレートを使用するには、 [従来のエディターを使用する] を選択して、デザイナー テンプレートを使用してパイプラインを作成します。To use built-in build templates, when you create a new build pipeline, select Use the classic editor to create a pipeline by using designer templates.

Azure Pipelines の従来のエディターを選択する

コードのソースを構成したら、Azure Functions のビルド テンプレートを検索します。After you configure the source of your code, search for Azure Functions build templates. お使いのアプリの言語に一致するテンプレートを選択します。Select the template that matches your app language.

Azure Functions のビルド テンプレートを選択する

場合によっては、ビルド成果物に特定のフォルダー構造があります。In some cases, build artifacts have a specific folder structure. [Prepend root folder name to archive paths](アーカイブ パスの前にルート フォルダー名を付加する) チェック ボックスをオンにする必要がある場合があります。You might need to select the Prepend root folder name to archive paths check box.

ルート フォルダー名の前に付加するオプション

JavaScript アプリJavaScript apps

お使いの JavaScript アプリに Windows ネイティブ モジュールへの依存関係がある場合は、エージェント プールのバージョンを Hosted VS2017 に更新する必要があります。If your JavaScript app has a dependency on Windows native modules, you must update the agent pool version to Hosted VS2017.

エージェント プールのバージョンを更新する

アプリをデプロイするDeploy your app

新しいリリース パイプラインを作成するときに、Azure Functions のリリース テンプレートを検索します。When you create a new release pipeline, search for the Azure Functions release template.

Azure Functions のリリース テンプレートを検索する

リリース テンプレートでは、デプロイ スロットへのデプロイはサポートされていません。Deploying to a deployment slot is not supported in the release template.

Azure CLI を使用してビルド パイプラインを作成するCreate a build pipeline by using the Azure CLI

Azure でビルド パイプラインを作成するには、az functionapp devops-pipeline create コマンドを使用します。To create a build pipeline in Azure, use the az functionapp devops-pipeline create command. ビルド パイプラインは、リポジトリに加えられたコード変更をビルドしてリリースするために作成されます。The build pipeline is created to build and release any code changes that are made in your repo. このコマンドにより、ビルドとリリース パイプラインを定義し、それをリポジトリにコミットする新しい YAML ファイルが生成されます。The command generates a new YAML file that defines the build and release pipeline and then commits it to your repo. このコマンドの前提条件は、コードの場所によって異なります。The prerequisites for this command depend on the location of your code.

  • コードが GitHub にある場合:If your code is in GitHub:

    • サブスクリプションへの書き込みアクセス許可が必要です。You must have write permissions for your subscription.

    • Azure DevOps のプロジェクト管理者である必要があります。You must be the project administrator in Azure DevOps.

    • 十分なアクセス許可を持つ GitHub 個人用アクセス トークン (PAT) を作成するためのアクセス許可が必要です。You must have permissions to create a GitHub personal access token (PAT) that has sufficient permissions. 詳細については、GitHub PAT アクセス許可の要件に関するセクションを参照してください。For more information, see GitHub PAT permission requirements.

    • 自動生成された YAML ファイルをコミットできるように、GitHub リポジトリのマスター ブランチにコミットするためのアクセス許可が必要です。You must have permissions to commit to the master branch in your GitHub repository so you can commit the autogenerated YAML file.

  • コードが Azure Repos にある場合:If your code is in Azure Repos:

    • サブスクリプションへの書き込みアクセス許可が必要です。You must have write permissions for your subscription.

    • Azure DevOps のプロジェクト管理者である必要があります。You must be the project administrator in Azure DevOps.

次の手順Next steps