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

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

ワークフロー構成を定義する YAML ファイル (.yml) は、リポジトリの /.github/workflows/ パスに保持されます。 この定義には、関数の開発言語に固有であるワークフローを構成するアクションとパラメーターが含まれます。 Functions の GitHub Actions ワークフローは、言語に関係なく、次のタスクを実行します。

  1. 環境を設定します。
  2. コード プロジェクトをビルドします。
  3. パッケージを Azure の関数アプリにデプロイします。

Azure Functions アクションは、Azure の既存の関数アプリへのデプロイを処理します。

デプロイ用のワークフロー構成ファイルを手動で作成できます。 次のいずれかの方法で、一連の言語固有のテンプレートからファイルを生成することもできます。

  • Azure Portal で次の操作を行います。
  • Azure CLI の使用
  • GitHub リポジトリから

YAML ファイルを手動で作成しない場合は、記事の上部にある別の方法を選択してください。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます

  • GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。

  • GitHub リポジトリ内のソース コードを使用して Azure 上でホストされ、機能している関数アプリ。

  • Azure CLI (ローカルで開発する場合)。 Azure Cloud Shell で Azure CLI を使用することもできます。

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

GitHub Actions はデプロイ時に発行プロファイルを使用して関数アプリにアクセスするため、まず発行プロファイルを取得し、GitHub シークレットとして安全に格納する必要があります。

重要

発行プロファイルは、Azure リソースへのアクセスを許可する貴重な資格情報です。 常に安全に移動および保管するようにしてください。 GitHub では、発行プロファイルは GitHub シークレットにのみ格納する必要があります。

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

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

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

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

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

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

  1. GitHub で、お使いのリポジトリに移動します。

  2. [設定] に移動します。

  3. [シークレットと変数] > [アクション] を選択します。

  4. [New repository secret](新しいリポジトリ シークレット) を選択します。

  5. 発行プロファイル ファイルの内容に名前 AZURE_FUNCTIONAPP_PUBLISH_PROFILE と値が設定された新しいシークレットを追加します。

  6. [Add secret](シークレットの追加) を選択します。

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

テンプレートからワークフローを作成する

ワークフロー構成を手動で作成する最善の方法は、公式にサポートされているテンプレートから開始することです。

  1. Windows または Linux を選択して、正しいオペレーティング システム用のテンプレートを取得してください。

    Windows へのデプロイには runs-on: windows-latest を使用します。

  2. 次のリンクを使用して、Azure Functions アクション リポジトリから言語固有のテンプレートをコピーします。

  3. env.AZURE_FUNCTIONAPP_NAME パラメーターを、Azure の関数アプリ リソースの名前で更新します。 必要に応じて、C# の DOTNET_VERSION など、アプリで使用される言語バージョンを設定するパラメーターを更新することが必要な場合があります。

  4. この新しい YAML ファイルをリポジトリの /.github/workflows/ パスに追加します。

ポータルでワークフロー構成を作成する

ポータルを使用して GitHub Actions を有効にすると、Functions によって、アプリケーション スタックに基づいてワークフロー ファイルが作成され、GitHub リポジトリの適切なディレクトリにコミットされます。

ポータルは発行プロファイルを自動的に取得し、リポジトリの GitHub シークレットに追加します。

関数アプリの作成時

Azure portal で関数を作成するときは、[デプロイ] タブから GitHub Actions を使用してすばやく開始できます。 新しい関数アプリを作成するときに GitHub Actions ワークフローを追加するには、次の手順に従います。

  1. Azure portal で、[関数アプリを作成する] フローの [デプロイ] を選択します。

    [関数] メニューの [デプロイ] オプションのスクリーンショット。

  2. コード更新ごとに Azure portal へのコード プッシュをトリガーする場合は、[継続的デプロイ] を有効にします。

  3. GitHub 組織、リポジトリ、ブランチを入力します。

    GitHub ユーザー アカウントの詳細のスクリーンショット。

  4. 関数アプリの構成を完了します。 GitHub リポジトリの /.github/workflows/ に新しいワークフロー ファイルが追加されました。

