<?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: Vinícius Moraes</title>
    <description>The latest articles on DEV Community by Vinícius Moraes (@vinigmoraes).</description>
    <link>https://dev.to/vinigmoraes</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%2Fuser%2Fprofile_image%2F471446%2F3805a8f4-ff05-49b4-8407-9328729bbb94.JPG</url>
      <title>DEV Community: Vinícius Moraes</title>
      <link>https://dev.to/vinigmoraes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vinigmoraes"/>
    <language>en</language>
    <item>
      <title>Porque você deveria ser  tecnicamente o pior desenvolvedor do seu time</title>
      <dc:creator>Vinícius Moraes</dc:creator>
      <pubDate>Wed, 09 Dec 2020 04:25:21 +0000</pubDate>
      <link>https://dev.to/vinigmoraes/porque-voce-deveria-ser-tecnicamente-o-pior-desenvolvedor-da-sua-equipe-257n</link>
      <guid>https://dev.to/vinigmoraes/porque-voce-deveria-ser-tecnicamente-o-pior-desenvolvedor-da-sua-equipe-257n</guid>
      <description>&lt;p&gt;Provavelmente você deve estar se perguntando o porque você deveria escolher ser tecnicamente o pior desenvolvedor do seu time, e se isso seria algo ruim, certo?.&lt;/p&gt;

&lt;p&gt;Nesse artigo eu gostaria de compartilhar com você, o meu ponto de vista sobre esse assunto e o porque eu considero isso é extremamente importante.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escolhendo o time certo 👉
&lt;/h3&gt;

&lt;p&gt;A partir do momento que você é o desenvolvedor com menos conhecimento técnico do seu time, a tendência é que você aprenda muito pelo fato de estar com outras pessoas que tem um conhecimento técnico maior que o seu, por exemplo quando o seu time começar alguma conversa sobre decisões arquiteturais, design de aplicação, frameworks ou linguagens de programação, assim é possível que você tenha acesso a ideias e argumentos que nunca tinha se quer pensado a respeito.&lt;/p&gt;

&lt;p&gt;Já é comprovado que o meio no qual convivemos acaba nos influenciando positivamente ou negativamente, se estamos em um time no qual o nível técnico é maior do que conhecemos, podemos melhorar nossas habilidades, apenas levando em conta com quem estamos trabalhando, sendo assim ficar em um time no qual você está estagnado tecnicamente por muito tempo pode impactar diretamente no seu conhecimento.&lt;/p&gt;

&lt;p&gt;As pessoas ao seu redor afetam a sua performance, pois então escolha bem o seu time :)&lt;/p&gt;

&lt;h3&gt;
  
  
  Encontrando um time 🔎
&lt;/h3&gt;

&lt;p&gt;Não necessariamente você precisa mudar de time no seu trabalho ou até mesmo de empresa só porque gostaria de trabalhar com pessoas melhores, você pode encontrar outras situações, algumas ideias de como conseguir se expor a esse tipo de situação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Encontre um projeto Open Source no qual você gostaria de compartilhar e que os desenvolvedores parecem estar em um nível técnico acima do seu, desenvolvedores estão frequentemente procurando por projetos para ocupar seu tempo livre.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Participe de encontro de grupos presenciais ou online sobre assuntos que você tenha interesse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Participe de conversas técnicas com desenvolvedores mais experientes do que você, nem que seja apenas para ficar de ouvinte, assim você conseguira ter acesso a argumentos e pontos de vistas diferentes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sendo o "pior" do seu grupo 🧑‍💻
&lt;/h3&gt;

&lt;p&gt;Após encontrar um time no qual você pode fazer parte, tenha em mente algumas atitudes que podem te ajudar nesse momento de evolução técnica.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Peça feedbacks constantes sobre o seu trabalho ou colaboração, muitas vezes não conseguimos enxergar quais pontos podemos melhorar, o ponto de vista de outro desenvolvedor pode te ajudar nesse aspecto.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recomendações de livros e cursos, como desenvolvedor sempre estamos em busca de novos conhecimentos, porque não perguntar quais livros o seu time poderia te indicar?, ou quais cursos eles estão fazendo ultimamente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Programação em par ou pareamento, quando tiver a oportunidade e se possível procure um desenvolvedor que tenha alguma habilidade técnica que você queira aprender, essa é uma ótima forma de ver como outro desenvolvedor pensa quando está desenvolvendo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando começamos a conviver em um time no qual propõe esse tipo de cenário, começamos a achar que somos inexplicavelmente mais inteligente por estar convivendo com pessoas tecnicamente superiores a nós, você pode até mesmo falar e escrever de forma mais inteligente, seus códigos ficam mais elegantes e você acredita ser capaz de resolver problemas difíceis com soluções cada vez mais criativas.&lt;/p&gt;




