Partilhar via


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

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.

  1. Aceda ao serviço da sua aplicação no portal do Azure.

  2. 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 como true 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.

  3. 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.

  1. 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.

  2. Defina um novo segredo para o nome de usuário do Registro chamado REGISTRY_USERNAME.

  3. 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 Node.JS Docker. 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.