Partilhar via


Implemente um contentor personalizado no App Service usando GitHub Actions

Pode usar o GitHub Actions para construir um fluxo de trabalho automatizado de desenvolvimento de software. Pode usar a ação Azure Web Deploy para automatizar o seu fluxo de trabalho e implementar contentores personalizados no Azure App Service.

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 contentor de App Service, o ficheiro tem três secçõ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

Recomendamos que se autentique com o Azure App Services para as Ações do GitHub utilizando o OpenID Connect. Também pode autenticar-se com um parceiro de serviço ou com um perfil publicado.

Para autenticar com o Azure, guarde a credencial do seu perfil de publicação ou o principal do serviço como um segredo no GitHub. Acedes ao segredo do teu 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. Vá para Serviço de Aplicativo no portal do Azure.

  2. No painel de Visão Geral , selecione Publicar perfil.

    Nota

    Desde Outubro de 2020, os utilizadores devem configurar a definição da aplicação nas aplicações web Linux WEBSITE_WEBDEPLOY_USE_SCM antes de truedescarregarem o ficheiro. Para aprender a configurar as definições comuns de aplicações web, vá a Configurar uma aplicação de Serviços de Aplicações no portal Azure.

  3. Salve o arquivo baixado. Utiliza-se o conteúdo do ficheiro para criar um segredo no GitHub.

Configurar o segredo do GitHub para autenticação

No GitHub, navegue pelo repositório. Selecione Configurações>> 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.

Quando configurares o teu fluxo de trabalho no GitHub, usa o AZURE_WEBAPP_PUBLISH_PROFILE segredo na ação de implementação do Azure Web App. 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 artigo utiliza o Azure Container Registry para o registo de contentores.

  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 contentor

O exemplo seguinte mostra parte do fluxo de trabalho que constrói uma imagem Node.js Docker. Use Docker Login para iniciar sessão num repositório privado de contentores. 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 }}     

Também pode usar o login do Docker para iniciar sessão em vários registos de contentores 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 }}     

O exemplo a seguir mostra parte do fluxo de trabalho que cria uma imagem do Windows Docker. Utilize o Docker Login para iniciar sessão num registo privado de contentores. Este exemplo usa o Registro de Contêiner do Azure, mas a mesma ação funciona para outros registros.

name: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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 usar o login do Docker para iniciar sessão em vários registos de contentores 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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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
app-name (Obrigatório) Nome da aplicação App Service.
publish-profile (Opcional) Usado com aplicações web (Windows e Linux) e containers de aplicações web (Linux). Cenário de múltiplos contentores não suportado. Publique o conteúdo do ficheiro de perfil \*.publishsettings com os segredos do Web Deploy.
slot-name (Opcional) Introduza um slot existente diferente do slot de produção.
package (Opcional) Usado apenas com aplicações web: Caminho para pacote ou pasta. \*.zip, \*.war, \*.jar, ou uma pasta para implementar.
images (Obrigatório) Usado apenas com contentores de aplicações web: Especifique o nome da imagem do contentor totalmente qualificado. Por exemplo, myregistry.azurecr.io/nginx:latest ou python:3.12.12-alpine/. Para uma aplicação multi-contentor, podem ser fornecidos vários nomes de imagem de contentor (separados por várias linhas).
configuration-file (Opcional) Usado apenas com contentores de aplicações web: caminho do ficheiro 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.
startup-command (Opcional) Introduza o comando de arranque. 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 }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-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 }}'

Pode encontrar o nosso conjunto de ações agrupado em diferentes repositórios no GitHub. Cada repositório contém documentação e exemplos para te ajudar a usar o GitHub para CI/CD e a implementar as tuas aplicações no Azure.