<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Void on Hira</title>
        <link>https://www.sitedoricardo.com.br/pt-br/categories/void/</link>
        <description>Recent content in Void on Hira</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>pt-br</language>
        <copyright>Hira</copyright>
        <lastBuildDate>Tue, 23 Jun 2020 02:46:15 -0300</lastBuildDate><atom:link href="https://www.sitedoricardo.com.br/pt-br/categories/void/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Entendendo os tipos de jobs</title>
        <link>https://www.sitedoricardo.com.br/pt-br/p/entendendo-os-tipos-de-jobs/</link>
        <pubDate>Tue, 23 Jun 2020 02:46:15 -0300</pubDate>
        
        <guid>https://www.sitedoricardo.com.br/pt-br/p/entendendo-os-tipos-de-jobs/</guid>
        <description>&lt;img src="https://www.sitedoricardo.com.br/p/markus-spiske-C0koz3G1I4I-unsplash.png" alt="Featured image of post Entendendo os tipos de jobs" /&gt;&lt;h2 id=&#34;introdução&#34;&gt;Introdução
&lt;/h2&gt;&lt;p&gt;Vamos entender os principais tipos de jobs existentes e vamos criar um pipeline básico de build de aplicação.&lt;/p&gt;
&lt;h2 id=&#34;setup-ambiente&#34;&gt;Setup Ambiente
&lt;/h2&gt;&lt;p&gt;Você pode utilizar &lt;a class=&#34;link&#34; href=&#34;https://github.com/Hirashiki/wsl2-docker-devops.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;meu repositório&lt;/code&gt;&lt;/a&gt; com o setup criado até agora com algumas melhorias.&lt;/p&gt;
&lt;p&gt;Execute o comando &lt;code&gt;./run.sh&lt;/code&gt; dentro da pasta &lt;code&gt;01_jenkins&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;cenário&#34;&gt;Cenário
&lt;/h2&gt;&lt;p&gt;Como exemplo, vamos usar o &lt;a class=&#34;link&#34; href=&#34;https://github.com/spring-projects/spring-petclinic.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Spring Boot Pet Clinic&lt;/a&gt; para demonstrar como criar um pipeline que simplesmente irá realizar o checkout do código e compilar.&lt;/p&gt;
&lt;h2 id=&#34;tools--no-jenkins&#34;&gt;&lt;em&gt;Tools&lt;/em&gt;  no Jenkins
&lt;/h2&gt;&lt;p&gt;Se você fosse realizar essa atividade no terminal de comando, você faria a seguinte sequência:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/spring-projects/spring-petclinic.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cd spring-petclinic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mvn clean package
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Você precisa do &lt;strong&gt;git&lt;/strong&gt; para checkout da aplicação, o &lt;strong&gt;maven&lt;/strong&gt; para compilar, e como é uma aplicação é em Java, precisa de uma &lt;strong&gt;jdk&lt;/strong&gt; para compilar.&lt;/p&gt;
&lt;p&gt;Para o Jenkins, todos estes itens são tratados como ferramentas. As configurações estão localizadas em Jenkins &amp;gt; Gerenciar Jenkins &amp;gt; Global Tool Configuration.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_01.png&#34;
	width=&#34;1499&#34;
	height=&#34;561&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_01_hubaa63ad0e91edcf042ed29b37f8cdf5e_20894_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_01_hubaa63ad0e91edcf042ed29b37f8cdf5e_20894_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Global Tools Configuration&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;267&#34;
		data-flex-basis=&#34;641px&#34;
	
&gt;
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_02.png&#34;
	width=&#34;1508&#34;
	height=&#34;293&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_02_huca2e8bd0bfcfa92529d794106c27aecb_8215_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_02_huca2e8bd0bfcfa92529d794106c27aecb_8215_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Global Tools Configuration&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;514&#34;
		data-flex-basis=&#34;1235px&#34;
	
&gt;
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_03.png&#34;
	width=&#34;1520&#34;
	height=&#34;565&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_03_hu35936f8e27178e2dd7a75a71a75714fb_22069_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_03_hu35936f8e27178e2dd7a75a71a75714fb_22069_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Global Tools Configuration&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;269&#34;
		data-flex-basis=&#34;645px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Utilizando o &lt;em&gt;Global Tool Configuration&lt;/em&gt; do Jenkins proporciona um nível de flexibilidade para a instalação de várias ferramentas, além de padronizá-las entre as máquinas executoras do jenkins.&lt;/p&gt;
&lt;h2 id=&#34;os-tipos-de-jobs&#34;&gt;Os Tipos de Jobs
&lt;/h2&gt;&lt;p&gt;Os existem vários jobs no jenkins uma instalação padrão contém os seguintes jobs:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_04.png&#34;
	width=&#34;955&#34;
	height=&#34;877&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_04_hu1206955c3a8f9bec0f06d4213fc133bd_60449_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_04_hu1206955c3a8f9bec0f06d4213fc133bd_60449_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;108&#34;
		data-flex-basis=&#34;261px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Freestyle&lt;/strong&gt;: Este é o modelo de job mais antigo do jenkins. Ele é o modo &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Low-code_development_platform&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&amp;ldquo;low code&amp;rdquo;&lt;/a&gt; para criação de jobs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipeline&lt;/strong&gt;: Tipo de job para execuções mais complexas, onde precisa de um nível de flexibilidade maior que o &lt;em&gt;Freestyle&lt;/em&gt;. Neste tipo de job, os processos dos jobs são tratados como código, seguindo o princípio &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline-as-code/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;em&gt;Pipeline as Code&lt;/em&gt;&lt;/a&gt;.
