GitHub Actions を使用した継続的デリバリー

GitHub Actions を使用して、Azure Functions でコードを自動的にビルドして関数アプリにデプロイするワークフローを定義します。

GitHub Actions のワークフローとは、お使いの GitHub リポジトリに定義する自動化されたプロセスです。 このプロセスによって、GitHub でお使いの関数アプリ プロジェクトをビルドしてデプロイする方法が GitHub に対して指示されます。

ワークフローは、お使いのリポジトリの /.github/workflows/ パスの YAML (.yml) ファイルに定義されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。

Azure Functions のワークフロー ファイルには、次の 3 つのセクションがあります。

Section タスク
認証 発行プロファイルをダウンロードします。
GitHub シークレットを作成します。
ビルド 環境を設定します。
関数アプリを構築します。
デプロイする 関数アプリをデプロイします。

前提条件

デプロイ資格情報を生成する

GitHub Actions 用の Azure Functions での認証で推奨される方法は、発行プロファイルを使用する方法です。 サービス プリンシパルを使用して認証することもできます。 詳細については、この GitHub Actions リポジトリを参照してください。

発行プロファイルの資格情報を GitHub シークレットとして保存した後、このシークレットをワークフロー内で使用して Azure で認証します。

発行プロファイルのダウンロード

関数アプリの発行プロファイルをダウンロードするには、次を操作を行います。

  1. 関数アプリの [概要] ページを選択し、 [発行プロファイルの取得] を選択します。

    発行プロファイルのダウンロード

  2. ファイルの内容を保存してコピーします。

GitHub シークレットを追加する

  1. GitHub でご自分のリポジトリを参照し、 [設定] > [シークレット] > [Add a new secret] (新しいシークレットの追加) を選択します。

    シークレットの追加

  2. [名前]AZURE_FUNCTIONAPP_PUBLISH_PROFILE を使用し、 [値] に発行プロファイル ファイルの内容を使用して新しいシークレットを追加し、 [シークレットの追加] を選択します。

これで GitHub は、お使いの Azure の関数アプリに認証できるようになりました。

環境の作成

環境のセットアップは、言語固有の発行セットアップアクションを使用して行います。

.NET (ASP.NET を含む) は、actions/setup-dotnet アクションを使用します。
次の例は、環境を設定するワークフローの一部を示しています。

    - name: Setup DotNet 2.2.402 Environment
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 2.2.402

関数アプリのビルド

これは、言語および Azure Functions でサポートされる言語によって異なります。このセクションは、各言語の標準的なビルド手順です。

次の例は、言語固有の関数 アプリを構築するワークフローの一部を示しています。

    env:
      AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: bash
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd

関数アプリをデプロイする

Azure/functions-action アクションを使用して、コードを関数アプリにデプロイします。 このアクションには 3 つのパラメーターがあります。

パラメーター 説明
app-name (必須) お使いの関数アプリの名前です。
slot-name (省略可能) デプロイするデプロイ スロットの名前です。 このスロットは、お使いの関数アプリに既に定義されている必要があります。
publish-profile (省略可能) 発行プロファイルの GitHub シークレットの名前。

次の例では、認証に functions-action のバージョン 1 と publish profile を使用しています。

発行プロファイルを使用する .NET Linux ワークフローを設定します。

name: Deploy DotNet project to function app with a Linux environment

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: your-app-name  # set this to your application's name
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'    # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '2.2.402'              # set this to the dotnet version to use

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@main

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: bash
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd
    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

発行プロファイルを使用する .NET Windows ワークフローを設定します。

name: Deploy DotNet project to function app with a Windows environment

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: your-app-name  # set this to your application's name
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'    # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '2.2.402'              # set this to the dotnet version to use

jobs:
  build-and-deploy:
    runs-on: windows-latest
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@main

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: pwsh
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd
    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

次のステップ