Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.
Introdução
Este guia explica como usar GitHub Actions para criar e implantar um contêiner Docker no Azure App Service.
Pré-requisitos
Antes de criar seu fluxo de trabalho de GitHub Actions, primeiro você precisa concluir as etapas de configuração a seguir:
-
Crie um plano do Azure App Service.
Por exemplo, você pode usar o CLI do Azure para criar um novo plano de App Service:
Shell az appservice plan create \ --resource-group MY_RESOURCE_GROUP \ --name MY_APP_SERVICE_PLAN \ --is-linux
No comando acima, substitua
MY_RESOURCE_GROUP
pelo seu Grupo de Recursos do Azure pré-existente, eMY_APP_SERVICE_PLAN
por um novo nome para o plano do App Service.Para obter mais informações, consulte a documentação do Azure usando o CLI do Azure:
- Para autenticação, consulte "Efetuar login com o CLI do Azure."
- Se você precisar criar um novo grupo de recursos, consulte "grupo az".
-
Crie um aplicativo web.
Por exemplo, você pode usar a CLI do Azure para criar um aplicativo no Azure App Service Web:
Shell az webapp create \ --name MY_WEBAPP_NAME \ --plan MY_APP_SERVICE_PLAN \ --resource-group MY_RESOURCE_GROUP \ --deployment-container-image-name nginx:latest
No comando acima, substitua os parâmetros pelos seus próprios valores, em que
MY_WEBAPP_NAME
é um novo nome para o aplicativo web. -
Configure um perfil de publicação do Azure e crie um segredo de
AZURE_WEBAPP_PUBLISH_PROFILE
.Gere suas credenciais de implantação do Azure usando um perfil de publicação. Para obter mais informações, consulte "Gerar credenciais de implantação" na documentação do Azure.
No seu repositório GitHub, crie um segredo denominado
AZURE_WEBAPP_PUBLISH_PROFILE
que contém o conteúdo do perfil de publicação. Para obter mais informações sobre a criação de segredos, consulte "Segredos criptografados". -
Defina as credenciais de registro para o seu aplicativo web.
Crie um token de acesso pessoal com os escopos
repositório
eread:packages
. Para obter mais informações, consulte "Criando um token de acesso pessoal."Defina
DOCKER_REGISTRY_SERVER_URL
comohttps://ghcr.io
,DOCKER_REGISTRY_SERVER_USERNAME
tpara o nome de usuário do GitHub ou organização proprietária do repositório eDOCKER_REGISTRY_SERVER_PASSWORD
como o seu toke nde acesso pessoal acima. Isso fornecerá credenciais do seu aplicativo web para que ele possa puxar a imagem do contêiner depois que seu fluxo de trabalho fizer push de uma imagem recém-criada para o registro. Você pode fazer isso com o seguinte comando da CLI do Azure: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
-
Opcionalmente, configure um ambiente de implantação. Os ambientes são usados para descrever um alvo geral de implantação como
produção
,preparo
oudesenvolvimento
. Quando um fluxo de trabalho de GitHub Actions é implantado em um ambiente, o ambiente é exibido na página principal do repositório. Você pode usar ambientes para exigir aprovação para um trabalho para prosseguir, restringir quais branches podem acionar um fluxo de trabalho ou limitar o acesso a segredos. Para obter mais informações sobre criar ambientes, consulte "Usando ambientes para implantação".
Criar o fluxo de trabalho
Depois de preencher os pré-requisitos, você pode prosseguir com a criação do fluxo de trabalho.
O fluxo de trabalho a seguir demonstra como criar e implantar um contêiner Docker no Azure App Service quando há push para o branch principal
.
Certifique-se de definir AZURE_WEBAPP_NAME
na chave de fluxo de trabalho env
como o nome do aplicativo web que você criou.
Se você configurou um ambiente de implementação, altere o valor do ambiente
para o nome do seu ambiente. Se você não configurou um ambiente, exclua a chave ambiente
.
# This workflow uses actions that are not certified by GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# documentação.
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@v2
- 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 }}'
Recursos adicionais
Os seguintes recursos também podem ser úteis:
- Para o fluxo de trabalho inicial original, consulte
azure-container-webapp.yml
no repositóriostarter-workflows
de GitHub Actions. - A ação usada para fazer a implantação do aplicativo web é a ação oficial
Azure/webapps-deploy
do Azure. - Para obter mais exemplos de fluxos de trabalho do GitHub Action que fazem a implantação no Azure, consulte o repositório actions-workflow-samples.