&lt;p&gt;Muito obrigado por ler esse post, espero que ele tenha te ajudado de alguma forma, e caso tenha ficado com alguma dúvida em relação aos pontos abordados, sinta-se a vontade para deixar um comentário 😄&lt;/p&gt;

</description>
      <category>career</category>
      <category>programming</category>
      <category>braziliandevs</category>
      <category>beginners</category>
    </item>
    <item>
      <title>4 essentials tips for beginners programmers</title>
      <dc:creator>Vinícius Moraes</dc:creator>
      <pubDate>Tue, 03 Nov 2020 01:32:30 +0000</pubDate>
      <link>https://dev.to/vinigmoraes/4-essentials-tips-for-beginners-programmers-34m7</link>
      <guid>https://dev.to/vinigmoraes/4-essentials-tips-for-beginners-programmers-34m7</guid>
      <description>&lt;h4&gt;
  
  
  🇧🇷 Portuguese version &lt;a href="https://dev.to/vinigmoraes/4-dicas-para-programadores-iniciantes-2d19"&gt;here&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;In 2020, I complete 7 years as a software developer, in this article I would like to share all important points, that I consider it can help you in your journey.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't be a Fullstack Developer 🤷‍♂️
&lt;/h3&gt;

&lt;p&gt;But be a Fullstack developer isn't good? my value as a profissional isn't grow because I know frontend &amp;amp; backend?, &lt;br&gt;
I'm going to explain to you why understand Frontend &amp;amp; Backend could be a bad choose.&lt;/p&gt;

&lt;p&gt;In the past web applications was build with Frontend and Backend in the same application, for example a web application using Java for Backend with Spring MvC as web framework and JSP(Java Server Pages) a technology responsible for create web pages using HTML.&lt;/p&gt;

&lt;p&gt;Fronted complexity was increasing more and more, with new ways to represent web pages and mobile applications like responsive interfaces, dynamics and others, that is impossible to create interfaces using technologies as JSP mentioned above, this also applies to Backend, which covers a huge range of technologies, practices and patterns in development.&lt;/p&gt;

&lt;p&gt;Trying to understand Backend &amp;amp; Frontend at same time, &lt;br&gt;
at least in the beginning of your career it ends up being something complex and totally unviable due to the infinity of technologies and frameworks that you would have to understand.&lt;/p&gt;

&lt;p&gt;To represent better all the points mentioned above, I will leave a link to a repository on Github that clearly shows all these points that I mentioned.&lt;/p&gt;

&lt;p&gt;It is possible to have a view of all the complexity we currently have for paths such as Frontend, Backend and DevOps.&lt;/p&gt;

