Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Azure DevOps permite que você hospede, crie, planeje e teste seu código com fluxos de trabalho gratuitos. Usar o Azure Pipelines como um desses fluxos de trabalho permite que você implante seu aplicativo com CI/CD que funciona com qualquer plataforma e nuvem. Um pipeline é definido como um arquivo YAML no diretório raiz do repositório.
Neste artigo, usamos o Azure Pipelines para implantar um aplicativo de contêiner do Windows no Serviço de Aplicativo a partir de um repositório Git no Azure DevOps. Ele pressupõe que você já tenha um aplicativo .NET com um dockerfile de suporte no Azure DevOps.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
- Uma organização Azure DevOps. Crie um gratuitamente.
- Um aplicativo do Windows funcional com o Dockerfile hospedado no Azure Repos.
Adicionar uma conexão de serviço
Antes de criar seu pipeline, você deve primeiro criar sua Conexão de Serviço, pois você será solicitado a escolher e verificar sua conexão ao criar seu modelo. Uma Conexão de Serviço permite que você se conecte ao seu registro de escolha (ACR ou Docker Hub) ao usar os modelos de tarefa. Ao adicionar uma nova conexão de serviço, escolha a opção Registro do Docker. O formulário a seguir solicita que você escolha Docker Hub ou Azure Container Registry junto com as informações pertinentes. Para acompanhar este tutorial, use o Registro de Contêiner do Azure. Você pode criar uma nova Conexão de Serviço seguindo as instruções aqui.
Proteja os seus segredos
Como estamos usando informações confidenciais que você não quer que outras pessoas acessem, usamos variáveis para proteger nossas informações. Crie uma variável seguindo as instruções aqui.
Para adicionar uma variável, clique no botão Variáveis ao lado do botão Salvar no canto superior direito da exibição de edição do pipeline.
Selecione o botão Nova variável e insira suas informações. Adicione as variáveis abaixo com seus próprios segredos apropriados de cada recurso.
- vmImageName: 'windows-latest'
- imageRepository: 'nome-do-seu-repositório-de-imagens'
- dockerfilePath: '$(Build.SourcesDirectory)/caminho/para/Dockerfile'
- dockerRegistryServiceConnection: 'o número da sua conexão de serviço'
Criar um novo pipeline
Depois de o repositório ser criado com o seu aplicativo .NET e o respetivo ficheiro Docker, poderá criar o seu pipeline seguindo estas etapas.
- Navegue até Pipelines na barra de menu à esquerda e clique no botão Create pipeline
- Na próxima tela, selecione Azure Repos Git como sua opção de repositório e selecione o repositório onde seu código está
- Na guia Configurar, escolha a opção Pipeline Starter
- Na próxima guia Revisão, clique no botão Salvar
Criar e enviar imagem para o Registo de Contentores do Azure
Após o pipeline ser criado e salvo, será necessário editá-lo para executar as etapas de criação do contêiner, fazer o push para um registo e implantar a imagem no App Service. Para começar, navegue até o menu Pipelines, escolha o pipeline que você criou e clique no botão Editar.
Primeiro, você precisa adicionar a tarefa docker para poder criar a imagem. Adicione o seguinte código e substitua o caminho Dockerfile: app/Dockerfile pelo caminho para o seu próprio Dockerfile.
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push 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)
Adicionar a tarefa de implantação do Serviço de Aplicativo
Em seguida, você precisa configurar a tarefa de implantação. Isso requer o nome da assinatura, o nome do aplicativo e o registro do contêiner.
Adicione um novo estágio ao arquivo yaml colando o código abaixo.
- stage: Deploy displayName: Deploy to App Service jobs: - job: Deploy displayName: Deploy pool: vmImage: $(vmImageName) steps:Navegue até a guia Mostrar assistente no canto superior direito e localize a tarefa de implantação do Serviço de Aplicativo do Azure e preencha o seguinte formulário:
- Tipo de conexão: Azure Resource Manager
- Subscrição do Azure: seu-nome-de-subscrição
- Tipo de Serviço de Aplicativo: Aplicativo Web para Contêineres (Windows)
- Nome do Serviço de Aplicativo: seu-nome-de-aplicativo
- Registro ou namespace: your-azure-container-registry-namespace
- Imagem: your-azure-container-registry-image-name
Clique no botão Adicionar para adicionar a tarefa abaixo:
- task: AzureRmWebAppDeployment@4 inputs: ConnectionType: 'AzureRM' azureSubscription: 'my-subscription-name' appType: 'webAppHyperVContainer' WebAppName: 'my-app-name' DockerNamespace: 'myregsitry.azurecr.io' DockerRepository: 'dotnetframework:12'
Depois de adicionar a tarefa, o pipeline estará pronto para ser executado. Clique no botão Validar e salvar e execute o pipeline. O fluxo de trabalho passa pelas etapas para criar e fazer o push da imagem do contentor do Windows para o Registro de Contentores do Azure e implantar a imagem no Serviço de Aplicações.
Abaixo está o exemplo do arquivo yaml completo:
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push 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)
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'