Introdução
Vamos entender os principais tipos de jobs existentes e vamos criar um pipeline básico de build de aplicação.
Setup Ambiente
Você pode utilizar meu repositório com o setup criado até agora com algumas melhorias.
Execute o comando ./run.sh dentro da pasta 01_jenkins
Cenário
Como exemplo, vamos usar o Spring Boot Pet Clinic para demonstrar como criar um pipeline que simplesmente irá realizar o checkout do código e compilar.
Tools no Jenkins
Se você fosse realizar essa atividade no terminal de comando, você faria a seguinte sequência:
|
|
Você precisa do git para checkout da aplicação, o maven para compilar, e como é uma aplicação é em Java, precisa de uma jdk para compilar.
Para o Jenkins, todos estes itens são tratados como ferramentas. As configurações estão localizadas em Jenkins > Gerenciar Jenkins > Global Tool Configuration.

Utilizando o Global Tool Configuration 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.
Os Tipos de Jobs
Os existem vários jobs no jenkins uma instalação padrão contém os seguintes jobs:

- Freestyle: Este é o modelo de job mais antigo do jenkins. Ele é o modo “low code” para criação de jobs.
- Pipeline: Tipo de job para execuções mais complexas, onde precisa de um nível de flexibilidade maior que o Freestyle. Neste tipo de job, os processos dos jobs são tratados como código, seguindo o princípio Pipeline as Code. Ainda há duas subdivisões no modo de desenvolvimento do Pipeline: temos o Declarative Pipeline e o Scripted Pipeline. 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 https://www.jenkins.io/doc/book/pipeline/syntax/#compare
- Múltiplas Configurações: É um job Freestyle 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)
- Folder: Tipo especial de job para organização de Jobs em uma estrutura de Pastas.
- Github Organization: Realiza um scan no seu repositório a partir de alguns critérios para executar um job padrão.
- Multibranch Pipeline: Realiza um scan em um repositório e o jenkins gera automaticamente um job para cada branch encontrada.
Criando um pipeline
Selecione Novo Job, digite o nome do job e clique em pipeline e depois em Salvar:

Dentro da seção Pipeline, cole o seguinte código:
1pipeline{
2 agent any
3 stages {
4 stage('SCM Ckeckout'){
5 steps{
6 checkout([
7 $class: 'GitSCM',
8 branches: [[name: "*/main"]],
9 doGenerateSubmoduleConfigurations: false,
10 extensions: [],
11 submoduleCfg: [],
12 userRemoteConfigs: [[
13 url: "https://github.com/spring-projects/spring-petclinic.git"
14 ]]
15 ])
16 }
17 }
18 stage('Build'){
19 steps{
20 withMaven(
21 globalMavenSettingsConfig: "mavenDefaultConfig",
22 jdk: 'openjdk9',
23 maven: 'maven3',
24 mavenLocalRepo: "/usr/share/maven/.m2",
25 options: [artifactsPublisher(disabled: true)]) {
26 sh "mvn clean package"
27 }
28 }
29 }
30 }
31}
Ao clicar em Construir agora o job será executado.

Explicando cada linha, temos:
- A linha 1 define que estamos codificando um pipeline declarativo. Sendo assim, existe uma estrutura básica a ser seguida;
- A linha 2* define que iremos executar este pipeline em qualquer máquina disponível (agent any). Um agent é qualquer máquina reconhecida pelo jenkins para executar os jobs;
- A linha 3 define o bloco de stages e na linha 4 já declaramos o primeiro stage chamado “SCM Checkout”. Em seguida, a linha 5 contém o bloco steps. Somente após seguir esta estrutura podemos realmente informar o que desejamos automatizar;
- As linhas 6 a 15 definem o comando checkout. 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 git pela quantidade de funcionalidades disponíveis;
- As linhas 18 e 19 definem um novo bloco de stage chamado “Build”;
- As linhas 20 a 25 definem todas as configurações do maven que iremos utilizar: Utilizar os settings chamado
mavenDefaultConfig, informando a referencia da ferramenta instaladaopenjdk9como a jdk a ser executada e com a versão do maven definida na ferramenta chamadamaven3. Aqui ainda informamos aonde está localizado o diretório.m2do maven e que ao executar o comando, quero ignorar a geração do fingerprint. - Finalmente, na linha 26 executamos o maven (
mvn clean package) utilizando o comando sh;
Usando o Snippet generator
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 Pipeline Syntax
Você pode selecionar no combo sample step o comando desejado e preencher com as informações necessárias. Ao clicar no botão Generate Pipeline Script ele irá gerar toda a linha de código necessária:

Finalização
Tentei mostrar todos os “caminhos” 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.
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.
Abraços
Photo by Markus Spiske on Unsplash