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
- Uma conta do Azure com uma subscrição ativa. Criar uma conta gratuitamente
- Uma conta do GitHub. Se não tiver uma, inscreva-se gratuitamente. Tem de ter código num repositório do GitHub para implementar no Serviço de Aplicações do Azure.
- Um registo de contentor de trabalho e Serviço de Aplicações do Azure aplicação para contentores. Este exemplo utiliza Azure Container Registry. Certifique-se de que conclui a implementação completa para Serviço de Aplicações do Azure para contentores. Ao contrário das aplicações Web normais, as aplicações Web para contentores não têm uma página de destino predefinida. Publique o contentor para ter um exemplo funcional.
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.
Aceda ao serviço de aplicações no portal do Azure.
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 paratrue
antes 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.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.
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.
Defina um novo segredo para o nome de utilizador do registo com o nome
REGISTRY_USERNAME
.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.