O software deve ser escrito, testado e implantado em um ambiente de produção. Para fazer isso de forma automatizada, os desenvolvedores e o DevOps constroem pipelines CI/CD ou pipelines de build/release que automatizam grande parte dessa atividade.
A pipeline allows developers, DevOps teams and others to produce and deploy reliable code. In the Microsoft realm, the way to build a pipeline is with Azure DevOps with a feature called Azure Pipelines.
Os Azure Pipelines permitem que você execute builds automaticamente, realize testes e implante código (release) em vários ambientes de desenvolvimento e produção. Mas e se você nunca ouviu falar do Azure DevOps ou de um pipeline antes, ou nunca construiu um com o Azure DevOps? Se for o caso, este tutorial sobre Azure Pipelines é para você.
Um grande agradecimento a Peter De Tender, Instrutor Técnico da Microsoft Azure, por sua ajuda com este artigo.
Visão Geral do Projeto
Este é um artigo do Projeto onde abordamos como construir um projeto ou implementar uma solução. Cada seção será composta por etapas cumulativas que se baseiam nas anteriores.
Neste Projeto, você vai aprender, desde o início, como criar seu primeiro pipeline do Azure DevOps. Você aprenderá conceitos como invocar builds a partir de um commit no controle de versão Git, executar testes automaticamente e, finalmente, liberar pacotes para ambientes. No final deste Projeto, você terá uma aplicação de comércio eletrônico de exemplo implantada como um Azure WebApp.
Este Projeto deve levar cerca de 30 minutos para ser concluído.
Tenha em mente que se você seguir este projeto e remover imediatamente os recursos criados, não haverá cobranças em sua conta do Azure. Não se esqueça de removê-los!
Público-Alvo
Este projeto abordará o básico da configuração do seu primeiro Azure Pipeline na interface web do Azure DevOps. Você aprenderá muito com este projeto se estiver completamente novo no Azure Pipelines, mas não tanto se já tiver criado seus próprios pipelines antes ou se for um guru do Azure Pipelines.
Requisitos de Ambiente
Se você planeja seguir este projeto passo a passo, certifique-se, no mínimo, de ter o seguinte:
- Uma conta Azure
- Já conectado ao Portal Azure com direitos de administrador global ou similares.
- A GitHub account
- Um repositório Github vazio criado
- Um Azure WebApp vazio implantado usando dotnetcore 2.2 e Linux como plataforma.
Criando uma Organização do Azure DevOps
Como estamos começando do zero absoluto, você primeiro criará o objeto “base” que contém todos os recursos e serviços do Azure DevOps, chamado de organização. A organização é onde todos os projetos são armazenados, e você aprenderá a construir na próxima seção.
- A partir do Portal do Azure, vá para Todos os serviços, procure por DevOps e selecione Azure DevOps. Você pode ver o que esperar abaixo. Isso abrirá a tela do Azure DevOps, como mostrado abaixo.

2. Em seguida, clique em Minhas Organizações do Azure DevOps e forneça suas credenciais do Azure. Você será levado a uma página onde pode criar uma nova organização, como mostrado abaixo. Uma vez aqui, clique no botão azul Criar nova organização.

3. Na próxima página, forneça um nome para a organização. Se encontrar problemas ao usar um nome específico, certifique-se de verificar as convenções de nomenclatura da organização do Azure DevOps. Nesta tela, também especifique uma região do Azure mais próxima de você. Uma vez feito, clique em Continuar.

Neste ponto, sua organização do Azure DevOps está criada!
Criando um Projeto do Azure DevOps
O próximo passo é criar um projeto. Um projeto é um recipiente para o pipeline que será criado, vários artefatos e qualquer outra informação relacionada a um serviço ou software específico.
O Azure DevOps oferece a capacidade de criar um projeto durante o mesmo fluxo de trabalho de criação de uma organização, conforme realizado anteriormente. Se você seguiu o processo, agora deve estar visualizando uma página de criação de projeto, conforme mostrado abaixo.
- Na página de criação do projeto, forneça um nome para o seu projeto no campo Nome do Projeto. Para este projeto, você usará um projeto Azure DevOps chamado devopsdemo.
- Confirme a criação do projeto clicando no botão + Criar Projeto.
- Por enquanto, deixe a Visibilidade configurada como Privado. Isso garante que seu projeto não seja exposto à Internet. Um projeto público permite acesso somente leitura aos artefatos do projeto para não membros e usuários não autenticados.