既存の関数アプリの場合

既存の関数アプリに GitHub Actions ワークフローを追加するには、次の手順に従います。

  1. Azure portal で関数アプリに移動して、[デプロイ センター] を選びます。

  2. [ソース][GitHub] を選びます。 既定のメッセージ "GitHub Actions を使用してビルドしています" が表示されない場合は、[プロバイダーの変更][GitHub Actions][OK] の順に選びます。

  3. GitHub のアクセスをまだ認めていない場合は、[承認] を選びます。 GitHub の資格情報を入力して、[サインイン] を選びます。 別の GitHub アカウントを承認するには、[アカウントの変更] を選び、別のアカウントでサインインします。

  4. お使いの GitHub の [組織][リポジトリ][ブランチ] を選びます。 GitHub Actions を使ってデプロイするには、このリポジトリへの書き込みアクセス権が必要です。

  5. [認証設定] で、GitHub Actions の認証を [ユーザー割り当て ID] で行うか、[基本認証] の資格情報を使うかを選びます。 基本認証の場合は、現在の資格情報が使われます。

  6. [ファイルのプレビュー] を選んで、GitHub リポジトリの github/workflows/ に追加されるワークフロー ファイルを確認します。

  7. [保存] を選択して、ワークフロー ファイルをリポジトリに追加します。

ワークフロー構成をリポジトリに追加する

az functionapp deployment github-actions add コマンドを使用して、関数アプリ用の適切なテンプレートからワークフロー構成ファイルを生成できます。 新しい YAML ファイルは、指定した GitHub リポジトリの適切な場所 (/.github/workflows/) に格納され、アプリの発行プロファイル ファイルは同じリポジトリ内の GitHub シークレットに追加されます。

  1. この az functionapp コマンドを実行し、値 githubUser/githubRepoMyResourceGroupMyFunctionapp を置き換えます。

    az functionapp deployment github-actions add --repo "githubUser/githubRepo" -g MyResourceGroup -n MyFunctionapp --login-with-github
    

    このコマンドでは、対話的な方法を使用して、GitHub アカウントの個人用アクセス トークンを取得します。

  2. ターミナル ウィンドウに、次のようなメッセージが表示されます。

    Please navigate to https://github.com/login/device and enter the user code XXXX-XXXX to activate and retrieve your GitHub personal access token.
    
  3. 一意の XXXX-XXXX コードをコピーし、https://github.com/login/device にアクセスして、コピーしたコードを入力します。 コードを入力すると、次のようなメッセージが表示されます。

    Verified GitHub repo and branch
    Getting workflow template using runtime: java
    Filling workflow template with name: func-app-123, branch: main, version: 8, slot: production, build_path: .
    Adding publish profile to GitHub
    Fetching publish profile with secrets for the app 'func-app-123'
    Creating new workflow file: .github/workflows/master_func-app-123.yml
    
  4. GitHub リポジトリにアクセスし、[Actions] を選択 します。 ワークフローが実行されたことを確認します。

ワークフロー構成ファイルを作成する

GitHub Actions ワークフロー構成ファイルは、Azure Functions テンプレートから、また GitHub リポジトリから直接作成できます。

  1. GitHub で、お使いのリポジトリに移動します。

  2. [Actions] および [New workflow] を選択します。

  3. "functions" を検索します。

    GitHub Actions 関数テンプレートの検索のスクリーンショット。

  4. Microsoft Azure によって作成された関数アプリ ワークフローが表示されるので、コードの言語に一致するものを探して [構成] を選択します。

  5. 新しく作成した YAML ファイルで、env.AZURE_FUNCTIONAPP_NAME パラメーターを Azure の関数アプリ リソースの名前で更新します。 必要に応じて、C# の DOTNET_VERSION など、アプリで使用される言語バージョンを設定するパラメーターを更新することが必要な場合があります。

  6. 新しいワークフロー ファイルが /.github/workflows/ に保存されていることを確認し、[Commit changes...] を選択します。

ワークフロー構成を更新する