Ainda há duas subdivisões no modo de desenvolvimento do Pipeline: temos o &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline/#declarative-pipeline-fundamentals&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;em&gt;Declarative Pipeline&lt;/em&gt;&lt;/a&gt; e o &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline/#scripted-pipeline-fundamentals&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;em&gt;Scripted Pipeline&lt;/em&gt;&lt;/a&gt;. Enquanto no primeiro você está limitado a uma estrutura pré-defininda, no segundo você pode utilizar de todas as funcionalidades da linguagem de programação Groovy. Mais detalhes em &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline/syntax/#compare&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.jenkins.io/doc/book/pipeline/syntax/#compare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Múltiplas Configurações&lt;/strong&gt;: É um job &lt;em&gt;Freestyle&lt;/em&gt; com um mecanismo para executar várias vezes de acordo com parametrizações. Por exemplo: Imagine que você precise fazer um job que irá testar em um ambiente Linux e um ambiente Windows os browsers Firefox e Chrome. Você parametriza no job os ambientes (Linux, Windows), os browsers (Firefox e Chrome) e o Jenkins fará a combinação de todas as possibilidades para executar o job (Linux-Chrome, Linux-Firefox, Windows-Chorme, Windows-Firefox)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Folder&lt;/strong&gt;: Tipo especial de job para organização de Jobs em uma estrutura de Pastas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Github Organization&lt;/strong&gt;: Realiza um scan no seu repositório a partir de alguns critérios para executar um job padrão.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multibranch Pipeline&lt;/strong&gt;: Realiza um scan em um repositório e o jenkins gera automaticamente um job para cada branch encontrada.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;criando-um-pipeline&#34;&gt;Criando um pipeline
&lt;/h1&gt;&lt;p&gt;Selecione &lt;code&gt;Novo Job&lt;/code&gt;, digite o nome do job e clique em &lt;code&gt;pipeline&lt;/code&gt; e depois em Salvar:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_05.png&#34;
	width=&#34;1183&#34;
	height=&#34;1068&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_05_hu4b368a08cf54a1e5b19d45f1fa16a1f2_90484_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_05_hu4b368a08cf54a1e5b19d45f1fa16a1f2_90484_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;110&#34;
		data-flex-basis=&#34;265px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Dentro da seção Pipeline, cole o seguinte código:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;pipeline&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    agent any
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    stages &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        stage&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SCM Ckeckout&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            steps&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                checkout&lt;span class=&#34;o&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nv&#34;&gt;$class&lt;/span&gt;: &lt;span class=&#34;s1&#34;&gt;&amp;#39;GitSCM&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                    branches: &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;name: &lt;span class=&#34;s2&#34;&gt;&amp;#34;*/main&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                    doGenerateSubmoduleConfigurations: false, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                    extensions: &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                    submoduleCfg: &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                    userRemoteConfigs: &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                        url: &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/spring-projects/spring-petclinic.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        stage&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Build&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            steps&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;				withMaven&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                globalMavenSettingsConfig: &lt;span class=&#34;s2&#34;&gt;&amp;#34;mavenDefaultConfig&amp;#34;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                jdk: &lt;span class=&#34;s1&#34;&gt;&amp;#39;openjdk9&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                maven: &lt;span class=&#34;s1&#34;&gt;&amp;#39;maven3&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                mavenLocalRepo: &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/share/maven/.m2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                options:     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;artifactsPublisher&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;disabled: &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;					sh &lt;span class=&#34;s2&#34;&gt;&amp;#34;mvn clean package&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_06.png&#34;
	width=&#34;794&#34;
	height=&#34;574&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_06_hu53b00b0a44c688b1923caf507accccce_21619_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_06_hu53b00b0a44c688b1923caf507accccce_21619_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;138&#34;
		data-flex-basis=&#34;331px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Ao clicar em &lt;code&gt;Construir agora&lt;/code&gt; o job será executado.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_07.png&#34;
	width=&#34;1103&#34;
	height=&#34;811&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_07_hub3f82e256aa64ddf87287d2790b1d83c_65227_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_07_hub3f82e256aa64ddf87287d2790b1d83c_65227_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;136&#34;
		data-flex-basis=&#34;326px&#34;
	
&gt;
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_08.png&#34;
	width=&#34;1103&#34;
	height=&#34;911&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_08_hu5cc9a8a3c5181ecda5f2e00bdf210b74_80503_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_08_hu5cc9a8a3c5181ecda5f2e00bdf210b74_80503_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;121&#34;
		data-flex-basis=&#34;290px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Explicando cada linha, temos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;linha 1&lt;/strong&gt; define que estamos codificando um &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline/#declarative-pipeline-fundamentals&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pipeline declarativo&lt;/a&gt;. Sendo assim, existe uma estrutura básica a ser seguida;&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;linha 2&lt;/strong&gt;* define que iremos executar este pipeline em qualquer máquina disponível (&lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline/syntax/#agent&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;agent any&lt;/a&gt;). Um &lt;em&gt;agent&lt;/em&gt;  é qualquer máquina reconhecida pelo jenkins para executar os jobs;&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;linha 3&lt;/strong&gt; define o bloco de &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline/syntax/#stages&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;stages&lt;/a&gt; e na &lt;strong&gt;linha 4&lt;/strong&gt; já declaramos o primeiro stage chamado &amp;ldquo;SCM Checkout&amp;rdquo;. Em seguida, a &lt;strong&gt;linha 5&lt;/strong&gt; contém o bloco &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/pipeline/syntax/#declarative-steps&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;steps&lt;/a&gt;. Somente após seguir esta estrutura podemos realmente informar o que desejamos automatizar;&lt;/li&gt;
&lt;li&gt;As &lt;strong&gt;linhas 6 a 15&lt;/strong&gt; definem o comando &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/pipeline/steps/workflow-scm-step/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;checkout&lt;/a&gt;. Nele contém informações como por exemplo o tipo do repositório, a url do repositório e a branch. Particularmente, prefiro este comando ao invés do &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/pipeline/steps/git/#git-git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;git&lt;/a&gt; pela quantidade de funcionalidades disponíveis;&lt;/li&gt;
&lt;li&gt;As &lt;strong&gt;linhas 18 e 19&lt;/strong&gt; definem um novo bloco de stage chamado &amp;ldquo;Build&amp;rdquo;;&lt;/li&gt;
&lt;li&gt;As &lt;strong&gt;linhas 20 a 25&lt;/strong&gt; definem todas as configurações do &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/pipeline/steps/pipeline-maven/#withmaven-provide-maven-environment&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;maven&lt;/a&gt; que iremos utilizar: Utilizar os &lt;em&gt;settings&lt;/em&gt;  chamado &lt;code&gt;mavenDefaultConfig&lt;/code&gt;, informando a referencia da ferramenta instalada &lt;code&gt;openjdk9&lt;/code&gt; como a jdk a ser executada e com a versão do maven definida na ferramenta chamada &lt;code&gt;maven3&lt;/code&gt;. Aqui ainda informamos aonde está localizado o diretório &lt;code&gt;.m2&lt;/code&gt; do maven e que ao executar o comando, quero ignorar a geração do &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/using/fingerprints/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;em&gt;fingerprint&lt;/em&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Finalmente, na &lt;strong&gt;linha 26&lt;/strong&gt; executamos o maven (&lt;code&gt;mvn clean package&lt;/code&gt;) utilizando o comando &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-shell-script&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;sh&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;usando-o-snippet-generator&#34;&gt;Usando o &lt;em&gt;Snippet generator&lt;/em&gt;
&lt;/h2&gt;&lt;p&gt;Você não precisa saber todos esses comandos de cabeça, uma funcionalidade do jenkins é poder construir esses trechos de código em formato wizard. Para isto, utilizamos o link &lt;em&gt;Pipeline Syntax&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_09.png&#34;
	width=&#34;359&#34;
	height=&#34;402&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_09_hub6c89123d76b913cb4470b6f1c0bef93_19793_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_09_hub6c89123d76b913cb4470b6f1c0bef93_19793_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;89&#34;
		data-flex-basis=&#34;214px&#34;
	