Neste ponto, seu espaço de trabalho Azure DevOps (projeto + organização) foi criado. Se você seguiu as etapas, agora terá uma organização Azure DevOps chamada pdtitws123 e um projeto dentro dessa organização chamado devopsdemo.

Construindo um Pipeline de Compilação Azure DevOps
Agora que você tem uma organização e projeto Azure DevOps configurados, pode criar um pipeline de compilação. O pipeline é onde toda a mágica acontece. É onde você criará compilações para realizar várias tarefas, como compilar código, trazer dependências e muito mais.
- A partir do painel, selecione Pipelines e depois em Builds.

2. Você verá uma mensagem informando que ainda não foram encontrados pipelines de compilação. Clique em Novo pipeline para começar a criar o pipeline de compilação.

3. Em seguida, você será solicitado a indicar onde seu código está armazenado. Neste Projeto, o código está armazenado em um repositório do GitHub. Selecione GitHub. Este é o local onde o código é armazenado e os gatilhos para iniciar a compilação virão.

4. Assim que clicar em GitHub, você será solicitado a fornecer as credenciais de sua conta do GitHub, conforme mostrado abaixo. Antes de começar esta etapa, lembre-se de ter criado um repositório do GitHub vazio, conforme definido na seção de Pré-requisitos deste artigo!

5. Em seguida, confirme a etapa em que é solicitada a autorização do Azure Pipelines. Isso garante que o Azure DevOps tenha permissão para acessar seus repositórios do GitHub.

Vinculando um Repositório do GitHub ao Pipeline de Compilação
Depois de fornecer permissão ao Azure DevOps para acessar sua conta do GitHub, agora vincule um repositório do GitHub ao pipeline de compilação.
- Selecione o repositório vazio do GitHub que você criou para este Projeto.

2. Permita que o projeto leia, escreva e verifique o código-fonte do repositório que você selecionou anteriormente. Em seguida, confirme este processo clicando em Aprovar e Instalar.

3. Ao clicar em confirmar, você verá um erro gerado como mostrado abaixo. Esse erro ocorrerá porque o Repositório do GitHub selecionado está vazio.

Neste ponto, seu repositório do GitHub será vinculado ao pipeline de compilação do Azure DevOps.
Não precisa criar um pipeline completamente novo toda vez que quiser vincular um repositório do GitHub a um pipeline de compilação do Azure DevOps.
Populando o Código do Repositório de Exemplo do GitHub
O pipeline de compilação do Azure DevOps não será executado sem algum código no repositório do GitHub. O código não importa necessariamente neste momento. Para ter algum código no repositório, vamos usar um repositório existente para clonar algum código. Neste repositório, tenho todo o código-fonte disponível para publicar um aplicativo de exemplo de comércio eletrônico no Azure WebApps.
O código de exemplo para este repositório conterá um aplicativo de comércio eletrônico de exemplo chamado SimplCommerce. Este aplicativo é um aplicativo dotnetcore de código aberto mais realista do que o típico projeto “olá mundo”.
- Acesse este repositório de exemplo do GitHub e clique em Importar código conforme mostrado abaixo.

2. Para o URL de clonagem do repositório antigo, use http://github.com/007FFFLearning/SimplDev e clique em Começar importação.

Quando a etapa de importação do repositório for concluída com sucesso, atualize a janela do Pipeline do Azure DevOps, que deve permitir que você continue agora.
Inspeção e Visualização do Pipeline de Compilação em YAML
Neste ponto, você estará na fase de revisão do processo de criação do pipeline. Agora será apresentada uma representação do pipeline de construção em YAML. Este arquivo YAML é criado automaticamente com base na detecção da linguagem de código-fonte, que neste projeto é dotnetcore.
Uma das verdadeiras vantagens do Azure DevOps é o pipeline YAML. Com muitas outras ferramentas de DevOps, é necessário construir manualmente um arquivo de pipeline.

