GitHub Actions を使用して、自動化されたソフトウェア開発ワークフローを構築できます。 Azure Web デプロイ アクションを使用して、ワークフローを自動化し、カスタム コンテナーを Azure App Service にデプロイできます。
ワークフローは、お使いのリポジトリの /.github/workflows/ パスの YAML (.yml) ファイルに定義されます。 この定義には、ワークフローに含まれるさまざまな手順とパラメーターが含まれています。
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 アプリには既定のランディング ページがありません。 実際の例を得るには、コンテナーを発行します。
- 次のタスクを完了 する: Docker を使用してコンテナー化された Node.js アプリケーションを作成し、コンテナー イメージをレジストリにプッシュしてから、そのイメージを Azure App Service にデプロイする方法について説明します。
デプロイ資格情報を生成する
OpenID Connect を使用して、GitHub Actions 用の Azure App Services で認証することをお勧めします。 サービス プリンシパルまたは発行プロファイルで認証することもできます。
Azure で認証するには、発行プロファイルの資格情報またはサービス プリンシパルを GitHub シークレットとして保存します。 ワークフロー内のシークレットにアクセスします。
発行プロファイルは、アプリレベルの資格情報です。 発行プロファイルを GitHub シークレットとして設定します。
Azure portal で App Service に移動します。
[ 概要 ] ウィンドウで、[ 発行プロファイルの取得] を選択します。
Note
2020 年 10 月から、ユーザーは "ファイルをダウンロードする前に" Linux Web アプリのアプリ設定
WEBSITE_WEBDEPLOY_USE_SCMをtrueに設定する必要があります。 一般的な Web アプリ設定を構成する方法については、 Azure portal で App Service アプリを構成する方法に関するページを参照してください。ダウンロードしたファイルを保存します。 ファイルの内容を使用して、GitHub シークレットを作成します。
認証用の GitHub シークレットを構成する
GitHub でリポジトリを参照します。 [設定]>[セキュリティ]>[シークレットと変数]>[アクション]>[新しいリポジトリ シークレット] を選択します。
アプリ レベルの資格情報を使用するには、ダウンロードした発行プロファイルのファイルの内容をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_WEBAPP_PUBLISH_PROFILE という名前を付けます。
GitHub ワークフローを構成するときは、Azure Web App のデプロイ アクションで 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 ログインを使用してプライベート コンテナー レジストリにサインインします。 この例では 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 サインインを使用して、複数のコンテナー レジストリに同時にサインインすることもできます。 この例には、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 }}
次の例は、Windows Docker イメージをビルドするワークフローの一部を示しています。 Docker ログインを使用してプライベート コンテナー レジストリにサインインします。 この例では Azure Container Registry を使用しますが、他のレジストリでも同じアクションを実行できます。
name: Windows Container Workflow
on: [push]
jobs:
build:
runs-on: windows-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 サインインを使用して、複数のコンテナー レジストリに同時にサインインすることもできます。 この例には、docker.io を使用した認証用の 2 つの新しい GitHub シークレットが含まれています。 この例は、レジストリのルート レベルに Dockerfile があることを前提にしています。
name: Windows Container Workflow
on: [push]
jobs:
build:
runs-on: windows-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 Deploy シークレットを使用してプロファイル \*.publishsettings ファイルの内容を発行します。 |
slot-name |
(省略可能)運用スロット以外の既存のスロットを入力します。 |
package |
(省略可能)Web アプリでのみ使用: パッケージまたはフォルダーへのパス。
\*.zip、 \*.war、 \*.jar、または展開するフォルダー。 |
images |
(必須)Web アプリ コンテナーでのみ使用: 完全修飾コンテナー イメージ名を指定します。 たとえば、myregistry.azurecr.io/nginx:latest または python:3.12.12-alpine/ です。 マルチコンテナー アプリの場合、複数のコンテナー イメージ名を指定できます (複数行区切り)。 |
configuration-file |
(省略可能)Web アプリ コンテナーでのみ使用: Docker Compose ファイルのパス。 完全修飾パスか、既定の作業ディレクトリを基準とした相対パスのいずれかです。 複数コンテナー アプリの場合は必須です。 |
startup-command |
(省略可能)スタートアップ コマンドを入力します。 たとえば、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 }}'
name: Windows_Container_Workflow
on: [push]
jobs:
build:
runs-on: windows-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 にデプロイするのに役立つドキュメントと例が含まれています。