Implementar um contentor personalizado no Serviço de Aplicações através do GitHub Actions

GitHub Actions dá-lhe a flexibilidade de criar um fluxo de trabalho de desenvolvimento de software automatizado. Com a ação Azure Web Deploy, pode automatizar o fluxo de trabalho para implementar contentores personalizados para Serviço de Aplicações com GitHub Actions.

Um fluxo de trabalho é definido por um ficheiro YAML (.yml) no caminho no /.github/workflows/ seu repositório. Esta definição contém os vários passos e parâmetros que estão no fluxo de trabalho.

Para um Serviço de Aplicações do Azure fluxo de trabalho de contentor, o ficheiro tem três secções:

Section Tarefas
Autenticação 1. Obtenha um principal de serviço ou publique o perfil.
2. Crie um segredo do GitHub.
Compilação 1. Crie o ambiente.
2. Crie a imagem de contentor.
Implementar 1. Implemente a imagem de contentor.

Pré-requisitos

Gerar credenciais de implementação

A forma recomendada de autenticar com Aplicação Azure AD Services para GitHub Actions é com um perfil de publicação. Também pode autenticar com um principal de serviço ou Abrir o ID Connect, mas o processo requer mais passos.

Guarde a credencial de perfil de publicação ou o principal de serviço como um segredo do GitHub para autenticar com o Azure. Irá aceder ao segredo no seu fluxo de trabalho.

Um perfil de publicação é uma credencial ao nível da aplicação. Configure o seu perfil de publicação como um segredo do GitHub.

  1. Aceda ao serviço de aplicações no portal do Azure.

  2. Na página Descrição geral , selecione Obter Perfil de publicação.

    Nota

    A partir de outubro de 2020, as aplicações Web do Linux precisarão da definição WEBSITE_WEBDEPLOY_USE_SCM da aplicação definida para trueantes de transferir o ficheiro. Este requisito será removido no futuro. Veja Configurar uma aplicação Serviço de Aplicações no portal do Azure, para saber como configurar definições comuns de aplicações Web.

  3. Guarde o ficheiro transferido. Irá utilizar o conteúdo do ficheiro para criar um segredo do GitHub.

Configurar o segredo do GitHub para autenticação

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

Para utilizar credenciais ao nível da aplicação, cole os conteúdos do ficheiro de perfil de publicação transferido no campo de valor do segredo. Dê um nome ao segredo AZURE_WEBAPP_PUBLISH_PROFILE.

Quando configura o fluxo de trabalho do GitHub, utiliza o AZURE_WEBAPP_PUBLISH_PROFILE na ação implementar a Aplicação Web do Azure. Por exemplo:

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

Configurar segredos do GitHub para o seu registo

Defina segredos a utilizar com a ação Início de Sessão do Docker. O exemplo neste documento utiliza Azure Container Registry para o registo de contentor.

  1. Aceda ao contentor no portal do Azure ou Docker e copie o nome de utilizador e a palavra-passe. Pode encontrar o Azure Container Registry nome de utilizador e palavra-passe no portal do Azure em Definições>Chaves de acesso para o seu registo.

  2. Defina um novo segredo para o nome de utilizador do registo com o nome REGISTRY_USERNAME.

  3. Defina um novo segredo para a palavra-passe do registo com o nome REGISTRY_PASSWORD.

Criar a imagem Contentor

O exemplo seguinte mostra parte do fluxo de trabalho que cria um Node.JS imagem do Docker. Utilize o Início de Sessão do Docker para iniciar sessão num registo de contentor privado. Este exemplo utiliza Azure Container Registry mas a mesma ação funciona para outros registos.

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 }}     

Também pode utilizar o início de sessão do Docker para iniciar sessão em vários registos de contentor ao mesmo tempo. Este exemplo inclui dois novos segredos do GitHub para autenticação com docker.io. O exemplo pressupõe que existe um Dockerfile no nível raiz do registo.

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 }}     

Implementar num contentor de Serviço de Aplicações

Para implementar a sua imagem num contentor personalizado no Serviço de Aplicações, utilize a açãoazure/webapps-deploy@v2. Esta ação tem sete parâmetros:

Parâmetro Explicação
nome da aplicação (Obrigatório) Nome da aplicação Serviço de Aplicações
publish-profile (Opcional) Aplica-se a Aplicações Web(Windows e Linux) e Contentores de Aplicações Web(linux). Cenário de vários contentores não suportado. Publicar conteúdo de ficheiro de perfil (*.publishsettings) com segredos de Implementação Web
nome do bloco (Opcional) Introduza um Bloco existente que não seja o bloco de Produção
pacote (Opcional) Aplica-se apenas à Aplicação Web: Caminho para empacotar ou pasta. *.zip, *.war, *.jar ou uma pasta para implementar
imagens (Obrigatório) Aplica-se apenas a Contentores de Aplicações Web: especifique o nome das imagens de contentor completamente qualificadas. Por exemplo, "myregistry.azurecr.io/nginx:latest" ou "python:3.7.2-alpine/". Para uma aplicação com vários contentores, podem ser fornecidos vários nomes de imagens de contentor (separados por várias linhas)
configuration-file (Opcional) Aplica-se apenas a Contentores de Aplicações Web: Caminho do ficheiro de Docker-Compose. Deve ser um caminho completamente qualificado ou relativo ao diretório de trabalho predefinido. Necessário para aplicações de vários contentores.
startup-comando (Opcional) Introduza o comando de arranque. Para ex. 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 }}'

Passos seguintes

Pode encontrar o nosso conjunto de Ações agrupadas em repositórios diferentes no GitHub, cada um com documentação e exemplos para o ajudar a utilizar o GitHub para CI/CD e a implementar as suas aplicações no Azure.