&lt;p&gt;(The Developer Roadmap)[&lt;a href="https://github.com/kamranahmedse/developer-roadmap"&gt;https://github.com/kamranahmedse/developer-roadmap&lt;/a&gt;]&lt;/p&gt;

&lt;h3&gt;
  
  
  Practice as much as you can 🧑‍💻
&lt;/h3&gt;

&lt;p&gt;Programming is a profession of practice, so more you practice better you will get, when you have free time and if you can, practice, this will help you when you have to develop a new feature or solve a problem in the real world.&lt;/p&gt;

&lt;p&gt;Practice constantly will expose you to a lot of situations very similar to what we have in a real world applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solving Bugs&lt;/li&gt;
&lt;li&gt;Configuration of application and frameworks&lt;/li&gt;
&lt;li&gt;Code design of application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know in the beginning it can be difficult to think in some projects ideas to develop, so I will leave here some github repositories that can help you start a new project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CollabCodeTech/backend-challenges"&gt;Backend Challenges&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/felipefialho/frontend-challenges"&gt;Frontend Challenges&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/florinpop17/app-ideas"&gt;App Ideias&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't forget to put all the projects you created practicing on &lt;a href="https://github.com/"&gt;Github&lt;/a&gt;, so in addition sharing all your learning, it would also be available for other developers to learn and be inspired by with your project, in addition to making your learning available to recruits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't think about the amount of your salary 💰
&lt;/h3&gt;

&lt;p&gt;Programmer is currently a well-paid profession due to the lack of professionals and the growth of technologies in companies, however, at the beginning of your career, focus as much as you can on learning, if you are in college do your best to get an internship, so that you will get experience and may even become a junior programmer in the future.&lt;/p&gt;

&lt;p&gt;I have as a principle that salary is not only the money we receive when we work, but also all the learning we receive together with him.&lt;/p&gt;

&lt;p&gt;Stay calm with enough practice, studies and dedication you can be sure that you will get a good remuneration, and the more you dedicate yourself, the greater your value in the market, because currently the market is full of average programmers, average because most only practice in working hours, do not study in free time or at least update herself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get a hobby 🏂
&lt;/h3&gt;

&lt;p&gt;But how does this relate to programming?&lt;/p&gt;

&lt;p&gt;Have you ever been in a situation where you tried to solve a problem, ended up staying hours and hours and only managed to think of a solution when you stopped to cool your head?&lt;/p&gt;

&lt;p&gt;Programming is a creative process and requires a lot of mental effort, so you end up getting tired more quickly due to the effort to understand all the complexity implemented in the code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;An activity that involves passion and naturalness is extremely stimulating for the creative sectors of your mind&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Look for something you are happy to do, such as practice sports or playing an instrument.&lt;/p&gt;

&lt;p&gt;Thank you very much for reading this post, I hope it has helped you in some way, and if you have any questions, feel free to leave a comment 😄&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>codenewbie</category>
      <category>beginners</category>
    </item>
    <item>
      <title>4 dicas essenciais para programadores iniciantes </title>
      <dc:creator>Vinícius Moraes</dc:creator>
      <pubDate>Sun, 11 Oct 2020 19:43:42 +0000</pubDate>
      <link>https://dev.to/vinigmoraes/4-dicas-para-programadores-iniciantes-2d19</link>
      <guid>https://dev.to/vinigmoraes/4-dicas-para-programadores-iniciantes-2d19</guid>
      <description>&lt;h4&gt;
  
  
  🇬🇧 English version &lt;a href="https://dev.to/vinigmoraes/4-essentials-tips-for-beginners-programmers-34m7"&gt;here&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;No ano de 2020 completo 7 anos como desenvolvedor de software, e nesse artigo gostaria de compartilhar alguns pontos que eu considero importante, e que podem te ajudar nesse começo da sua jornada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Não seja um Desenvolvedor Fullstack 🤷‍♂️
&lt;/h3&gt;

&lt;p&gt;Mas ser um desenvolvedor fullstack não é algo bom? o meu valor no mercado não irá aumentar por saber tanto o frontend quanto o backend?, vou te explicar porque na minha opinião começar a carreira tentando entender tanto o frontend quanto o backend pode ser uma má escolha.&lt;/p&gt;

&lt;p&gt;Antigamente as aplicações web eram feitas com o frontend e o backend na mesma aplicação, por exemplo uma aplicação web utilizando Java para desenvolver o backend com Spring MvC como framework web e JSP (Java Server Pages) uma tecnologia responsável por criar páginas web utilizando HTML.&lt;/p&gt;

&lt;p&gt;Com a complexidade do Frontend aumentando cada vez mais, com novas formas de representar páginas web e aplicativos móveis como interfaces responsivas, dinâmicas entre outros, não seria possível criar interfaces dessa forma utilizando tecnologias como JSP citada acima, sendo assim a complexidade para se entender o Frontend é enorme, isso também se aplica ao Backend que abrange uma enorme gama de tecnologias, práticas e padrões no desenvolvimento.&lt;/p&gt;

&lt;p&gt;Ao tentar entender backend e frontend ao mesmo tempo, pelo menos no inicio de sua carreira acaba sendo algo complexo e totalmente inviável devido a infinidade de tecnologias e frameworks que você teria que entender.&lt;/p&gt;

&lt;p&gt;Para representar melhor todos os pontos que citei acima, vou deixar um link para um repositório no Github que mostra com clareza todos esses pontos que citei.&lt;/p&gt;

&lt;p&gt;Nele é possível ter uma visão de toda a complexidade que temos atualmente para os caminhos como Frontend, Backend e DevOps&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kamranahmedse/developer-roadmap"&gt;The Developer Roadmap&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pratique o máximo que puder 🧑‍💻
&lt;/h3&gt;

&lt;p&gt;Programação é uma profissão de prática e quanto mais você praticar melhor irá ficar, quando tiver um tempo livre e se puder pratique, isso irá te ajudar quando você tiver que desenvolver alguma nova funcionalidade ou resolver algum problema no mundo real.&lt;/p&gt;

&lt;p&gt;Praticando constantemente irá te expor a situações muito parecidos com o que temos na "vida real", como por exemplo: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resolução de Bugs&lt;/li&gt;
&lt;li&gt;Configurações de projetos e frameworks&lt;/li&gt;
&lt;li&gt;Organização e design da sua aplicação&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sei que no começo acaba sendo difícil pensar em ideias de projetos para desenvolver sendo assim vou deixar aqui embaixo alguns links úteis de ideias de projetos :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CollabCodeTech/backend-challenges"&gt;Backend Challenges&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/felipefialho/frontend-challenges"&gt;Frontend Challenges&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/florinpop17/app-ideas"&gt;App Ideias&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não se esqueça de colocar todos os projetos que criou praticando no &lt;a href="https://github.com/"&gt;Github&lt;/a&gt;, assim além de armazenar e compartilhar todo o seu aprendizado, ele também ficaria disponível para que outros desenvolvedores possam aprender e se inspirar com o seu projeto, além de deixar disponível o seu aprendizado para os recrutados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Não pense no valor do seu salário 💰
&lt;/h3&gt;

&lt;p&gt;Programador atualmente é uma profissão bem remunerada devido a falta de profissionais e o crescimento da tecnologias nas empresas, porém no inicio de sua carreira foque o máximo que puder em aprender, se estiver na faculdade faça o possível para conseguir um estágio, pois assim você conseguira experiencia e podendo até se tornar um programador junior no futuro.&lt;/p&gt;

&lt;p&gt;Eu tenho como princípio que salário não é apenas o dinheiro que recebemos quando trabalhamos, mas também todo o aprendizado que recebemos junto com ele.&lt;/p&gt;

&lt;p&gt;Fique tranquilo com bastante prática, estudos e dedicação pode ter certeza que você irá conseguir uma boa remuneração, e quanto mais você se dedicar, maior será o seu valor no mercado, pois atualmente o mercado está cheio de programadores medianos, mediano pois a maioria apenas prática no horário de trabalho, não estuda no tempo livre ou ao menos se atualiza.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tenha um hobby 🏂
&lt;/h3&gt;

&lt;p&gt;Mas qual a relação disso com programação?.&lt;/p&gt;

&lt;p&gt;Você já passou pela situação na qual tentou solucionar um problema, acabou ficando horas e horas e só conseguiu pensar em uma solução quando parou para esfriar a cabeça?.&lt;/p&gt;

&lt;p&gt;Programação é um processo criativo e que exige um esforço mental muito grande, assim você acaba se cansando mais rapidamente devido ao esforço para entender toda a complexidade implementada no código.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Uma atividade que envolva paixão e naturalidade é extremamente estimulante para os setores criativos da sua mente&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Procure algo que você tenha prazer em fazer, como praticar esporte ou tocar algum instrumento.&lt;/p&gt;

&lt;p&gt;Muito obrigado por ler esse post, espero que ele tenha te ajudado de alguma forma, e caso tenha ficado com alguma dúvida em relação aos pontos abordados, sinta-se a vontade para deixar um comentário 😄&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>braziliandevs</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Entrega Contínua: Análise de código, testes, build e deploy automatizado com CircleCI &amp; gradle</title>
      <dc:creator>Vinícius Moraes</dc:creator>
      <pubDate>Tue, 29 Sep 2020 12:46:59 +0000</pubDate>
      <link>https://dev.to/vinigmoraes/entrega-continua-analise-de-codigo-testes-build-e-deploy-automatizado-com-circleci-gradle-4fl4</link>
      <guid>https://dev.to/vinigmoraes/entrega-continua-analise-de-codigo-testes-build-e-deploy-automatizado-com-circleci-gradle-4fl4</guid>
      <description>&lt;p&gt;Nos últimos dias, venho estudando sobre entrega contínua, e, durante esse processo acabei criando um pipeline no qual eu vou compartilhar nesse post com vocês :)&lt;/p&gt;