&gt;
Você pode selecionar no combo &lt;em&gt;sample step&lt;/em&gt;  o comando desejado e preencher com as informações necessárias. Ao clicar no botão &lt;code&gt;Generate Pipeline Script&lt;/code&gt; ele irá gerar toda a linha de código necessária:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_10.png&#34;
	width=&#34;1319&#34;
	height=&#34;1040&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_10_hub4e05f1df9bcc158925392541d7e784c_67428_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_10_hub4e05f1df9bcc158925392541d7e784c_67428_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;126&#34;
		data-flex-basis=&#34;304px&#34;
	
&gt;
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_11.png&#34;
	width=&#34;1465&#34;
	height=&#34;1040&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/jenkins_jobs_11_huc3c6895b9e728f5813fa59bd69b40bc4_75602_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/jenkins_jobs_11_huc3c6895b9e728f5813fa59bd69b40bc4_75602_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jobs&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;140&#34;
		data-flex-basis=&#34;338px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;finalização&#34;&gt;Finalização
&lt;/h2&gt;&lt;p&gt;Tentei mostrar todos os &amp;ldquo;caminhos&amp;rdquo; que aprendi ao longo do tempo sobre como aprender a criar pipelines no Jenkins. Como toda a adaptação, a documentação no começo vai parecer confusa e com certeza, algumas partes faltam documentação. Porém, as necessidades principais estão bem estruturadas no site oficial.&lt;/p&gt;
&lt;p&gt;Por enquanto, nosso job só faz o checkout e o build. Nos próximos artigos vamos realizar incrementos para montar uma estrutura automatizada de build completa.&lt;/p&gt;
&lt;p&gt;Abraços&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a class=&#34;link&#34; href=&#34;https://unsplash.com/photos/C0koz3G1I4I&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Markus Spiske&lt;/a&gt; on Unsplash&lt;/em&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Melhorando as configurações com Jenkins e Docker</title>
        <link>https://www.sitedoricardo.com.br/pt-br/p/melhorando-as-configura%C3%A7%C3%B5es-com-jenkins-e-docker/</link>
        <pubDate>Thu, 11 Jun 2020 02:46:15 -0300</pubDate>
        
        <guid>https://www.sitedoricardo.com.br/pt-br/p/melhorando-as-configura%C3%A7%C3%B5es-com-jenkins-e-docker/</guid>
        <description>&lt;img src="https://www.sitedoricardo.com.br/p/formal_jenkins.png" alt="Featured image of post Melhorando as configurações com Jenkins e Docker" /&gt;&lt;h2 id=&#34;introdução&#34;&gt;Introdução
&lt;/h2&gt;&lt;p&gt;No artigo anterior foi apresentado como criar uma stack básica de desenvolvimento com o Jenkins. Agora vamos avaliar alguns desafios que surgiram e como melhorá-los.&lt;/p&gt;
&lt;h2 id=&#34;exlusão-de-containers&#34;&gt;Exlusão de containers
&lt;/h2&gt;&lt;p&gt;Usando o comando &lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/compose/reference/down/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;docker-compose down&lt;/code&gt;&lt;/a&gt; removemos todos so recursos criados pelo comando &lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/compose/reference/up/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;docker-compose up&lt;/code&gt;&lt;/a&gt; e o arquivo &lt;code&gt;docker-compose.yml&lt;/code&gt;. Porém, os volumes criados não são automaticamente removidos. Depois de executar muitas vezes os comandos, teremos o seguinte cenário:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_01.png&#34;
	width=&#34;889&#34;
	height=&#34;244&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_01_hufcb27dc3c95c21369c63688c4071b46b_27090_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/docker_jenkins_01_hufcb27dc3c95c21369c63688c4071b46b_27090_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Docker volumes&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;364&#34;
		data-flex-basis=&#34;874px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Você pode remover os volumes individualmente com o comando &lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/engine/reference/commandline/volume_rm/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;docker volume rm [id container]&lt;/code&gt;&lt;/a&gt; ou removendo todos os volumes não utilizados com o comando &lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/engine/reference/commandline/volume_prune/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;docker volume prune&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_02.png&#34;
	width=&#34;835&#34;
	height=&#34;320&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_02_hu682513474fff6b658c538cd8d7e296e7_32407_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/docker_jenkins_02_hu682513474fff6b658c538cd8d7e296e7_32407_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Docker Volume Prune&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;260&#34;
		data-flex-basis=&#34;626px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;jenkins---configuration-as-code&#34;&gt;Jenkins - Configuration as Code
