Release Definition com vários artefatos usando Azure Pipelines
Tags: azure, devops, automation
Published: 2020-07-12 22:11:57

### Como criar uma release definition com vários artefatos/branches usando o Azure Pipelines

## Sumário
* [Situação](#situacao)
* [Solução](#solucao)
* [Conclusão](#conclusao)

<a name="situacao"></a>
### Situação

O Azure Pipelines é uma ferramenta muito versátil e que pode ser expandida e/ou adaptada para atender as estratégias de branching mais diferentes, mas esses cenários mais especiais geralmente acabam em workarounds de todos os tipos, com isso em mente escrevo esse artigo.

Em várias estratégias, como por exemplo GitFlow, várias branches de vida longa existem ao mesmo tempo e em alguns casos isso significa processos e regras diferentes para cada uma das branches.

Pense em um caso no qual temos uma branch chamada Development, os artefatos gerados a partir dessa branch são todos entregues ao ambiente chamado Dev; os artefatos gerados da branch Release são entregues ao ambiente Prod.

Para que essas entregas sejam feitas corretamente é comum que vejamos **mais de uma Release Definition para o mesmo repositório**, “release-prod” e “release-dev” por exemplo, mas isso cria uma separação que descentraliza os processos relacionados ao mesmo repositório, isso gera retrabalho e granularidade no momento de rastrear os eventos relacionados ao repositório ou de mudar a Release Definition em si.

O cenário se parece com esse: 

![situacao-ex1](https://dev-to-uploads.s3.amazonaws.com/i/19qrapakg3h1n14omkls.png)

<a name="solucao"></a>

### Solução

Uma forma de evitar essa situação e manter suas Release Definitions enxutas e funcionais mesmo com vários artefatos é utilizar os **Artifact/Branch Filters**!

Ao invés de criar duas Release Definitions separadas para o mesmo repositório, crie uma só e separe os diferentes ambientes em diferentes estágios, como no exemplo: 

![solucao-ex1](https://dev-to-uploads.s3.amazonaws.com/i/crzajzs6h54z19ch4lxq.png)

O segredo está em vincular seus artefatos todos ao pipeline com as referências às branches de origem correta e filtrar os artefatos nos estágios.

A seleção da branch de origem do artefato deverá se parecer com isso, com a branch desejada ocupando o lugar do nome "master" do exemplo abaixo.

![solucao-ex2](https://dev-to-uploads.s3.amazonaws.com/i/yq5osbtybwkvi52z1kxm.png)

A seleção em si dos filtros que garantem a entrega de apenas uma branch para cada ambiente deve ser feita selecionando o ícone de "raio/pessoa" que antecede os ambientes.

![solucao-ex3](https://dev-to-uploads.s3.amazonaws.com/i/uexlsmpfpvtik8arexab.png)

Essa seleção deverá ser feita em cada ambiente de acordo com a necessidade. Nesse caso bastou configurar a branch master para o ambiente de produção e uma outra branch para o ambiente de desenvolvimento.

<a name="conclusao"></a>

### Conclusão

Esse artigo descreve o uso de artifact filters para a solução de uma situação real em que existem vários artefatos para um mesmo repositório. Caso a aplicação dessa ferramenta ainda não esteja clara, dê uma lida na [documentação oficial da Microsoft](https://docs.microsoft.com/en-us/azure/devops/pipelines/release/deploy-mulitple-branches?view=azure-devops) ou deixe suas dúvidas e situações nos comentários!