&lt;p&gt;Se você ainda não sabe o que é entrega contínua clique &lt;a href="https://pt.wikipedia.org/wiki/Entrega_cont%C3%ADnua"&gt;aqui&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  O que será abordado nesse post ?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Análise código(bugs, segurança e vulnerabilidades) utilizando SonarQube&lt;/li&gt;
&lt;li&gt;Testes unitários e de Integração rodando em paralelo para otimizar o pipeline&lt;/li&gt;
&lt;li&gt;Build do projeto&lt;/li&gt;
&lt;li&gt;Deploy automático da aplicação no Heroku&lt;/li&gt;
&lt;li&gt;Teste de API após o deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A ferramenta que eu estou utilizando como CD(entrega contínua) é o &lt;a href="https://circleci.com/github-enterprise-and-circleci/?utm_source=gb&amp;amp;utm_medium=SEM&amp;amp;utm_campaign=SEM-gb-Ld-latam&amp;amp;utm_content=SEM-gb-Ld-latam-CircleCI&amp;amp;utm_term=GHEntLP&amp;amp;gclid=CjwKCAjw8MD7BRArEiwAGZsrBWSuY43Yk4e5_y36jey6VN9bG2tOtFlkwTGW91BjxqhnKehji3UoVBoCEsMQAvD_BwE"&gt;CircleCI&lt;/a&gt;, sendo assim, é nela que eu irei mostrar os exemplos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CircleCI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;É uma plataforma de integração e entrega contínua (CICD) para sistemas operacionais como Linux, macOS e Android e etc, totalmente em nuvem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Talk is cheap, show me the code
&lt;/h3&gt;