Executando manualmente o pipeline de construção do Azure
Em um pipeline de integração contínua (CI), a construção geralmente é acionada por um commit no controle de origem. No entanto, também é possível acionar manualmente a execução do pipeline de construção. Vamos iniciar manualmente um pipeline de construção para ver o que acontece.
Se você esteve acompanhando até agora, neste ponto, você deve estar pronto para clicar em Executar para iniciar o pipeline de construção. Isso iniciará o processo de construção do pipeline, como mostrado na captura de tela abaixo.

Após alguns segundos, você poderá ver que o processo estará em execução no macOS, como mostrado abaixo. O pipeline de construção fornecerá informações em tempo real à medida que cada tarefa e trabalho no pipeline é executado.

Em seguida, o pipeline de construção repetirá o mesmo processo para outros sistemas operacionais (neste exemplo), conforme mostrado abaixo. As etapas realizadas podem variar significativamente dependendo de como o arquivo YAML foi construído.

Após a conclusão da construção, você verá marcas de seleção verdes, como mostrado abaixo. Esta captura de tela indica que a compilação em cada plataforma foi bem-sucedida.

Você agora criou um pipeline de compilação no Azure DevOps!
Construindo um pipeline de liberação no Azure DevOps
O pipeline de compilação está criado, o que é um ótimo progresso. Se você parasse neste ponto, estaria bem encaminhado para um pipeline automatizado completo. Mas não estamos prontos! O objetivo final do software é ser implantado para que os clientes possam usá-lo. É hora de automatizar também uma liberação com um pipeline de liberação!
A release pipeline takes a build artifact, a result of the build process and deploys that to one or more environments. In this Project, you’re going to use a release pipeline to publish code in the GitHub repo to an Azure Web App.
- No Azure DevOps, clique em Pipelines e depois em Liberações.

2. Em seguida, selecione Novo e depois Novo Pipeline de Liberação. Isso inicia o assistente de novo pipeline de liberação.

3. Na lista de modelos à direita, selecione Implantação no Serviço de Aplicativo do Azure. Você verá muitos tipos diferentes de modelos disponíveis para economizar tempo na criação de futuros pipelines de liberação.

4. Forneça uma descrição para o Nome do Estágio. O estágio conterá tarefas de liberação. Para este projeto, use o nome Implantar_no_webapp.

O pipeline de liberação deve parecer agora como na captura de tela abaixo.

5. No campo Estágios, selecione 1 job, 1 tarefa. Este campo é onde você eventualmente fornecerá as configurações do ambiente do Azure Web App que você usará para a implantação real.
6. Parte do modelo de implantação do Serviço de Aplicativo do Azure inclui alguns parâmetros que você precisará definir nesta tela.
- Nome Artístico – Deploy-to-webapps2 neste exemplo.
- Assinatura do Azure – selecione a sua assinatura e confirme com Autorizar (necessita de credenciais)
- Tipo de Aplicativo – Aplicativo da Web no Linux
- Nome do Serviço de Aplicativo – o aplicativo da web que você criou anteriormente

7. Quando concluído, clique em Pipeline no menu superior do seu projeto de Azure Pipeline, conforme mostrado abaixo. Isso o levará de volta à tela principal e permitirá que você conclua a próxima etapa, que é especificar os artifacts.

Adicionando Artifacts ao Azure DevOps Release Pipeline
Dentro de um pipeline de release, há muitos itens diferentes que precisam ser implantados. Esses itens são chamados de artifacts. Artifacts, em termos simples, são componentes implantáveis da sua aplicação. O Azure Pipelines pode implantar artifacts que são produzidos por uma ampla variedade de fontes de artifacts.
Nesta seção, vamos abordar como adicionar artifacts ao pipeline de release.
- Enquanto estiver na tela do Pipeline, clique em Adicionar um Artifact.
- O Tipo de Origem já está configurado como Build, o que é o que você deseja, pois estará implantando a saída do pipeline de build criado anteriormente. Escolha o pipeline de build criado anteriormente no menu suspenso da Origem (pipeline de build).
- Quando terminar, clique em Adicionar para salvar a configuração.

