<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LontriTech</title>
    <description>The latest articles on DEV Community by LontriTech (@lontritech).</description>
    <link>https://dev.to/lontritech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9495%2F4282ef75-4eb9-44fb-8f8b-3011003a65f5.png</url>
      <title>DEV Community: LontriTech</title>
      <link>https://dev.to/lontritech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lontritech"/>
    <language>en</language>
    <item>
      <title>Implemente os Azure YAML Pipelines NESSA sprint!</title>
      <dc:creator>Leonardo Rodrigues de Oliveira</dc:creator>
      <pubDate>Sat, 29 Aug 2020 23:58:22 +0000</pubDate>
      <link>https://dev.to/lontritech/implemente-os-azure-yaml-pipelines-nessa-sprint-2mo3</link>
      <guid>https://dev.to/lontritech/implemente-os-azure-yaml-pipelines-nessa-sprint-2mo3</guid>
      <description>&lt;p&gt;Tem algum tempo que a Microsoft anunciou a &lt;a href="https://docs.microsoft.com/pt-br/azure/devops/release-notes/2020/sprint-168-update#multi-stage-pipelines-ga" rel="noopener noreferrer"&gt;disponibilidade geral dos pipelines YAML&lt;/a&gt; para todos os estágios dos ciclos de vida das aplicações, e qual é a diferença entre esses pipelines e os antigos, baseados em interface?&lt;/p&gt;

&lt;h2&gt;
  
  
  As diferenças:
&lt;/h2&gt;

&lt;p&gt;Bom, falo com propriedade quando digo que administrar um pipeline comum é realmente simples, mas como tudo na vida de quem é de tecnologia, a coisa muda de figura quando escalamos...&lt;/p&gt;

&lt;p&gt;E aqui a complexidade também é exponencial, tente administrar uma centena de pipelines usando a interface da Microsoft e você vai saber o que quero dizer, toda alteração, por menor que seja, tem que ser feita para &lt;strong&gt;todos os pipelines&lt;/strong&gt;, e não há alteração em lote, nem API, somente o trabalho manual e repetitivo vai aplicar aquela correção imprescindível que garante a entrega do código. :)&lt;/p&gt;

&lt;p&gt;Nos pipelines YAML esse cenário muda e muito! O &lt;a href="https://docs.microsoft.com/pt-br/azure/devops/pipelines/process/templates?view=azure-devops" rel="noopener noreferrer"&gt;uso de templates&lt;/a&gt; garante a modularização e facilita a correção e melhoria em lote.&lt;/p&gt;

&lt;p&gt;Além de ser muito simples copiar e colar partes de arquivos YAML, bem mais rápido que navegar pela interface, mesmo que você seja o Ayrton Senna dos mouses...&lt;/p&gt;

&lt;p&gt;E &lt;strong&gt;não ouse&lt;/strong&gt; se preocupar em decorar as tasks, temos uma extensa documentação e um assistente muito legal para gerar e alterar as tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas, eu vou ter só um pipeline por repositório?
&lt;/h2&gt;

&lt;p&gt;Só se você quiser! A recomendação da Microsoft é que o arquivo contendo o YAML do pipeline se chame &lt;code&gt;azure-pipelines.yaml&lt;/code&gt; e que ele fique na raiz do repositório, mas isso é só uma recomendação, o importante é fazer o apontamento certo na tela de criação de pipelines e você pode se organizar como preferir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas, o pipeline vai executar inteiro, todas as vezes?
&lt;/h2&gt;

&lt;p&gt;Não precisa ser assim, &lt;a href="https://docs.microsoft.com/pt-br/azure/devops/pipelines/process/conditions?view=azure-devops&amp;amp;tabs=yaml" rel="noopener noreferrer"&gt;temos as conditions&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;E tem ainda mais, alterou o &lt;code&gt;README.md&lt;/code&gt; e não quer que isso dispare toda uma série de tarefas? &lt;a href="https://docs.microsoft.com/pt-br/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&amp;amp;tabs=yaml#ci-triggers" rel="noopener noreferrer"&gt;Use os filtros&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas afinal, como implementar?
&lt;/h2&gt;

&lt;p&gt;Temos um &lt;a href="https://docs.microsoft.com/pt-br/azure/devops/pipelines/create-first-pipeline?view=azure-devops&amp;amp;tabs=java%2Cyaml%2Cbrowser%2Ctfs-2018-2" rel="noopener noreferrer"&gt;guia&lt;/a&gt; para quem está começando!&lt;/p&gt;

&lt;h2&gt;
  
  
  E mais uma coisa!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Todo&lt;/strong&gt; o processo de CI/CD, build, testes, release e qualquer outro estágio que você possa vir a precisar, pode e deve ser implementado, inclusive no mesmo arquivo.&lt;/p&gt;

&lt;p&gt;Para conseguir a divisão lógica da qual você vai precisar nesse ponto, use a sepração de stages, como é explicado &lt;a href="https://docs.microsoft.com/pt-br/azure/devops/pipelines/process/stages?view=azure-devops&amp;amp;tabs=yaml" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>yaml</category>
    </item>
    <item>
      <title>Release Definition com vários artefatos usando Azure Pipelines</title>
      <dc:creator>Leonardo Rodrigues de Oliveira</dc:creator>
      <pubDate>Sun, 12 Jul 2020 22:11:57 +0000</pubDate>
      <link>https://dev.to/lontritech/release-definition-com-varios-artefatos-usando-azure-pipelines-57f5</link>
      <guid>https://dev.to/lontritech/release-definition-com-varios-artefatos-usando-azure-pipelines-57f5</guid>
      <description>&lt;h3&gt;
  
  
  Como criar uma release definition com vários artefatos/branches usando o Azure Pipelines
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Sumário
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Situação&lt;/li&gt;
&lt;li&gt;Solução&lt;/li&gt;
&lt;li&gt;Conclusão&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Situação
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Para que essas entregas sejam feitas corretamente é comum que vejamos &lt;strong&gt;mais de uma Release Definition para o mesmo repositório&lt;/strong&gt;, “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.&lt;/p&gt;

&lt;p&gt;O cenário se parece com esse: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F19qrapakg3h1n14omkls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F19qrapakg3h1n14omkls.png" alt="situacao-ex1" width="672" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solução
&lt;/h3&gt;

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

&lt;p&gt;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: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcrzajzs6h54z19ch4lxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcrzajzs6h54z19ch4lxq.png" alt="solucao-ex1" width="764" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyq5osbtybwkvi52z1kxm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyq5osbtybwkvi52z1kxm.png" alt="solucao-ex2" width="631" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuexlsmpfpvtik8arexab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuexlsmpfpvtik8arexab.png" alt="solucao-ex3" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;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 &lt;a href="https://docs.microsoft.com/en-us/azure/devops/pipelines/release/deploy-mulitple-branches?view=azure-devops" rel="noopener noreferrer"&gt;documentação oficial da Microsoft&lt;/a&gt; ou deixe suas dúvidas e situações nos comentários!&lt;/p&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