&lt;/h2&gt;&lt;p&gt;A partir de agora vamos tratar todas as configurações como código. Para isto, precisamos de uma estrutura de diretórios organizadas da seguinte maneira:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;l&#34;&gt;+-- wsl2-docker-devops/             &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#Pasta principal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- 01_jenkins/                 &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#Todos os arquivos referente as configurações do jenkins&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- plugins/                &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#Referencias aos arquivos de configuração de plugins&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- plugins.txt         &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#Arquivo com os nomes dos plugins a serem instalados&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- docker-compose.yml      &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#Configurações da aplicação&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- Dockerfile              &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#Construção da imagem.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Vamos alterar o arquivo &lt;code&gt;docker-compose.yml&lt;/code&gt; com novas informações:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.4&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jenkins_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;jenkins_data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jenkins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;jenkins_data:/var/jenkins_home:rw&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;E vamos criar o arquivo &lt;code&gt;Dockerfile&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-docker&#34; data-lang=&#34;docker&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; jenkins/jenkins:lts&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;COPY&lt;/span&gt; ./plugins/plugins.txt /usr/share/jenkins/ref/plugins.txt&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; /usr/local/bin/install-plugins.sh &amp;lt; /usr/share/jenkins/ref/plugins.txt&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ENV&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;JAVA_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-Djenkins.install.runSetupWizard=false&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;E um arquivo de texto &lt;code&gt;plugins.txt&lt;/code&gt;:
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudbees-folder
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;build-timeout
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;credentials
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timestamper
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ws-cleanup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ant
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-milestone-step
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-input-step
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-stage-step
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-graph-analysis
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-rest-api
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-stage-view
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-build-step
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-model-api
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-model-extensions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-stage-tags-metadata
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-model-declarative-agent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipeline-model-definition
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;github-api
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;github
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;github-branch-source
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-credentials
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-slaves
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;build-user-vars-plugin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;matrix-auth
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pam-auth
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ldap
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;email-ext
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mailer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Ao executar o comando &lt;code&gt;docker-compose up &amp;amp;&lt;/code&gt; dentro do diretório &lt;code&gt;01_jenkins&lt;/code&gt;, ao acessar a página http://localhost:8080 irá aparecer a tela inicial do jenkins, sem nenhuma configuração manual:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_03.png&#34;
	width=&#34;1188&#34;
	height=&#34;646&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_03_hu01a315b22a96c5ff7f5021e11d8622a7_41650_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/docker_jenkins_03_hu01a315b22a96c5ff7f5021e11d8622a7_41650_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins Configuration as Code&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;183&#34;
		data-flex-basis=&#34;441px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Através de um único comando, você construiu a imagem com os plugins e subiu o jenkins sem nenhuma interação! :wink:&lt;/p&gt;
&lt;h2 id=&#34;detalhe-das-configurações&#34;&gt;Detalhe das Configurações
&lt;/h2&gt;&lt;h3 id=&#34;docker-compose&#34;&gt;Docker-compose
&lt;/h3&gt;&lt;p&gt;Dentro do &lt;code&gt;docker-compose.yaml&lt;/code&gt; definimos um &lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/compose/compose-file/#name&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Volume com um nome customizado&lt;/a&gt; chamado &lt;code&gt;jenkins_data&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;volumes:
  jenkins_data:
    name: jenkins_data
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este nome de &lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/compose/compose-file/#short-syntax-3&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;volume&lt;/a&gt; será utilizado dentro do serviço do jenkins, referenciando o caminho &lt;code&gt;/var/jenkins_home&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    volumes:
      - jenkins_data:/var/jenkins_home:rw
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isto faz com que o volume criado tenha o nome &lt;code&gt;jenkins_data&lt;/code&gt; e agora não importa quantas vezes você realize os comandos &lt;code&gt;docker-compose up&lt;/code&gt; e &lt;code&gt;docker-compose down&lt;/code&gt;, haverá somente 1 volume criado:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_04.png&#34;
	width=&#34;736&#34;
	height=&#34;339&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_04_huc3cfc026648977afc7a8385224886821_13026_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/docker_jenkins_04_huc3cfc026648977afc7a8385224886821_13026_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Docker volume jenkins_data&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;217&#34;
		data-flex-basis=&#34;521px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;O último trecho é a configuração de &lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/compose/compose-file/#build&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;build&lt;/a&gt;, onde indica que há um dockerfile e que ele devemos realizar a compilação do container, no caso de não existir:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;services:
  jenkins:  
    build: .
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;dockerfile&#34;&gt;Dockerfile
&lt;/h3&gt;&lt;p&gt;No &lt;code&gt;Dockerfile&lt;/code&gt; , temos a configuração e execução do trecho que instala os plugins do jenkins:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;COPY ./plugins/plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh &amp;lt; /usr/share/jenkins/ref/plugins.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A imagem oficial do Jenkins contém um script chamado &lt;a class=&#34;link&#34; href=&#34;https://github.com/jenkinsci/docker#preinstalling-plugins&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;install-plubins.sh&lt;/code&gt;&lt;/a&gt; onde realiza automaticamente o download e a instalação dos plugins listados no arquivo &lt;code&gt;plugins.txt&lt;/code&gt;. Este script também instala os plugins dependentes, caso tenha algum.&lt;/p&gt;
&lt;p&gt;Por fim, o último comando define o modo de inicialização do jenkins:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ENV JAVA_OPTS=&amp;quot;-Djenkins.install.runSetupWizard=false&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O padrão de inicialização do jenkins segue o seguinte formato:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;java &amp;lt;JAVA_OPTS&amp;gt; -jar jenkins.war &amp;lt;JENKINS_OPTS&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;onde:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jenkinsci/docker#passing-jvm-parameters&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JAVA_OPTS&lt;/a&gt; - Parâmetros da JVM&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jenkinsci/docker#passing-jenkins-launcher-parameters&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JENKINS_OPTS&lt;/a&gt; - Parâmetros de inicialização do Jenkins&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O parâmetro &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/managing/system-properties/#jenkins-install-runsetupwizard&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;-Djenkins.install.runSetupWizard=false&lt;/code&gt;&lt;/a&gt; pula o Wizard de instalação do jenkins, porém deixa o jenkins sem nenhuma autenticação.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nunca, nunca utilize as configurações deste modo em produção. Este Setup é somente para uso local e estudos. Futuramente iremos tratar de assuntos relacionados a execução do jenkins em produção.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;criando-usuário-admin&#34;&gt;Criando usuário Admin
&lt;/h3&gt;&lt;p&gt;Como estamos tratando as configurações como código, precisamos de um script inicial para criar o usuário admin. Para isto, vamos criar uma pasta &lt;code&gt;groovy&lt;/code&gt; e criar o arquivo &lt;code&gt;setup-users.groovy&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;l&#34;&gt;+-- wsl2-docker-devops/             &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Pasta principal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- 01_jenkins/                 &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Todos os arquivos referente as configurações do jenkins&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- plugins/                &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Referencias aos arquivos de configuração de plugins&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- plugins.txt         &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Arquivo com os nomes dos plugins a serem instalados&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- groovy/                 &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Referencias aos arquivos de configuração do Jenkins&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- setup-users.groovy  &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Script para criação de usuários&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- docker-compose.yml      &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Configurações da aplicação&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;+-- Dockerfile              &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Construção da imagem.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-groovy&#34; data-lang=&#34;groovy&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;jenkins.model.*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;hudson.security.*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Jenkins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getInstance&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hudsonRealm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HudsonPrivateSecurityRealm&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;hudsonRealm&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;createAccount&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setSecurityRealm&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hudsonRealm&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;strategy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GlobalMatrixAuthorizationStrategy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;strategy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Jenkins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ADMINISTER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setAuthorizationStrategy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strategy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;E vamos adicionar o mapeamento desta pasta no &lt;code&gt;dockerfile&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.4&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jenkins_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;jenkins_data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jenkins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./groovy:/var/jenkins_home/init.groovy.d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;jenkins_data:/var/jenkins_home:rw&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Executando novamente &lt;code&gt;docker-compose up &amp;amp;&lt;/code&gt; no terminal e acessando &lt;a class=&#34;link&#34; href=&#34;http://localhost:8080&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/a&gt; teremos a tela de login do jenkins:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_05.png&#34;
	width=&#34;1009&#34;
	height=&#34;712&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_05_hu65060f7fa56c34d2e219aa9e82df5398_26813_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/docker_jenkins_05_hu65060f7fa56c34d2e219aa9e82df5398_26813_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins Login Page&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;141&#34;
		data-flex-basis=&#34;340px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Acessando com login &lt;code&gt;admin&lt;/code&gt; e senha &lt;code&gt;password&lt;/code&gt; temos acesso ao jenkins!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_06.png&#34;
	width=&#34;1009&#34;
	height=&#34;712&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_06_hu5ff9d7b98349e730dfd588e4c835f0dc_46136_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/docker_jenkins_06_hu5ff9d7b98349e730dfd588e4c835f0dc_46136_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins Login Page&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;141&#34;
		data-flex-basis=&#34;340px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Grande parte dos itens programáveis dentro do jenkins são realizados utilizando &lt;a class=&#34;link&#34; href=&#34;https://groovy-lang.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;groovy&lt;/a&gt; como linguagem de programação.