&lt;p&gt;Nosso primeiro passo é criar as tasks no &lt;a href="https://gradle.org/"&gt;gradle&lt;/a&gt; para o teste unitário e teste de integração, isso nos ajudara a separar o jobs na execução do pipeline.&lt;/p&gt;

&lt;p&gt;O código das tasks ficará assim no arquivo build.gradle.kts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;
&lt;span class="nf"&gt;tasks&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"unitTest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;includeTestsMatching&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"br.com.projeto.core.*"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nf"&gt;testLogging&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PASSED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FAILED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"integrationTest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;includeTestsMatching&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"integration.*"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nf"&gt;testLogging&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PASSED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FAILED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;Basicamente&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="n"&gt;unitTest&lt;/span&gt; &lt;span class="n"&gt;roda&lt;/span&gt; &lt;span class="n"&gt;todos&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt; &lt;span class="n"&gt;testes&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt; &lt;span class="n"&gt;estão&lt;/span&gt; &lt;span class="n"&gt;dentro&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;pacote&lt;/span&gt; &lt;span class="n"&gt;`br&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;projeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.*&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;já&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="n"&gt;integrationTest&lt;/span&gt; &lt;span class="n"&gt;como&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;próprio&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="n"&gt;já&lt;/span&gt; &lt;span class="n"&gt;diz&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;executa&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt; &lt;span class="n"&gt;testes&lt;/span&gt; &lt;span class="n"&gt;de&lt;/span&gt; &lt;span class="n"&gt;integração&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;pacote&lt;/span&gt; &lt;span class="n"&gt;`integration&lt;/span&gt;&lt;span class="p"&gt;.*&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;duas&lt;/span&gt; &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="n"&gt;tem&lt;/span&gt; &lt;span class="n"&gt;como&lt;/span&gt; &lt;span class="n"&gt;configuração&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt; &lt;span class="n"&gt;mostrando&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt; &lt;span class="n"&gt;testes&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt; &lt;span class="n"&gt;passaram&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt; &lt;span class="n"&gt;falharam&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No meu caso, a estrutura dos pacotes de testes do meu projeto estão assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test &amp;gt; kotlin &amp;gt; br.com.projeto.core (testes unitários)
test &amp;gt; kotlin &amp;gt; integration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Certo, agora que temos essas duas tasks, podemos inclui-las no nosso arquivo &lt;strong&gt;config.yml&lt;/strong&gt; do CircleCI que está no projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  unit-test:
    working_directory: ~/
    docker:
      - image: circleci/openjdk:11-jdk-stretch-node-browsers
    steps:
      - checkout
      - run:
          name: Unit tests
          command: ./gradlew unitTest

  integration-test:
    working_directory: ~/
    machine: true
    environment:
      JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      JAVA_TOOL_OPTIONS: "-Xmx4G"
      GRADLE_OPTS: "-Xmx4G -Dorg.gradle.daemon=false -DdisablePreDex"
    steps:
      - run:
          name: Download Java 11
          command: |
            sudo apt update
            sudo apt install openjdk-11-jdk
      - checkout
      - run:
          name: Integration tests
          command: ./gradlew integrationTest

