Compile e implante no Serviço de Kubernetes do Azure com o Azure Pipelines
Azure DevOps Services
Use o Azure Pipelines para implantar automaticamente no AKS (Serviço de Kubernetes do Azure). O Azure Pipelines permite criar, testar e implantar com CI (integração contínua) e CD (entrega contínua) usando o Azure DevOps.
Neste artigo, aprenda a criar um pipeline que compila e implanta continuamente seu aplicativo. Sempre que você altera seu código em um repositório que contém um Dockerfile, as imagens são enviadas ao Registro de Contêiner do Azure e os manifestos são implantados em seu cluster do AKS.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Uma conexão de serviço do Azure Resource Manager. Crie uma conexão de serviço do Azure Resource Manager.
- Uma conta do GitHub. Crie uma conta do GitHub gratuitamente, caso ainda não tenha uma.
Obter o código
Crie fork para o seguinte repositório contendo um aplicativo de exemplo e um Dockerfile:
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Criar os recursos do Azure
Entre no portal do Azure e pressione o botão Cloud Shell no canto superior direito. Use a CLI do Azure ou o PowerShell para criar um cluster do AKS.
Criar um registro de contêiner
# Create a resource group
az group create --name myapp-rg --location eastus
# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic
# Create a Kubernetes cluster
az aks create \
--resource-group myapp-rg \
--name myapp \
--node-count 1 \
--enable-addons monitoring \
--generate-ssh-keys
Entrar no Azure Pipelines
Entre no Azure Pipelines. Depois de entrar, o navegador vai para https://dev.azure.com/my-organization-name
e exibe o painel do Azure DevOps.
Na organização selecionada, crie um projeto. Se você não tiver nenhum projeto em sua organização, verá uma tela Criar um projeto para começar. Caso contrário, selecione o botão Criar Projeto no canto superior direito do painel.
Criar o pipeline
Conectar e selecionar seu repositório
Entre na organização do Azure DevOps e acesse seu projeto.
Acesse Pipelines e selecione Novo pipeline.
Percorra as etapas do assistente selecionando primeiro o GitHub como o local do código-fonte.
Você pode ser redirecionado para o GitHub para então entrar. Nesse caso, insira suas credenciais do GitHub.
Quando a lista de repositórios for exibida, selecione o repositório.
Você poderá ser redirecionado ao GitHub para instalar o aplicativo do Azure Pipelines. Se sim, selecione Aprovar e instalar.
Selecione Implantar no Serviço de Kubernetes do Azure.
Se for solicitado, selecione a assinatura na qual você criou o registro e o cluster.
Selecione o cluster
myapp
.Para Namespace, selecione Existente e, em seguida, padrão.
Selecione o nome do registro de contêiner.
Você pode manter o nome da imagem definido como padrão.
Defina a porta de serviço como 8080.
Marque a caixa de seleção Habilitar aplicativo de revisão para solicitações de pull para que a configuração relacionada ao aplicativo de revisãoseja incluída no YAML gerado automaticamente pelo YAML nas etapas subsequentes.
Selecione Validate and configure.
Conforme o Azure Pipelines cria o pipeline, o processo fará o seguinte:
Criará uma conexão de serviço do registro do Docker para permitir que o pipeline envie imagens ao registro de contêiner.
Criará um ambiente e um recurso do Kubernetes nele. Para um cluster habilitado para RBAC, o recurso Kubernetes criado cria implicitamente os objetos ServiceAccount e RoleBinding no cluster para que o ServiceAccount criado não possa executar operações fora do namespace escolhido.
Gerará um arquivo azure-pipelines.yml que definirá seu pipeline.
Gerará arquivos de manifesto do Kubernetes. Esses arquivos são gerados por meio da hidratação dos modelos deployment.yml e service.yml com base nas seleções feitas. Ao final, selecione Salvar e executar.
Selecione Salvar e executar.
Você pode alterar a Mensagem de confirmação para algo como Adicionar pipeline ao nosso repositório. Quando você estiver pronto, selecione Salvar e executar para confirmar o novo pipeline no repositório e, em seguida, iniciar a primeira execução dele!
Ver a implantação do aplicativo
À medida que o pipeline é executado, observe como o estágio de compilação e, em seguida, o estágio de implantação mudam a cor de azul (em execução) para verde (concluído). É possível selecionar os estágios e trabalhos para observar seu pipeline em ação.
Observação
Com um agente hospedado pela Microsoft, você deve adicionar o intervalo de IP dele ao firewall. Obtenha a lista semanal de intervalos de IP no arquivo JSON semanal, que é publicado toda quarta-feira. Os novos intervalos de IP entram em vigor na segunda-feira seguinte. Para saber mais, confira Agentes hospedados pela Microsoft. Para encontrar os intervalos de IP necessários para sua organização do Azure DevOps, saiba como identificar os intervalos de IP possíveis para agentes hospedados pela Microsoft.
Depois da execução do pipeline, veja o que aconteceu e o aplicativo implantado. No resumo do pipeline:
Selecione a guia Ambientes.
Selecione Exibir ambiente.
Selecione a instância do aplicativo para o namespace no qual ele foi implantado. Se você usou os padrões, é o aplicativo myapp no namespace padrão.
Selecione a guia Serviços.
Selecione e copie o endereço IP externo para a área de transferência.
Abra uma nova guia ou janela do navegador e digite <Endereço IP>:8080.
Se você estiver compilando o aplicativo de exemplo, Hello world aparecerá em seu navegador.
Como o pipeline é compilado
Quando você selecionou as opções e, em seguida, validou e configurou o pipeline, o Azure Pipelines criou um pipeline para você com o modelo Implantar no Serviço de Kubernetes do Azure.
O estágio de compilação usa a tarefa do Docker para criar e enviar a imagem ao Registro de Contêiner do Azure.
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- task: PublishPipelineArtifact@1
inputs:
artifactName: 'manifests'
path: 'manifests'
O trabalho de implantação usa a tarefa de manifesto do Kubernetes para criar o imagePullSecret
necessário para os nós de cluster do Kubernetes a fim de efetuar pull do recurso do Registro de Contêiner do Azure. Em seguida, os arquivos de manifesto são usados pela tarefa de manifesto do Kubernetes na implantação no cluster do Kubernetes. Os arquivos de manifesto, service.yml
e deployment.yml
, foram gerados quando você usou o modelo Implantar no Serviço de Kubernetes do Azure.
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy job
pool:
vmImage: $(vmImageName)
environment: 'myenv.aksnamespace' #customize with your environment
strategy:
runOnce:
deploy:
steps:
- task: DownloadPipelineArtifact@2
inputs:
artifactName: 'manifests'
downloadPath: '$(System.ArtifactsDirectory)/manifests'
- task: KubernetesManifest@1
displayName: Create imagePullSecret
inputs:
action: 'createSecret'
connectionType: 'kubernetesServiceConnection'
kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
secretType: 'dockerRegistry'
secretName: '$(imagePullSecret)'
dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'
- task: KubernetesManifest@1
displayName: Deploy to Kubernetes cluster
inputs:
action: 'deploy'
connectionType: 'kubernetesServiceConnection'
kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
containers: '$(containerRegistry)/$(imageRepository):$(tag)'
imagePullSecrets: '$(imagePullSecret)'
Limpar os recursos
Ao concluir a criação de recursos, você pode usar o seguinte comando para excluí-los:
az group delete --name myapp-rg
Insira y
quando solicitado.
Azure Kubernetes Service