4. Por último, clique no botão Salvar no canto superior direito da tela para salvar o pipeline de lançamento.
Criando o Lançamento do Azure DevOps
Depois que o pipeline de lançamento for criado, você começará a criar lançamentos. Um lançamento é uma execução específica do pipeline. Pense no pipeline de lançamento como o modelo e nas instâncias específicas desse pipeline de lançamento como lançamentos. Depois de ter um lançamento, esse lançamento pode então ser implantado.
Para criar um lançamento:
- Clique no botão Criar Lançamento no canto superior direito da janela, conforme mostrado abaixo.

2. Você não vai fazer nada sofisticado, então na Criar um novo lançamento tela, aceite os padrões e clique em Criar. Você tem apenas uma única fase neste momento e uma única versão do artefato de compilação para implantar agora.

3. Após alguns segundos, você receberá uma notificação (a barra verde) de que o lançamento foi criado, conforme mostrado abaixo. Agora clique em Lançamento-1 que o redirecionará para os detalhes do processo de lançamento.

Você agora criou um lançamento e está pronto para ser implantado!
Implantando Manualmente um Lançamento
A release is a set of instructions to perform on how to deploy a build. You’ve done all of that. Now it’s time to actually run those instructions and deploy code to an environment.
Enquanto estiver no lançamento Lançamento-1 que você criou anteriormente:
- Selecione a etapa Deploy_to_webapp e confirme Deploy. Quando fizer isso, o status mudará para Em progresso conforme mostrado abaixo. Neste ponto, o release está pegando o código-fonte do pipeline de build executado anteriormente e enviando-o para a instância do Azure WebApp.
Esta etapa iniciará um trabalho em segundo plano em um agente copiando o código-fonte e realizando o ciclo de release real.

2. Clique na etapa enquanto estiver em progresso. Você verá qualquer informação de log mostrada na área de saída do console.

Quando estiver completo, a etapa deve mostrar Bem-sucedido como visto abaixo.

Se tudo correr bem, o release deve ter sido concluído e agora você deve ter um aplicativo da web publicado em um Azure Web App!
Inspecting the Deployed Azure WebApp
Agora que todo o processo está completo, certifique-se de verificar os frutos do seu trabalho.
- Acesse o Azure Portal, navegue até o Azure WebApp que você selecionou no pipeline de release como alvo e copie a URL conforme mostrado abaixo.

2. Agora cole essa URL em um navegador, fornecendo o URL do Azure Web App. Seu navegador deve carregar agora a aplicação de exemplo de comércio eletrônico, semelhante à página inicial abaixo

Você fez tudo! Agora você tem um aplicativo web Azure implantado a partir de um repositório do GitHub capaz de ser automatizado ao máximo!
Limpeza
Se você seguiu ao longo deste Projeto, agora tem uma nova organização, projeto, pipeline de compilação, pipeline de liberação e liberação no Azure DevOps. Se você terminou de testar as coisas, certifique-se de remover a organização original criada para não correr o risco de ser cobrado por quaisquer recursos do Azure.
Para fazer isso:
- Volte para a sua área principal de trabalho no Azure DevOps.
- Clique em Configurações da organização no canto inferior esquerdo.
- Na tela de visão geral, clique no botão Excluir na parte inferior da página, em Excluir organização.
- Digite o nome da organização e clique em Excluir. Isso deve remover todo o trabalho que você acabou de realizar.
Seus aprendizados
Se você seguiu as instruções deste Projeto, você criou um pipeline completo de CI/CD do zero no Azure DevOps. Agora você deve ter uma boa ideia do que esse processo envolve.
O Azure Pipelines pode ir muito mais fundo do que o que você fez neste Projeto, mas agora você deve ter algum conhecimento fundamental de todo o processo.