Domine o Pipeline como Código: Guia Completo com Jenkins

No universo do desenvolvimento de software, os pipelines de CI/CD, ou Integração Contínua/Entrega Contínua, são essenciais para automatizar a compilação e implementação do seu código em diversos ambientes. Eles agilizam o processo e reduzem a probabilidade de erros.

No entanto, a criação e manutenção desses pipelines podem ser complexas. É nesse ponto que entra o conceito de Pipeline como Código (Pipeline as Code). Em vez de depender de interfaces web com elementos de arrastar e soltar, você define todo o pipeline CI/CD através de arquivos de configuração. Isso permite descrever como seu código será construído, testado e implementado usando uma abordagem baseada em texto.

Antes de explorarmos os detalhes do Pipeline como Código e como você pode implementar o seu, vamos entender o que é exatamente um pipeline no contexto do desenvolvimento de software.

O que é um Pipeline no Desenvolvimento de Software?

Um pipeline, no contexto do desenvolvimento de software, é uma sequência de etapas automatizadas que processam as alterações mais recentes no código. Ele executa uma série de ações sobre o código e o direciona para o ambiente desejado. Para ilustrar melhor, vamos a um exemplo prático.

Imagine que você está trabalhando com três microsserviços, e acabou de adicionar novas funcionalidades a um deles. O próximo passo é executar testes unitários no código. Após a aprovação, é preciso verificar a formatação do código, em seguida compilá-lo e finalmente implementá-lo em dois ambientes distintos, cada um com diversas máquinas. Para finalizar, você deve executar testes de integração para verificar se as mudanças estão em sincronia com os outros serviços.

Todas essas etapas podem ser realizadas manualmente, porém, isso consumiria um tempo valioso e aumentaria o risco de erros humanos. Mas, e se fosse possível automatizar todas essas tarefas? A resposta é sim! Através da criação de um pipeline, definindo cada etapa necessária. Desta forma, sempre que houver mudanças no código, você poderá disparar o pipeline e evitar processos manuais.

Vantagens do Pipeline como Código

A utilização de ferramentas com interfaces de arrastar e soltar dificulta o rastreamento de alterações, a manutenção de padrões e a colaboração. Nesse sentido, o Pipeline como Código surge como a maneira mais eficaz de definir o seu pipeline de desenvolvimento de software.

Ele promove a consistência, automatiza processos, garantindo a repetibilidade e o uso do mesmo pipeline em diferentes sistemas. Assim como o código do aplicativo, o código usado para definir o seu pipeline facilita a colaboração entre equipes.

#1. Consistência

Definir o pipeline em formato textual garante uma execução ordenada e padronizada. Ao impor um fluxo de trabalho consistente para todos os processos de compilação e implementação, você reduz o risco de problemas inesperados.

A consistência também possibilita a aplicação de verificações de segurança e conformidade. É possível definir as verificações necessárias de segurança e vulnerabilidades de forma que nenhum detalhe passe despercebido.

#2. Repetibilidade

Ao definir a automação em seu pipeline, você garante que cada alteração do código do aplicativo passe pelas mesmas etapas e verificações, mantendo um fluxo de trabalho consistente e repetível.

O código seguirá o mesmo processo de compilação e implantação sempre que o pipeline for acionado, garantindo a repetibilidade em todas as execuções.

#3. Colaboração

Ao utilizar código para definir o pipeline, você promove a colaboração. As equipes podem contribuir com o mesmo código, assim como fazem com o código do aplicativo.

O Pipeline como Código permite também o controle de versão e a realização de revisões de código. Isso garante que as melhores práticas sejam seguidas e que potenciais problemas sejam detectados em tempo hábil.

Vamos agora ver como você pode construir o seu pipeline utilizando o Pipeline como Código.

Pipeline como Código no Jenkins

Quando o assunto é automação de CI/CD, o Jenkins se destaca como um servidor de automação de código aberto. O Jenkins facilita a integração de alterações de código, automatiza testes e compilação, e permite a implantação de software de maneira confiável e eficiente.

Seja para projetos pessoais ou sistemas corporativos complexos, o Jenkins atende a todas as necessidades do seu projeto. Sua vasta gama de plugins e uma comunidade ativa contribuem para o máximo aproveitamento da automação.