workflows:
 'Test, Build and Deploy Workflow':
  jobs:
    - unit-test
    - integration-test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nosso segundo passo, é configurar o SonarQube no projeto, para que o pipeline faça o upload da análise automaticamente no SonarCloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SonarQube&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;É uma ferramente para análise de código, sendo possível analisar qualidade de código, bugs e possíveis falhas de segurança.&lt;/p&gt;

&lt;p&gt;Dentro do arquivo build.gradle.kts é necessário inserir o código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nf"&gt;plugins&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"org.sonarqube"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s"&gt;"3.0"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;sonarqube&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;properties&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sonar.projectKey"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"chave do seu projeto"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sonar.organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"sua organizacao"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sonar.host.url"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"https://sonarcloud.io"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso, agora precisamos adicionar o job no pipeline, adicionando no arquivo config.yml:&lt;/p&gt;

&lt;p&gt;Não se preocupe com o arquivo config.yml agora, vou deixar ele completo no final do post :D&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  code_analysis:
    docker:
      - image: circleci/openjdk:11-jdk-stretch-node-browsers
    steps:
      - checkout
      - run:
          name: Sonarqube analysis
          command: ./gradlew sonarqube

workflows:
 'Test, Build and Deploy Workflow':
  jobs:
    - unit-test
    - integration-test
    - code_analysis:
        requires:
           - unit-test
           - integration-test
        context: sonarqube
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repare que no job de &lt;strong&gt;code_analysis&lt;/strong&gt; foi adicionado a tag requires que indica que esse job só deve ser executado após os jobs unit-test e integration-test terem sido executados com sucesso, a tag (context)[&lt;a href="https://circleci.com/docs/2.0/contexts/"&gt;https://circleci.com/docs/2.0/contexts/&lt;/a&gt;] indica que o Job deve utilizar o context criado no CircleCI (no caso sonarqube) utilizando as variáveis que foram definidas nesse contexto.&lt;/p&gt;

&lt;p&gt;Certo, agora que adicionamos os testes e a análise de código precisamos executar o build do projeto para que seja gerado o pacote para o deploy da aplicação.&lt;/p&gt;

&lt;p&gt;Vamos adicionar o job que executa o build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   build:
    working_directory: ~/
    docker:
      - image: circleci/openjdk:11-jdk-stretch-node-browsers
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "build.gradle.kts" }}
            - v1-dependencies-
      - run:
          name: Run assemble
          command: ./gradlew clean assemble
      - save_cache:
          paths:
            - ~/.gradle
          key: v1-dependencies-{{ checksum "build.gradle.kts" }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que conseguimos fazer o build da nossa aplicação de forma automatizada, vamos para a próxima etapa, no caso o deploy.&lt;/p&gt;

&lt;p&gt;O CircleCI disponibiliza &lt;a href="https://circleci.com/docs/2.0/orb-intro"&gt;orbs&lt;/a&gt; que de forma resumida, são pacotes open source que reduzem a complexidade de configuração para criar jobs, commands e executors. Vamos utilizar a orb do &lt;a href="//www.heroku.com"&gt;Heroku&lt;/a&gt; para executar o deploy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: 2.1

orbs:
  heroku: circleci/heroku@1.2.2
jobs:
   \* lista de jobs *\

workflows:
  'Test, Build and Deploy Workflow':
    jobs:
      - unit-test:
      - integration-test:
      - code_analysis:
          requires:
            - unit-test
            - integration-test
          context: sonarqube
      - build:
          requires:
            - unit-test
            - integration-test
      - heroku/deploy-via-git:
          requires:
            - build
          filters:
            branches:
              only: master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não se esqueça de configurar o seu arquivo Procfile do Heroku :) no meu caso ficou assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: java -jar build/libs/projeto.jar -port=${PORT}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o deploy configurado, temos a última etapa que seria o teste de API após o deploy para verificar se os endpoints da aplicação continuam funcionando corretamente (nesse exemplo, temos apenas um ambiente, mas seria interessante executar os testes de API em um ambiente de desenvolvimento ou staging antes do deploy ser executado em produção).&lt;/p&gt;