Dentro do jenkins existem alguns pontos de extensão onde podemos executar scripts groovy personalizados. Um ponto de extensão fica na inicialização do Jenkins, criando arquivos dentro da pasta &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/doc/book/managing/groovy-hook-scripts/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;init.groovy.d&lt;/code&gt;&lt;/a&gt;. Todos os scripts desta pasta serão executados.&lt;/p&gt;
&lt;p&gt;O script &lt;code&gt;setup-users.groovy&lt;/code&gt; cria o usuário &lt;code&gt;admin&lt;/code&gt; e utilizamos o sistema de permissão de matriz para definirmos como administrador do jenkins.&lt;/p&gt;
&lt;p&gt;Você pode ver o usuário criado acessando a &lt;a class=&#34;link&#34; href=&#34;http://localhost:8080/securityRealm/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;base interna de usuários&lt;/a&gt;  (Jenkins &amp;raquo; Gerenciar Jenkins &amp;raquo; Gerenciar Usuários) e as atribuições de administrador em &lt;a class=&#34;link&#34; href=&#34;http://localhost:8080/configureSecurity/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Configurar Segurança Global&lt;/a&gt; (Jenkins &amp;raquo; Gerenciar Jenkins &amp;raquo; configurar Segurança Global).&lt;/p&gt;
&lt;p&gt;!User Configurations](docker_jenkins_07.png)
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_08.png&#34;
	width=&#34;1565&#34;
	height=&#34;884&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/docker_jenkins_08_hue3c2cc362f292ab4919b3c99add417ed_60964_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/docker_jenkins_08_hue3c2cc362f292ab4919b3c99add417ed_60964_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;User Permissions&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;177&#34;
		data-flex-basis=&#34;424px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Nos próximos artigos veremos como criar um job e as configurações necessárias para compilar uma aplicação em java.&lt;/p&gt;
&lt;p&gt;Caso tenha alguma dúvida, ou uma sugestão, entre em contato.&lt;/p&gt;
&lt;p&gt;Abraços!&lt;/p&gt;
&lt;p&gt;Jenkins Logo by &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/artwork/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jenkins Artwork&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Windows &#43; Jenkins &#43; Docker</title>
        <link>https://www.sitedoricardo.com.br/pt-br/p/windows--jenkins--docker/</link>
        <pubDate>Thu, 12 Sep 2019 01:46:15 -0300</pubDate>
        
        <guid>https://www.sitedoricardo.com.br/pt-br/p/windows--jenkins--docker/</guid>
        <description>&lt;img src="https://www.sitedoricardo.com.br/p/tian-kuan-9AxFJaNySB8-unsplash_original.jpg" alt="Featured image of post Windows &#43; Jenkins &#43; Docker" /&gt;&lt;h2 id=&#34;introdução&#34;&gt;Introdução