Em Jenkins, um Pipeline é formado por uma série de plugins organizados em uma sequência específica para criar um sistema de CI/CD. Pipelines simples ou complexos podem ser definidos utilizando o Domain Specific Language (DSL), construído sobre a linguagem Apache Groovy.

O Jenkinsfile é a base do Pipeline como Código no Jenkins – um arquivo de texto que contém código descrevendo todas as etapas e ações do seu pipeline. Vamos aprender como criar seu Pipeline como Código usando um Jenkinsfile.

Como Criar seu Pipeline como Código?

Após instalar e iniciar o Jenkins, acesse a interface web no seu navegador e faça login. Você será direcionado para a página principal do Dashboard, que será o ponto de partida para a criação do seu pipeline.

  • No painel esquerdo, encontre o botão “Novo Item”.
  • Clique nele para acessar a próxima página.
  • Na nova página, você verá uma solicitação para criar um novo item.
  • Preencha o campo “Insira um nome de item”. Este campo é obrigatório.
  • Lembre-se que um diretório com o mesmo nome será criado, evite espaços em branco para evitar problemas.
  • Selecione a opção “Pipeline” e clique no botão “OK” na parte inferior da tela.
  • A tela de Configuração será exibida.
  • Clique na opção “Pipeline” no painel esquerdo ou role para baixo até a seção “Pipeline”.

Vamos começar com um pipeline simples, que pode ser configurado diretamente na interface web.

Criar Pipeline como Código Diretamente no Jenkins

Na seção “Pipeline”, você estará pronto para criar seu primeiro Pipeline como Código.

No menu suspenso “Definição”, selecione a opção “Script de pipeline”. Abaixo, você encontrará uma área de “Script” para inserir o código do seu pipeline. O Jenkins armazenará este script.

O Jenkins oferece dois estilos de codificação ou sintaxe: Sintaxe Declarativa e Sintaxe com Script. A Declarativa é ideal para pipelines simples, enquanto a Scripted Syntax é voltada para usuários avançados e fluxos complexos.

Usando a sintaxe declarativa, vamos criar três estágios simples: “Construir Código”, “Testar Código” e “Implementar Código”, utilizando o trecho de código abaixo:

pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'This is the step for build...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'This is the step to test...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'This step deploys the code...'
            }
        }
    }
}

Você também pode utilizar a sintaxe com script, como demonstrado abaixo:

node {
    stage('Build Code') {
        echo 'This is the step for build...'
    }
    stage('Test Code') {
        echo 'This is the step to test...'
    }
    stage('Deploy Code') {
        echo 'This step deploys the code...'
    }
}

Clique em “Salvar”. Em seguida, clique no botão “Construir agora” no painel esquerdo. Isso acionará o pipeline recém-criado.

Após a conclusão do pipeline, verifique o “Histórico de construção”. Se esta for a primeira execução, clique no número da compilação nº 1. Depois, clique em “Console Output” no painel esquerdo para visualizar as três instruções “echo” do código do pipeline em cada estágio.

Criar um Pipeline como Código Utilizando um Arquivo Externo

Manter o pipeline diretamente no Jenkins pode ser um desafio à medida que ele se torna mais complexo. Nesses casos, é recomendado criar um arquivo externo para armazenar e gerenciar o pipeline.

Antes de criar o pipeline no Jenkins, é necessário um repositório externo e um sistema de controle de versão. Vamos criar um repositório Git no GitHub. Você criará o Jenkinsfile e o armazenará nesse repositório.

  • Acesse o seu perfil no GitHub. Crie uma conta gratuita, caso ainda não tenha.
  • Crie um novo repositório, nomeando-o como “customJenkins”.
  • Na sua máquina local, certifique-se de que o Git está instalado.
  • Crie um diretório local.
  • Navegue até o diretório no terminal.
  • Inicialize um repositório Git vazio utilizando o comando “git init”.
  • Crie um novo arquivo, que será seu Jenkinsfile. Vamos chamá-lo de “customJenkinsfile”.
  • Escreva seu Pipeline como Código dentro do arquivo. Utilize o exemplo abaixo:
pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'This is the step for build defined in custom file...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'This is the step to test defined in custom file...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'This step defined in custom file deploys the code...'
            }
        }
    }
}
  • Adicione o arquivo ao Git usando o comando “git add –all” no terminal.
  • Envie o arquivo para o Git utilizando o comando “git commit -m “Criado um arquivo jenkins personalizado””.
  • Vincule o repositório Git local ao repositório remoto utilizando o comando “git remote add origin [email protected]:/customJenkins.git”.
  • Finalmente, envie o arquivo para o controle remoto (GitHub) usando o comando “git push –set-upstream origin master”.

Você criou um repositório remoto no GitHub contendo o Jenkinsfile personalizado. Agora, vamos configurar o Jenkins para utilizá-lo.

Configurar o Jenkins para Usar o Jenkinsfile do GitHub

  • Abra o painel do Jenkins.
  • Crie um novo pipeline ou clique em “Configurar” no painel esquerdo de um pipeline já existente.
  • Role para baixo até a seção “Pipeline”.
  • No menu suspenso “Definição”, selecione a opção “Script de pipeline do SCM”.
  • Selecione “Git” na opção “SCM”.
  • Insira o link do repositório GitHub no campo “URL do repositório” em “Repositórios”.
  • Certifique-se de que o “Especificador de ramificação” esteja definido como “*/master” em “ramificações a serem construídas”.
  • Role para baixo até “Caminho do script”. Insira o nome do arquivo Jenkins, neste caso “customJenkinsfile”, e clique em “Salvar”.

Após esta configuração, execute o seu pipeline. O Jenkins irá primeiro buscar o código do repositório remoto, criar o pipeline utilizando o Jenkinsfile personalizado e executar todas as etapas definidas.

Parabéns, você criou com sucesso seu próprio pipeline de desenvolvimento de software utilizando Pipeline como Código. Além disso, você habilitou o controle de versão no script do pipeline. Qualquer alteração no código do pipeline pode ser rastreada com cada commit do Git. Vamos agora analisar algumas práticas recomendadas.

Melhores Práticas para Escrever um Pipeline Eficaz como Código

A seguir, apresentamos as melhores práticas a serem seguidas ao escrever seu Pipeline como Código:

  • Mantenha o seu pipeline limpo, evitando condições complexas.
  • Se você estiver executando muitos comandos no pipeline, divida-os em etapas diferentes.
  • Utilize arquivos externos com controle de versão para seus scripts de Pipeline como Código.
  • Aproveite os recursos da linguagem de codificação, como Groovy, para integrar diferentes etapas.
  • Evite chamadas para “Jenkins.getInstance” ou seus acessadores para mitigar problemas de segurança e desempenho.
  • Não substitua comandos integrados do pipeline, como “sh” e “timeout”.
  • Crie ferramentas ou scripts externos para tarefas complexas e conecte-os ao seu pipeline.
  • Utilize a grande variedade de plugins do Jenkins para atender às suas necessidades.
  • Certifique-se de incorporar tratamento de exceções e erros.
  • Evite que seu Pipeline como Código seja acoplado a muita lógica de negócios.
  • Use argumentos parametrizados sempre que possível para tornar seu pipeline reutilizável.

Pipeline como Código: Uma Abordagem Simples para Processos Complexos

Em resumo, Pipeline as Code simplifica a automação do pipeline de CI/CD, representando todo o processo como código. Enquanto os pipelines de CI/CD automatizam a construção, testes e implementação de alterações de código, o Pipeline as Code leva isso a um novo nível. Ele permite que você defina seu fluxo de trabalho em texto, em vez de depender de interfaces gráficas.

Com o Pipeline as Code, você garante que cada etapa do seu fluxo de trabalho ocorra na ordem correta, reduzindo o risco de problemas inesperados. Além disso, você obtém diversos benefícios, incluindo consistência, repetibilidade e facilitação da colaboração.

Com este guia, você aprendeu como criar seus próprios pipelines usando o Jenkins, uma ferramenta de CI/CD amplamente utilizada. O Jenkins oferece uma plataforma poderosa e flexível para implementar Pipeline como Código através de seu Jenkinsfile. Siga as práticas recomendadas e construa fluxos de trabalho que atendam a todas as suas necessidades.

Se quiser saber mais sobre Jenkins, você pode verificar como criar seu próprio pipeline Jenkins.