GitHub Actions を使用した App Service へのカスタム コンテナーのデプロイ
GitHub Actions を使用すると、自動化されたソフトウェア開発ワークフローを柔軟に構築できます。 Azure Web Deploy アクションを使用すれば、カスタム コンテナーを App Service にデプロイするワークフローを、GitHub Actions を使用して自動化できます。
ワークフローは、お使いのリポジトリの /.github/workflows/
パスの YAML (.yml) ファイルに定義されます。 この定義には、ワークフローに含まれるさまざまな手順とパラメーターが含まれています。
Azure App Service のコンテナー ワークフロー ファイルには、次の 3 つのセクションがあります。
Section | タスク |
---|---|
認証 | 1.サービス プリンシパルまたは発行プロファイルを取得します。 2.GitHub シークレットを作成します。 |
ビルド | 1.環境を作成します。 2.コンテナー イメージをビルドします。 |
デプロイする | 1.コンテナー イメージをデプロイする |
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成する
- GitHub アカウント。 ない場合は、無料でサインアップしてください。 Azure App Service にデプロイするには、GitHub リポジトリにコードが必要です。
- コンテナー用の作業コンテナー レジストリと Azure App Service アプリ。 この例では、Azure Container Registry を使用します。 コンテナー用の Azure App Service への完全デプロイを確実に完了してください。 通常の Web アプリと異なり、コンテナー用の Web アプリには既定のランディング ページがありません。 実際の例を得るには、コンテナーを発行します。
デプロイ資格情報を生成する
GitHub Actions 用の Azure App Services での認証で推奨される方法は、発行プロファイルを使用することです。 サービス プリンシパルまたは Open ID Connect を使用して認証することもできますが、プロセスに必要な手順が多くなります。
発行プロファイル資格情報またはサービス プリンシパルを GitHub シークレットとして保存して、Azure で認証します。 ワークフロー内のシークレットにアクセスします。
発行プロファイルは、アプリレベルの資格情報です。 発行プロファイルを GitHub シークレットとして設定します。
Azure portal で、お使いのアプリ サービスに移動します。
[概要] ページで、 [発行プロファイルの取得] オプションを選択します。
Note
2020 年 10 月の時点で、Linux Web アプリでは、
WEBSITE_WEBDEPLOY_USE_SCM
、アプリ設定WEBSITE_WEBDEPLOY_USE_SCM
をtrue
に設定する必要があります。 この要件は、今後削除される予定です。 一般的な Web アプリの設定を構成する方法については、「Azure portal で App Service アプリを構成する」を参照してください。ダウンロードしたファイルを保存します。 このファイルの内容を使用して、GitHub シークレットを作成します。
認証用の GitHub シークレットを構成する
GitHub でリポジトリを参照します。 [設定] > [セキュリティ] > [シークレットと変数] > [アクション] > [新しいリポジトリ シークレット] の順に選択します。
アプリ レベルの資格情報を使用するには、ダウンロードした発行プロファイルのファイルの内容をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_WEBAPP_PUBLISH_PROFILE
という名前を付けます。
GitHub ワークフローを構成するときに、Azure Web アプリをデプロイするアクションの中で AZURE_WEBAPP_PUBLISH_PROFILE
を使用します。 次に例を示します。
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
レジストリ用の GitHub シークレットを構成する
Docker ログイン アクションで使用するシークレットを定義します。 このドキュメントの例では、コンテナー レジストリ用に Azure Container Registry を使用しています。
Azure portal または Docker でお使いのコンテナーにアクセスし、ユーザー名とパスワードをコピーします。 Azure Container Registry のユーザー名とパスワードは、Azure portal の、お使いのレジストリの [設定]>[アクセス キー] で確認できます。
レジストリ ユーザー名のために
REGISTRY_USERNAME
という名前の新しいシークレットを定義します。レジストリ パスワードのために
REGISTRY_PASSWORD
という名前の新しいシークレットを定義します。
コンテナー イメージのビルド
次の例は、Node.js Docker イメージをビルドするワークフローの一部を示しています。 Docker Login を使用してプライベート コンテナー レジストリにログインします。 この例では Azure Container Registry を使用しますが、他のレジストリでも同じアクションを実行できます。
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
また、Docker Login を使用して複数のコンテナー レジストリに同時にサインインすることもできます。 この例には、docker.io を使用した認証用の 2 つの新しい GitHub シークレットが含まれています。 この例は、レジストリのルート レベルに Dockerfile があることを前提としています。
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- uses: azure/docker-login@v1
with:
login-server: index.docker.io
username: ${{ secrets.DOCKERIO_USERNAME }}
password: ${{ secrets.DOCKERIO_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
App Service コンテナーへのデプロイ
App Service のカスタム コンテナーにイメージをデプロイするには、azure/webapps-deploy@v2
アクションを使用します。 このアクションには 7 つのパラメーターがあります。
パラメーター | 説明 |
---|---|
app-name | (必須) App Service アプリの名前 |
publish-profile | (オプション) Web アプリ (Windows および Linux) および Web アプリ コンテナー (Linux) に適用されます。 複数コンテナー シナリオはサポートされていません。 Web 配置のシークレットでプロファイル (*.publishsettings) ファイルの内容を発行します |
slot-name | (オプション) 運用スロット以外の既存のスロットを入力します。 |
package | (オプション) Web アプリのみに適用されます。パッケージまたはフォルダーへのパス。 デプロイする *.zip、*.war、*.jar またはフォルダー |
images | (必須) Web アプリ コンテナーのみに適用されます。完全修飾コンテナー イメージ名を指定します。 たとえば、' myregistry.azurecr.io/nginx:latest ' や ' python:3.7.2-alpine/' などです。 複数コンテナー アプリの場合は、複数のコンテナー イメージ名を指定できます (複数行で区切ります)。 |
configuration-file | (オプション) Web アプリ コンテナーのみに適用されます。Docker-Compose ファイルのパス。 完全修飾パスか、既定の作業ディレクトリを基準とした相対パスのいずれかです。 複数コンテナー アプリの場合は必須です。 |
スタートアップ コマンド | (オプション) スタートアップ コマンドを入力します。 たとえば、dotnet run または dotnet filename.dll |
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
- uses: azure/webapps-deploy@v2
with:
app-name: 'myapp'
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'
次のステップ
GitHub には、一連のアクションが別々のリポジトリにあります。それぞれには、CI/CD に GitHub を使用し、ご自身のアプリを Azure にデプロイするときに役立つドキュメントとサンプルが含まれています。