&lt;/h2&gt;&lt;p&gt;O &lt;a class=&#34;link&#34; href=&#34;https://www.jenkins.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jenkins&lt;/a&gt; é uma ferramenta de automação que facilita o build, deploy com a execução de processos automatizados no ciclo de desenvolvimento de software.&lt;/p&gt;
&lt;p&gt;Apesar de sua idade e com várias ferramentas concorrentes atuando no mesmo setor, continua sendo muito popular entre as empresas que adotam práticas de entrega contínua de software.&lt;/p&gt;
&lt;p&gt;Este é um conjunto de artigos com o intuito de demonstrar alguns exemplos de como utilizar, configurar e personalizar o jenkins para conhecer suas características técnicas e sua infraestrutura.&lt;/p&gt;
&lt;p&gt;Ao mesmo tempo, o jenkins não será o único foco, mas sim grande parte do conjunto de ferramentas que auxilia o desenvolvimento, testes e algumas vezes até a utilização em ambientes mais complexos.&lt;/p&gt;
&lt;h2 id=&#34;criando-o-ambiente&#34;&gt;Criando o Ambiente
&lt;/h2&gt;&lt;p&gt;Por muito tempo sempre que estudava alguma ferramenta, ou tecnologia instalava direto no meu notebook. Para quem trabalha na área, sabe que com o passar do tempo seu Sistema Operacional começa a ficar lento e não existe outra solução a não ser formatar a máquina.&lt;/p&gt;
&lt;p&gt;Se você é um usuário de Windows (como eu) sabe que os problemas se tornam exponenciais.
A solução de virtualização como Docker, Hyper-V, Virtualbox, Vagrant&amp;hellip; na maioria das vezes funcionam, mas quando não aparece problemas de lentidão, aparece problemas de incompatibilidade de versões no Windows.&lt;/p&gt;
&lt;p&gt;Se você usa Windows 10 Home multiplique os problemas por 1000x  :weary:&lt;/p&gt;
&lt;p&gt;Porém com o WSL2 as coisas melhoraram.&lt;/p&gt;
&lt;h2 id=&#34;wsl2&#34;&gt;WSL2?
&lt;/h2&gt;&lt;p&gt;Conforme a microsoft diz em seu &lt;a class=&#34;link&#34; href=&#34;https://docs.microsoft.com/pt-br/windows/wsl/about&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;site&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;O WSL 2 é uma nova versão da arquitetura do Subsistema do Windows para Linux que capacita o Subsistema do Windows para Linux a executar binários ELF64 Linux no Windows. As metas principais dele são aumentar o desempenho do sistema de arquivos e adicionar compatibilidade completa com a chamada do sistema.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;docker&#34;&gt;Docker
&lt;/h2&gt;&lt;p&gt;Docker no Windows Home Edition&amp;hellip; existem vários &amp;ldquo;&lt;em&gt;workarounds&lt;/em&gt;&amp;rdquo; na internet mostrando como fazer&amp;hellip; Já testei e funcionam, porém as versões do docker-machine são muitas vezes antigas.&lt;/p&gt;
&lt;p&gt;Porém, recentemente houve o lançamento do Docker Desktop com Suporte a Windows Home (&lt;a class=&#34;link&#34; href=&#34;%7bhttps://www.docker.com/blog/docker-desktop-for-windows-home-is-here/%7d&#34; &gt;link&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Agora sim!&lt;/p&gt;
&lt;h2 id=&#34;wsl2--linux&#34;&gt;WSL2 + Linux
&lt;/h2&gt;&lt;p&gt;Resumidamente você tem que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Realizar um update do Windows 10 para uma versão compatível com o docker desktop&lt;/li&gt;
&lt;li&gt;Instalar o WSL2&lt;/li&gt;
&lt;li&gt;Instalar docker desktop&lt;/li&gt;
&lt;li&gt;Instalar um sistema operacional linux (Não é obrigatório, mas ajuda muito!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Existem vários sites que podem te ajudar nesta etapa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/docker-for-windows/wsl/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Docker Desktop WSL 2 backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.microsoft.com/en-us/windows/wsl/install-win10&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Install WSL &amp;amp; update to WSL 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eu gostei desse &lt;a class=&#34;link&#34; href=&#34;https://dev.to/fernandocardo/seu-ambiente-de-desenvolvimento-wsl2-27g1&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;aqui&lt;/a&gt;, porque além de uma explicação prática, o link ensina a montar o ambiente de desenvolvimento (segui esse tutorial e estou bem contente com os resultados).&lt;/p&gt;
&lt;h2 id=&#34;jenkins--docker--wsl2&#34;&gt;Jenkins + Docker + WSL2
&lt;/h2&gt;&lt;p&gt;Agora com o ambiente básico montado, podemos prosseguir com o básico da criação do ambiente o jenkins.&lt;/p&gt;
&lt;p&gt;Crie um arquivo &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.4&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jenkins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;jenkins/jenkins:lts&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Em seguida, execute no terminal (Neste momento, recomenda-se usar o Windows Terminal com o Ubuntu conforme descritos nos links anteriores):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker-compose up &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Após algum tempo irá aparecer esta mensagem:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/01_jenkins.png&#34;
	width=&#34;962&#34;
	height=&#34;271&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/01_jenkins_hu733f69e33784febf36087508bac7ee71_20559_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/01_jenkins_hu733f69e33784febf36087508bac7ee71_20559_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Docker Console&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;354&#34;
		data-flex-basis=&#34;851px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Acesse &lt;a class=&#34;link&#34; href=&#34;http://localhost:8080&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://localhost:8080&lt;/a&gt; e informe o código:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/02_jenkins.png&#34;
	width=&#34;857&#34;
	height=&#34;669&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/02_jenkins_hub4b85367f50e660370a8e7780d5bbbce_46231_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/02_jenkins_hub4b85367f50e660370a8e7780d5bbbce_46231_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Unlock Jenkins&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;128&#34;
		data-flex-basis=&#34;307px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Selecione &amp;ldquo;Install suggested plugins&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/03_jenkins.png&#34;
	width=&#34;857&#34;
	height=&#34;669&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/03_jenkins_hucb2eb29b6152e9a3f01a670abde2c0d9_90340_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/03_jenkins_hucb2eb29b6152e9a3f01a670abde2c0d9_90340_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Plugin&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;128&#34;
		data-flex-basis=&#34;307px&#34;
	
&gt;
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/04_jenkins.png&#34;
	width=&#34;1153&#34;
	height=&#34;784&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/04_jenkins_hub1f8c81ca7aaf895800128ec2d3b8755_65712_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/04_jenkins_hub1f8c81ca7aaf895800128ec2d3b8755_65712_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Plugin&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;147&#34;
		data-flex-basis=&#34;352px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Crie o Usuário Admin:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/05_jenkins.png&#34;
	width=&#34;1153&#34;
	height=&#34;784&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/05_jenkins_hue7706f9f5b6e050ab04f5f70bcec6d75_34215_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/05_jenkins_hue7706f9f5b6e050ab04f5f70bcec6d75_34215_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;User Creation&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;147&#34;
		data-flex-basis=&#34;352px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Defina o nome da Url (explicaremos mais tarde o motivo de existir esta configuração):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/06_jenkins.png&#34;
	width=&#34;1153&#34;
	height=&#34;784&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/06_jenkins_hu0f90f0bca02914bfe01a29d8455f9662_41306_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/06_jenkins_hu0f90f0bca02914bfe01a29d8455f9662_41306_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;URL Configuration&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;147&#34;
		data-flex-basis=&#34;352px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Jenkins Configurado!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/07_jenkins.png&#34;
	width=&#34;1153&#34;
	height=&#34;784&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/07_jenkins_hu7bb68c58f0c50d5dd32ea7b8d55da280_30195_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/07_jenkins_hu7bb68c58f0c50d5dd32ea7b8d55da280_30195_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Finish Setup&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;147&#34;
		data-flex-basis=&#34;352px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Uma outra alternativa é acompanhar através da interface do Docker Desktop:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/08_jenkins.png&#34;
	width=&#34;1086&#34;
	height=&#34;695&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/08_jenkins_hub1b06b173fedb6e5cf61167652a3e570_14979_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/08_jenkins_hub1b06b173fedb6e5cf61167652a3e570_14979_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins Docker Desktop&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;156&#34;
		data-flex-basis=&#34;375px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;hello-world&#34;&gt;Hello World
&lt;/h2&gt;&lt;p&gt;Nada mais tradicional do que criar um job de &lt;em&gt;Hello World&lt;/em&gt;, para isto, clique em &lt;code&gt;Novo Job&lt;/code&gt;, selecione um projeto &lt;code&gt;Freestyle&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/09_jenkins.png&#34;
	width=&#34;1153&#34;
	height=&#34;917&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/09_jenkins_hu53d7fe40e6b4612ef96cc4d8fe6e3b35_77632_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/09_jenkins_hu53d7fe40e6b4612ef96cc4d8fe6e3b35_77632_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins FirstJob&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;125&#34;
		data-flex-basis=&#34;301px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Na próxima tela, no bloco  &lt;code&gt;Build&lt;/code&gt; selecione &lt;code&gt;Executar shell&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/10_jenkins.png&#34;
	width=&#34;802&#34;
	height=&#34;344&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/10_jenkins_hua146a07a6969c621ce4552ab3bf377b8_12243_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/10_jenkins_hua146a07a6969c621ce4552ab3bf377b8_12243_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins FirstJob&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;233&#34;
		data-flex-basis=&#34;559px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Na caixa de seleção, digite &lt;code&gt;echo &#39;Hello World&#39;&lt;/code&gt;, e após clicar em &lt;code&gt;Salvar&lt;/code&gt;, seu primeiro job estará criado.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/11_jenkins.png&#34;
	width=&#34;1153&#34;
	height=&#34;917&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/11_jenkins_huc5cf9547493d857014edfef3313f9506_37752_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/11_jenkins_huc5cf9547493d857014edfef3313f9506_37752_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins FirstJob&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;125&#34;
		data-flex-basis=&#34;301px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Clique em &lt;code&gt;Construir agora&lt;/code&gt; e seu job irá executar. Após algum tempo, seu job estará executado e gerado a primeira execução:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/12_jenkins.png&#34;
	width=&#34;588&#34;
	height=&#34;457&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/12_jenkins_hu9a8f7d97b3eafbc4e0d156dd4e637c26_27923_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/12_jenkins_hu9a8f7d97b3eafbc4e0d156dd4e637c26_27923_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins FirstJob&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;128&#34;
		data-flex-basis=&#34;308px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Ao clicar no link do job #1, você verá os detalhes, e ao clicar em &lt;code&gt;Saída do Console&lt;/code&gt; você verá o resultado da execução.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/13_jenkins.png&#34;
	width=&#34;1065&#34;
	height=&#34;589&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/13_jenkins_hu939649d58c443fed9a03787fed34ddf0_50303_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/13_jenkins_hu939649d58c443fed9a03787fed34ddf0_50303_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins FirstJob&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;180&#34;
		data-flex-basis=&#34;433px&#34;
	
&gt;
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/14_jenkins.png&#34;
	width=&#34;1065&#34;
	height=&#34;589&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/14_jenkins_hu58c7a9d0ffadbef160bf582e05076739_45210_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/14_jenkins_hu58c7a9d0ffadbef160bf582e05076739_45210_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Jenkins FirstJob&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;180&#34;
		data-flex-basis=&#34;433px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Você pode desligar seu container agora com o comando &lt;code&gt;docker-compose stop&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;conhecendo-o-funcionamento-do-jenkins&#34;&gt;Conhecendo o funcionamento do Jenkins
&lt;/h2&gt;&lt;p&gt;O Job acima é bem simples, mas serve de exemplo para explicar algumas características do jenkins e também do WSL2. Se você for no &lt;code&gt;Docker Desktop&lt;/code&gt; e acessar o menu &lt;code&gt;Inspect&lt;/code&gt; você verá a seguinte informação. (Podemos confirmar também com o comando &lt;code&gt;docker volumes ls&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/15_jenkins.png&#34;
	width=&#34;1152&#34;
	height=&#34;673&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/15_jenkins_hu651c62e6a8f954e76f91206ae76f80f1_33286_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/15_jenkins_hu651c62e6a8f954e76f91206ae76f80f1_33286_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Mount Point&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;171&#34;
		data-flex-basis=&#34;410px&#34;
	
&gt;
&lt;img src=&#34;https://www.sitedoricardo.com.br/p/16_jenkins.png&#34;
	width=&#34;853&#34;
	height=&#34;491&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/16_jenkins_hu3de22cf55119edb84c8f10fbba3e656d_15911_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/16_jenkins_hu3de22cf55119edb84c8f10fbba3e656d_15911_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Mount Point&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;173&#34;
		data-flex-basis=&#34;416px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;dica-acessando-os-pontos-de-montagem-do-docker-pelo-windows&#34;&gt;Dica: Acessando os pontos de montagem do Docker pelo windows
&lt;/h2&gt;&lt;p&gt;Todos os pontos de montagem do docker podem ser acessados diretamente pelo windows quando você utiliza o WSL2. Ao acessar o caminho &lt;code&gt;\\wsl2$&lt;/code&gt; você verá as imagens:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.sitedoricardo.com.br/p/17_jenkins.png&#34;
	width=&#34;620&#34;
	height=&#34;400&#34;
	srcset=&#34;https://www.sitedoricardo.com.br/p/17_jenkins_huc21808685c19581e5eb1934909edbd48_18227_480x0_resize_box_3.png 480w, https://www.sitedoricardo.com.br/p/17_jenkins_huc21808685c19581e5eb1934909edbd48_18227_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Mount Point&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;155&#34;
		data-flex-basis=&#34;372px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;No meu caso, tenho 3 imagens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt;: Este é o sistema operacional linux que instalei pelo Windows Store;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docker-desktop&lt;/strong&gt;: Este é a imagem do docker daemon rodando;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docker-desktop-data&lt;/strong&gt;: esta é a imagem onde estão as imagens baixadas e os volumes.;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E navegando no caminho &lt;code&gt; \\wsl$\docker-desktop-data\mnt\wsl\docker-desktop-data\data\docker\volumes\fe5caa110558530e6bd64b8e3b112c545387cbb2b0a7fbdf067f3505647a6f7d\_data&lt;/code&gt; você terá acesso ao conteúdo do volume do docker :wink: :&lt;/p&gt;
&lt;p&gt;&amp;ldquo;/img/2020/06&amp;rdquo; &amp;ldquo;18_jenkins.png&amp;rdquo; &amp;ldquo;Mount Point&amp;rdquo; &amp;ldquo;Mount Point&amp;rdquo; &amp;gt;&lt;/p&gt;
&lt;h2 id=&#34;características-do-jenkins&#34;&gt;Características do Jenkins
&lt;/h2&gt;&lt;p&gt;Realizamos todos esses passos para explicar algumas características básicas em relação ao funcionamento do jenkins:&lt;/p&gt;
&lt;h3 id=&#34;característica-1-conceito-de-jobs&#34;&gt;Característica 1: Conceito de jobs
&lt;/h3&gt;&lt;p&gt;O &lt;code&gt;Job&lt;/code&gt; é a unidade básica de execução de tarefas do Jenkins. Ele é o responsável por orquestrar a execução de todos os comandos necessários para se fazer uma determinada ação, como por exemplo, compilar uma aplicação. Imagine o &lt;code&gt;Job&lt;/code&gt; como um Shell Script gigante para executar alguma coisa!&lt;/p&gt;
&lt;p&gt;Porém ao contrário de um Shell Script, um &lt;code&gt;Job&lt;/code&gt; contém algumas estruturas para organização das atividades, chamadas de &lt;code&gt;steps&lt;/code&gt;. Cada &lt;code&gt;Step&lt;/code&gt; é uma atividade com um propósito definido, por exemplo, os passos para se compilar uma aplicação pode ser:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Baixar o código fonte;&lt;/li&gt;
&lt;li&gt;Compilar a aplicação;&lt;/li&gt;
&lt;li&gt;Copiar o artefato compilado para uma outra pasta;&lt;/li&gt;
&lt;li&gt;Enviar um email informando o sucesso da compilação;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;característica-2-plugins&#34;&gt;Característica 2: Plugins
&lt;/h3&gt;&lt;p&gt;O Jenkins não serve de nada sem os &lt;code&gt;plugins&lt;/code&gt;. A estrutura de plugins é o que proporciona a flexibilidade e a dinâmica necessária para diversos cenários de utilização do jenkins. Os plugins controlam, por exemplo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A integração com diversos provedores de autenticação;&lt;/li&gt;
&lt;li&gt;A estrutura de Roles de usuários;&lt;/li&gt;
&lt;li&gt;Os modos de acionamento dos &lt;code&gt;Jobs&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Integração com várias outras ferramentas (Jira, slack, google chat, github, etc..);&lt;/li&gt;
&lt;li&gt;Customização de layout;&lt;/li&gt;
&lt;li&gt;&amp;hellip;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A lista é gigante, e se houver a necessidade, você pode criar seu próprio plugin. (Um dia você irá precisar :lol:)&lt;/p&gt;
&lt;h3 id=&#34;característica-3-filesystem&#34;&gt;Característica 3: Filesystem
&lt;/h3&gt;&lt;p&gt;O Jenkins não trabalha com banco de dados. Todas as informações, configurações, job e plugins são armazenados em arquivos no disco. A maioria são arquivos &lt;code&gt;xml&lt;/code&gt;. O jenkins durante sua execução acessa a variável de ambiente &lt;code&gt;JENKINS_HOME&lt;/code&gt; onde está o caminho dos arquivos internos.
Lembra do volume criado quando geramos o Docker? Ela é justamente a pasta apontada pelo &lt;code&gt;JENKINS_HOME&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Por trabalhar com filesystem, há cuidados adicionais em relação a infraestrutura a ser criada, controle de acesso , alta disponibilidade e principalmente sobre a segurança.&lt;/p&gt;
&lt;h2 id=&#34;finalização&#34;&gt;Finalização
&lt;/h2&gt;&lt;p&gt;Este foi um texto inicial de como criar um ambiente de desenvolvimento para qualquer tipo de aplicação, porém aqui focamos na ferramenta do Jenkins. Nos próximos artigos, iremos entrar em mais detalhes do funcionamento de toda esta estrutura.&lt;/p&gt;
&lt;p&gt;Caso tenha alguma dúvida, ou uma sugestão, entre em contato.&lt;/p&gt;
&lt;p&gt;Abraços!&lt;/p&gt;
&lt;p&gt;Photo by &lt;a class=&#34;link&#34; href=&#34;https://unsplash.com/photos/9AxFJaNySB8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tian Kuan&lt;/a&gt; on Unsplash&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Estou vivo!</title>
        <link>https://www.sitedoricardo.com.br/pt-br/p/estou-vivo/</link>
        <pubDate>Thu, 12 Sep 2019 00:00:00 +0000</pubDate>
        
        <guid>https://www.sitedoricardo.com.br/pt-br/p/estou-vivo/</guid>
        <description>&lt;img src="https://www.sitedoricardo.com.br/p/im-alived/excavator.jpg" alt="Featured image of post Estou vivo!" /&gt;&lt;h1 id=&#34;olá-mundo&#34;&gt;Olá Mundo!!!
&lt;/h1&gt;&lt;p&gt;Se você leu isso, é que o site está no ar. 👍&lt;/p&gt;
&lt;p&gt;🎉&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
