Implantar um contêiner personalizado no Serviço de Aplicativo usando as GitHub Actions

O GitHub Actions oferece a flexibilidade para criar um fluxo de trabalho de desenvolvimento de software automatizado. Com a ação da Implantação da Web do Azure, você pode automatizar seu fluxo de trabalho a fim de implantar contêineres personalizados no Serviço de Aplicativo usando o GitHub Actions.

Um fluxo de trabalho é definido por um arquivo YAML (.yml) no caminho /.github/workflows/ no repositório. Essa definição contém as várias etapas e os 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:

Seção Tarefas
Autenticação 1. Recuperar uma entidade de serviço ou um perfil de publicação.
2. Criar um segredo do GitHub.
Compilar 1. Criar o ambiente.
2. Compilar a imagem de contêiner.
Implantar 1. Implantar a imagem de contêiner.

Pré-requisitos

Gerar as credenciais de implantação

A maneira recomendada de autenticar com os Serviços de Aplicativos do Azure para o GitHub Actions é com um perfil de publicação. A autenticação também pode ser feita com uma entidade de serviço ou com o OpenID Connect, mas o processo requer mais etapas.

Salve a credencial do perfil de publicação ou a entidade de serviço como segredo do GitHub para autenticar com o Azure. Você acessará o segredo no fluxo de trabalho.

Um perfil de publicação é uma credencial de nível de aplicativo. Configure o perfil de publicação como segredo do GitHub.

  1. Acesse o serviço de aplicativo no portal do Azure.

  2. Na página Visão geral, selecione Obter perfil de publicação.

    Observação

    A partir de outubro de 2020, os aplicativos Web do Linux precisarão da configuração do aplicativo WEBSITE_WEBDEPLOY_USE_SCM definida como trueantes de baixar o arquivo. Esse requisito será removido no futuro. Confira 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

Em GitHub, procure seu repositório. Selecione Configurações > Segurança > Segredos e variáveis > Ações > Novo segredo do repositório.

Para usar as credenciais de nível de aplicativo, cole o conteúdo do arquivo de perfil de publicação baixado no campo de valor do segredo. Nomeie o segredo como AZURE_WEBAPP_PUBLISH_PROFILE.

Ao configurar o fluxo de trabalho do GitHub, você usará o AZURE_WEBAPP_PUBLISH_PROFILE na ação Implantar aplicativo Web do Azure. Por exemplo:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Configurar segredos do GitHub para o registro

Defina os segredos a serem usados com a ação de logon do Docker. O exemplo neste documento usa o Registro de Contêiner do Azure para o registro de contêiner.

  1. Vá para o 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 o 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.

Compilar a imagem de contêiner

O exemplo a seguir mostra parte do fluxo de trabalho que cria uma imagem do Docker em Node.JS. Use o Logon do Docker para fazer logon 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 Logon do Docker para fazer logon 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 supõe que haja um Dockerfile no nível da 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 a imagem em um contêiner personalizado no Serviço de Aplicativo, use a ação azure/webapps-deploy@v2. Essa ação tem sete parâmetros:

Parâmetro Explicação
app-name (Obrigatório) Nome do aplicativo do Serviço de Aplicativo
publish-profile (Opcional) Aplica-se a Aplicativos Web (Windows e Linux) e a Contêineres de Aplicativos Web (Linux). Não há suporte a cenários de vários contêineres. Conteúdo de arquivo de perfil de publicação (*.publishsettings) com segredos da Implantação da Web
slot-name (Opcional) Insira um slot existente que não seja o slot de produção
package (Opcional) Aplica-se somente ao Aplicativo Web: caminho para pacote ou pasta. *.zip, *.war, *.jar ou uma pasta a ser implantada
images (Obrigatório) Aplica-se somente a Contêineres do Aplicativo Web: especifique o nome das imagens do contêiner totalmente qualificado. 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)
configuration-file (Opcional) Aplica-se somente a contêineres de Aplicativo Web: caminho do arquivo Docker-Compose. Deve ser um caminho totalmente qualificado ou relativo ao diretório de trabalho padrão. Obrigatório para aplicativos de vários contêineres.
startup-command (Opcional) Insira o comando de inicialização. 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óximas etapas

Encontre nosso conjunto de ações agrupadas em diferentes repositórios no GitHub, cada um contendo documentação e exemplos para ajudar você a usar o GitHub para CI/CD e implantar seus aplicativos no Azure.