ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情報を見ることができます。
はじめに
This guide explains how to use GitHub Actions to build and deploy a Docker container to Azure App Service.
Note: GitHub ActionsワークフローがOpenID Connect(OIDC)をサポートするクラウドプロバイダからのリソースへのアクセスを必要とするなら、クラウドプロバイダから直接認証を受けるよう、ワークフローを設定できます。 そうすることで、それらの認証情報を長期間使われるシークレットとして保存することを止めることや、その他のセキュリティ上の利点が得られます。 詳しい情報については「OpenID Connectでのセキュリティ強化について」を参照してください。 and "Configuring OpenID Connect in Azure."
必要な環境
GitHub Actionsワークフローを作成する前に、まず以下のセットアップのステップを完了しておかなければなりません。
-
Azure App Serviceプランの作成
たとえば、Azure CLIを使って新しいApp Serviceのプランを作成できます。
Shell az appservice plan create \ --resource-group MY_RESOURCE_GROUP \ --name MY_APP_SERVICE_PLAN \ --is-linux
上のコマンドで、
MY_RESOURCE_GROUP
はすでに存在するAzure Resource Groupに、MY_APP_SERVICE_PLAN
はApp Serviceプランの新しい名前に置き換えてください。Azure CLIの使いからに関する詳しい情報については、Azureのドキュメンテーションを参照してください。
- 認証については「Sign in with Azure CLI」を参照してください。
- 新しいリソースグループを作成しなければならない場合は、「az group」を参照してください。
-
Webアプリケーションの作成
For example, you can use the Azure CLI to create an Azure App Service web app:
Shell az webapp create \ --name MY_WEBAPP_NAME \ --plan MY_APP_SERVICE_PLAN \ --resource-group MY_RESOURCE_GROUP \ --deployment-container-image-name nginx:latest
上のコマンドで、パラメータは自分の値で置き換えてください。
MY_WEBAPP_NAME
はWebアプリケーションの新しい名前です。 -
Azure公開プロフィールを設定して、
AZURE_WEBAPP_PUBLISH_PROFILE
シークレットを作成してください。公開されたプロフィールを使って、Azureのデプロイ資格情報を生成してください。 詳しい情報については、Azureのドキュメンテーションの「Generate deployment credentials」を参照してください。
GitHubリポジトリで、公開されたプロフィールの内容を含む
AZURE_WEBAPP_PUBLISH_PROFILE
という名前のシークレットを生成してください。 シークレットの作成に関する詳しい情報については「暗号化されたシークレット」を参照してください。 -
Set registry credentials for your web app.
Create a personal access token with the
repo
andread:packages
scopes. 詳しい情報については、「個人アクセストークンを作成する」を参照してください。Set
DOCKER_REGISTRY_SERVER_URL
tohttps://ghcr.io
,DOCKER_REGISTRY_SERVER_USERNAME
to the GitHub username or organization that owns the repository, andDOCKER_REGISTRY_SERVER_PASSWORD
to your personal access token from above. This will give your web app credentials so it can pull the container image after your workflow pushes a newly built image to the registry. You can do this with the following Azure CLI command:az webapp config appsettings set \ --name MY_WEBAPP_NAME \ --resource-group MY_RESOURCE_GROUP \ --settings DOCKER_REGISTRY_SERVER_URL=https://ghcr.io DOCKER_REGISTRY_SERVER_USERNAME=MY_REPOSITORY_OWNER DOCKER_REGISTRY_SERVER_PASSWORD=MY_PERSONAL_ACCESS_TOKEN
-
Optionally, configure a deployment environment. 環境は、
production
、staging
、development
のような一般的なターゲットを記述するために使われます。 GitHub Actionsワークフローが環境にデプロイする場合、その環境はリポジトリのメインページに表示されます。 環境を使って、ジョブが進むために承認を必要にしたり、ワークフローをトリガーできるブランチを制限したり、シークレットへのアクセスを制限したりできます。 環境の作成に関する詳しい情報については「デプロイメントのための環境の利用」を参照してください。
ワークフローの作成
必要な環境を整えたら、ワークフローの作成に進むことができます。
The following example workflow demonstrates how to build and deploy a Docker container to Azure App Service when there is a push to the main
branch.
ワークフローのenv
キー中のAZURE_WEBAPP_NAME
を、作成したWebアプリケーションの名前に設定してください。
デプロイメント環境を設定したなら、environment
の値をその環境の名前に変更してください。 環境を設定していないなら、environment
キーを削除してください。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.
name: Build and deploy a container to an Azure Web App
env:
AZURE_WEBAPP_NAME: MY_WEBAPP_NAME # set this to your application's name
on:
push:
branches:
- main
permissions:
contents: 'read'
packages: 'write'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Log in to GitHub container registry
uses: docker/login-action@v1.10.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Lowercase the repo name
run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- name: Build and push container image to registry
uses: docker/build-push-action@v2
with:
push: true
tags: ghcr.io/${{ env.REPO }}:${{ github.sha }}
file: ./Dockerfile
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
steps:
- name: Lowercase the repo name
run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@0b651ed7546ecfc75024011f76944cb9b381ef1e
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
images: 'ghcr.io/${{ env.REPO }}:${{ github.sha }}'
追加リソース
以下のリソースも役に立つでしょう。
- オリジナルのスターターワークフローについては、GitHub Actions
starter-workflows
リポジトリ中のazure-container-webapp.yml
を参照してください。 - Webアプリケーションのデプロイに使われたアクションは、公式のAzure
Azure/webapps-deploy
アクションです。 - For more examples of GitHub Action workflows that deploy to Azure, see the actions-workflow-samples repository.