何らかの理由で既存のワークフロー構成を更新または変更する必要がある場合は、リポジトリの /.github/workflows/ の場所にアクセスし、特定の YAML ファイルを開き、必要な変更を加えてから、リポジトリに更新をコミットするだけです。

例: ワークフロー構成ファイル

次のテンプレートの例では、認証に functions-action のバージョン 1 と publish profile を使用しています。 テンプレートは、選択した言語と、関数アプリをデプロイするオペレーティング システムによって異なります。

関数アプリを Linux で実行する場合は、[Linux] を選択します。

name: Deploy DotNet project to Azure Function App

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: 'your-app-name'   # set this to your function app name on Azure
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'       # set this to the path to your function app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'                   # set this to the dotnet version to use (e.g. '2.1.x', '3.1.x', '5.0.x')

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

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v3
      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 }}

Azure Functions のアクション

Azure Functions アクション (Azure/azure-functions) は、Azure の既存の関数アプリに、またはアプリの特定のスロットにコードがどのように発行されるかを定義します。

パラメーター

このアクションでは、次のパラメーターが最もよく使用されます。

パラメーター 説明
app-name (必須) お使いの関数アプリの名前です。
slot-name (省略可能) デプロイ先の特定のデプロイ スロットの名前。 このスロットは、関数アプリに既に存在している必要があります。 指定しない場合、コードはアクティブなスロットにデプロイされます。
publish-profile (省略可能) 発行プロファイルを含む GitHub シークレットの名前。

次のパラメーターもサポートされていますが、特定の場合にのみ使用されます。

パラメーター 説明
package (省略可能) リポジトリ内のサブパスを発行元として設定します。 既定では、この値は . に設定されており、GitHub リポジトリ内のすべてのファイルとフォルダーがデプロイされることを意味します。
respect-pom-xml (省略可能) Java 関数にのみ使用されます。 アプリのデプロイ成果物を pom.xml ファイルから派生させる必要があるかどうかを指定します。 Java 関数アプリをデプロイするときは、このパラメーターを true に設定し、package. に設定する必要があります。 既定では、このパラメーターは false に設定されており、package パラメーターはアプリの成果物の場所 (./target/azure-functions/ など) を指す必要があることを意味します。
respect-funcignore (省略可能) GitHub Actions で .funcignore ファイルに従って、このファイルに定義されているファイルとフォルダーを除外するかどうかを指定します。 リポジトリに .funcignore ファイルがあり、これを使用して、テキスト エディター構成、.vscode/、Python 仮想環境 (.venv/) などのパスとファイルを除外する場合は、この値を true に設定します。 既定の設定は false です。
scm-do-build-during-deployment (省略可能) App Service デプロイ サイト (Kudu) でデプロイ前操作を実行するかどうかを指定します。 関数アプリのデプロイ サイトは https://<APP_NAME>.scm.azurewebsites.net/ で確認できます。 GitHub Actions ワークフローで依存関係を解決するのではなく、Kudu でデプロイを制御する必要がある場合は、この設定を true に変更します。 既定値は false です。 詳細については、SCM_DO_BUILD_DURING_DEPLOYMENT 設定を参照してください。
enable-oryx-build (省略可能) Oryx を使用して Kudu デプロイ サイトでプロジェクトの依存関係を解決するかどうかを指定します。 GitHub Actions ワークフローではなくリモート ビルドを使用して Oryx でプロジェクトの依存関係を解決する場合は、true に設定します。 true の場合、scm-do-build-during-deploymenttrue に設定する必要もあります。 既定値は false です。

考慮事項

Azure Functions アクションを使用するときは、次の考慮事項に注意してください。

  • GitHub Actions を使用する場合、コードは Azure Functions の zip デプロイを使用して関数アプリにデプロイされます。

  • デプロイのために Azure に接続するときに GitHub で要求される資格情報は、GitHub リポジトリにシークレットとして格納され、デプロイでは secrets.<SECRET_NAME> としてアクセスされます。

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

  • 環境を設定してビルドを実行するためのアクションは、テンプレートから生成され、言語固有です。

  • テンプレートでは env 要素を使用して、ビルドとデプロイに固有の設定を定義します。

次のステップ