Implementar um contentor personalizado no Serviço de Aplicações através do GitHub Actions
O GitHub Actions oferece a flexibilidade de criar um fluxo de trabalho automatizado de desenvolvimento de software. Com a ação Implantação da Web do Azure, você pode automatizar seu fluxo de trabalho para implantar contêineres personalizados no Serviço de Aplicativo usando as Ações do GitHub.
Um fluxo de trabalho é definido por um arquivo YAML (.yml) no /.github/workflows/
caminho no repositório. Esta definição contém as várias etapas e parâmetros que estão no fluxo de trabalho.
Para um fluxo de trabalho de contêiner do Serviço de Aplicativo do Azure, o arquivo tem três seções:
Section | Tarefas |
---|---|
Autenticação | 1. Recupere uma entidade de serviço ou um perfil de publicação. 2. Crie um segredo do GitHub. |
Compilação | 1. Crie o ambiente. 2. Crie a imagem do contêiner. |
Implementar | 1. Implante a imagem do contêiner. |
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente
- Uma conta GitHub. Se não tiver uma, inscreva-se gratuitamente. Você precisa ter código em um repositório GitHub para implantar no Serviço de Aplicativo do Azure.
- Um registro de contêiner de trabalho e um aplicativo do Serviço de Aplicativo do Azure para contêineres. Este exemplo usa o Azure Container Registry. Certifique-se de concluir a implantação completa no Serviço de Aplicativo do Azure para contêineres. Ao contrário dos aplicativos Web comuns, os aplicativos Web para contêineres não têm uma página de destino padrão. Publique o contêiner para ter um exemplo de trabalho.
Gerar credenciais de implantação
A maneira recomendada de autenticar com os Serviços de Aplicativo do Azure para Ações do GitHub é com um perfil de publicação. Você também pode se autenticar com uma entidade de serviço ou Open ID Connect, mas o processo requer mais etapas.
Salve sua credencial de perfil de publicação ou entidade de serviço como um segredo do GitHub para autenticar com o Azure. Você acessará o segredo em seu fluxo de trabalho.
Um perfil de publicação é uma credencial no nível do aplicativo. Configure seu perfil de publicação como um segredo do GitHub.
Aceda ao serviço da sua aplicação no portal do Azure.
Na página Visão geral, selecione Obter perfil de publicação.
Nota
A partir de outubro de 2020, os aplicativos Web Linux precisarão da configuração
WEBSITE_WEBDEPLOY_USE_SCM
do aplicativo definida comotrue
antes de baixar o arquivo. Este requisito será suprimido no futuro. Consulte Configurar um aplicativo do Serviço de Aplicativo no portal do Azure para saber como definir configurações comuns do aplicativo Web.Salve o arquivo baixado. Você usará o conteúdo do arquivo para criar um segredo do GitHub.
Configurar o segredo do GitHub para autenticação
No GitHub, navegue pelo repositório. Selecione Configurações > Segredos de segurança > e variáveis > Ações > Novo segredo do repositório.
Para usar credenciais no nível do aplicativo, cole o conteúdo do arquivo de perfil de publicação baixado no campo de valor do segredo. Nomeie o segredo AZURE_WEBAPP_PUBLISH_PROFILE
.
Ao configurar seu fluxo de trabalho do GitHub, você usa a ação implantar o AZURE_WEBAPP_PUBLISH_PROFILE
Aplicativo Web do Azure. Por exemplo:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
Configurar segredos do GitHub para seu registro
Defina segredos para usar com a ação Login do Docker. O exemplo neste documento usa o Registro de Contêiner do Azure para o Registro de contêiner.
Vá para seu contêiner no portal do Azure ou no Docker e copie o nome de usuário e a senha. Você pode encontrar o nome de usuário e a senha do Registro de Contêiner do Azure no portal do Azure em Configurações>Chaves de acesso para seu registro.
Defina um novo segredo para o nome de usuário do Registro chamado
REGISTRY_USERNAME
.Defina um novo segredo para a senha do Registro chamada
REGISTRY_PASSWORD
.
Criar a imagem do contêiner
O exemplo a seguir mostra parte do fluxo de trabalho que cria uma imagem do Docker Node.js. Use o Login do Docker para fazer login em um registro de contêiner privado. Este exemplo usa o Registro de Contêiner do Azure, mas a mesma ação funciona para outros registros.
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 }}
Você também pode usar o login do Docker para fazer login em vários registros de contêiner ao mesmo tempo. Este exemplo inclui dois novos segredos do GitHub para autenticação com docker.io. O exemplo pressupõe que há um Dockerfile no nível raiz do registro.
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 }}
Implantar em um contêiner do Serviço de Aplicativo
Para implantar sua imagem em um contêiner personalizado no Serviço de Aplicativo, use a azure/webapps-deploy@v2
ação. Esta ação tem sete parâmetros:
Parâmetro | Explicação |
---|---|
nome do aplicativo | (Obrigatório) Nome do aplicativo do Serviço de Aplicativo |
publicar-perfil | (Opcional) Aplica-se a Web Apps(Windows e Linux) e Web App Containers(linux). Cenário de vários contêineres não suportado. Publicar conteúdo do arquivo de perfil (*.publishsettings) com segredos do Web Deploy |
nome do slot | (Opcional) Insira um Slot existente diferente do slot de Produção |
embalagem | (Opcional) Aplica-se apenas ao Web App: caminho para o pacote ou pasta. *.zip, *.war, *.jar ou uma pasta para implantar |
imagens | (Obrigatório) Aplica-se somente a contêineres de aplicativos Web: especifique o nome da(s) imagem(ns) de contêiner totalmente qualificada(s). Por exemplo, 'myregistry.azurecr.io/nginx:latest' ou 'python:3.7.2-alpine/'. Para um aplicativo de vários contêineres, vários nomes de imagem de contêiner podem ser fornecidos (separados por várias linhas) |
arquivo-configuração | (Opcional) Aplica-se somente a contêineres de aplicativos Web: caminho do arquivo Docker-Compose. Deve ser um caminho totalmente qualificado ou relativo ao diretório de trabalho padrão. Necessário para aplicativos de vários contêineres. |
comando de inicialização | (Opcional) Insira o comando start-up. Por exemplo, dotnet run ou 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 }}'
Próximos passos
Você pode encontrar nosso conjunto de Ações agrupadas em diferentes repositórios no GitHub, cada um contendo documentação e exemplos para ajudá-lo a usar o GitHub para CI/CD e implantar seus aplicativos no Azure.