&lt;p&gt;Para essa etapa, utilizei a Orb do CircleCI chamada Postman Newman no qual lê uma collection.json de um determinado path e executa.&lt;/p&gt;

&lt;p&gt;Como é uma orb, devemos adiciona-lá no arquivo &lt;strong&gt;config.yml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: 2.1

orbs:
  heroku: circleci/heroku@1.2.2
  newman: postman/newman@0.0.2
jobs:
   \* lista de jobs *\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos adicionar o job correspondente ao nosso teste de API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; api-test:
    working_directory: ~/
    executor: newman/postman-newman-docker
    steps:
      - checkout
      - newman/newman-run:
          collection: postman/projeto-collection.json
          environment: postman/projeto-environment.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A propriedade environment contém a URL que foi gerada no Heroku durante o deploy.&lt;/p&gt;

&lt;p&gt;No final o pipeline deve ficar dessa forma no CircleCI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p9PGrCoh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d5yep7zaa3f0old7n8ui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p9PGrCoh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d5yep7zaa3f0old7n8ui.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Arquivo &lt;strong&gt;config.yml&lt;/strong&gt; completo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: 2.1

orbs:
  newman: postman/newman@0.0.2
  heroku: circleci/heroku@1.2.2

jobs:
  unit-test:
    working_directory: ~/
    docker:
      - image: circleci/openjdk:11-jdk-stretch-node-browsers
    steps:
      - checkout
      - run:
          name: Unit tests
          command: ./gradlew unitTest

  integration-test:
    working_directory: ~/
    machine: true
    environment:
      JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      JAVA_TOOL_OPTIONS: "-Xmx4G"
      GRADLE_OPTS: "-Xmx4G -Dorg.gradle.daemon=false -DdisablePreDex"
    steps:
      - run:
          name: Download Java 11
          command: |
            sudo apt update
            sudo apt install openjdk-11-jdk
      - checkout
      - run:
          name: Integration tests
          command: ./gradlew integrationTest
  code_analysis:
    docker:
      - image: circleci/openjdk:11-jdk-stretch-node-browsers
    steps:
      - checkout
      - run:
          name: Sonarqube analysis
          command: ./gradlew sonarqube

  build:
    working_directory: ~/
    machine: true
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "build.gradle.kts" }}
            - v1-dependencies-
      - run:
          name: Run assemble
          command: ./gradlew clean assemble
      - save_cache:
          paths:
            - ~/.gradle
          key: v1-dependencies-{{ checksum "build.gradle.kts" }}

  api-test:
    working_directory: ~/
    executor: newman/postman-newman-docker
    steps:
      - checkout
      - newman/newman-run:
          collection: postman/collection.json
          environment: postman/environment.json

workflows:
  'Test, Build and Deploy Workflow':
    jobs:
      - unit-test
      - integration-test
      - code_analysis:
          requires:
            - unit-test
            - integration-test
          context: sonarqube
      - build:
          requires:
            - unit-test
            - integration-test
      - heroku/deploy-via-git:
          requires:
            - build
          filters:
            branches:
              only: master
      - api-test:
          requires:
            - heroku/deploy-via-git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arquivo build.gradle.kts completo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;
&lt;span class="nf"&gt;plugins&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;kotlin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"jvm"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s"&gt;"1.3.61"&lt;/span&gt;
    &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"org.sonarqube"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s"&gt;"3.0"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;sonarqube&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;properties&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sonar.projectKey"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"chave do projeto"&lt;/span&gt;
        &lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sonar.organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"organization"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sonar.host.url"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"https://sonarcloud.io"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;tasks&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"stage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;dependsOn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"installDist"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"unitTest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;includeTestsMatching&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"br.com.projeto.core.*"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nf"&gt;testLogging&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PASSED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FAILED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"integrationTest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;includeTestsMatching&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"integration.*"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nf"&gt;testLogging&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PASSED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TestLogEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FAILED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse foi apenas um exemplo do que é possível fazer com o seu pipeline, existem vários outros jobs que podem ser adicionados como lint, gerar documentação, smoke testes, automatização de comandos do git, basta usar sua imaginação :)&lt;/p&gt;

&lt;p&gt;Espero que esse post tenha te ajudado de alguma forma.&lt;/p&gt;

&lt;p&gt;Muito obrigado por ler esse post, caso tenha ficado com alguma dúvida ou tenha alguma sugestão, sinta-se livre para deixar um comentário 😀&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>programming</category>
      <category>devops</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
