Introdução
O Jenkins é uma ferramenta de automação que facilita o build, deploy com a execução de processos automatizados no ciclo de desenvolvimento de software.
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.
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.
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.
Criando o Ambiente
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.
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… na maioria das vezes funcionam, mas quando não aparece problemas de lentidão, aparece problemas de incompatibilidade de versões no Windows.
Se você usa Windows 10 Home multiplique os problemas por 1000x :weary:
Porém com o WSL2 as coisas melhoraram.
WSL2?
Conforme a microsoft diz em seu site:
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.
Docker
Docker no Windows Home Edition… existem vários “workarounds” na internet mostrando como fazer… Já testei e funcionam, porém as versões do docker-machine são muitas vezes antigas.
Porém, recentemente houve o lançamento do Docker Desktop com Suporte a Windows Home (link).
Agora sim!
WSL2 + Linux
Resumidamente você tem que:
- Realizar um update do Windows 10 para uma versão compatível com o docker desktop
- Instalar o WSL2
- Instalar docker desktop
- Instalar um sistema operacional linux (Não é obrigatório, mas ajuda muito!)
Existem vários sites que podem te ajudar nesta etapa:
Eu gostei desse aqui, 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).
Jenkins + Docker + WSL2
Agora com o ambiente básico montado, podemos prosseguir com o básico da criação do ambiente o jenkins.
Crie um arquivo docker-compose.yml:
|
|
Em seguida, execute no terminal (Neste momento, recomenda-se usar o Windows Terminal com o Ubuntu conforme descritos nos links anteriores):
docker-compose up &
Após algum tempo irá aparecer esta mensagem:

Acesse http://localhost:8080 e informe o código:

Selecione “Install suggested plugins”

Crie o Usuário Admin:

Defina o nome da Url (explicaremos mais tarde o motivo de existir esta configuração):

Jenkins Configurado!

Uma outra alternativa é acompanhar através da interface do Docker Desktop:

Hello World
Nada mais tradicional do que criar um job de Hello World, para isto, clique em Novo Job, selecione um projeto Freestyle:

Na próxima tela, no bloco Build selecione Executar shell

Na caixa de seleção, digite echo 'Hello World', e após clicar em Salvar, seu primeiro job estará criado.

Clique em Construir agora e seu job irá executar. Após algum tempo, seu job estará executado e gerado a primeira execução:

Ao clicar no link do job #1, você verá os detalhes, e ao clicar em Saída do Console você verá o resultado da execução.

Você pode desligar seu container agora com o comando docker-compose stop.
Conhecendo o funcionamento do Jenkins
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 Docker Desktop e acessar o menu Inspect você verá a seguinte informação. (Podemos confirmar também com o comando docker volumes ls)

Dica: Acessando os pontos de montagem do Docker pelo windows
Todos os pontos de montagem do docker podem ser acessados diretamente pelo windows quando você utiliza o WSL2. Ao acessar o caminho \\wsl2$ você verá as imagens:

No meu caso, tenho 3 imagens:
- Ubuntu: Este é o sistema operacional linux que instalei pelo Windows Store;
- docker-desktop: Este é a imagem do docker daemon rodando;
- docker-desktop-data: esta é a imagem onde estão as imagens baixadas e os volumes.;
E navegando no caminho \\wsl$\docker-desktop-data\mnt\wsl\docker-desktop-data\data\docker\volumes\fe5caa110558530e6bd64b8e3b112c545387cbb2b0a7fbdf067f3505647a6f7d\_data você terá acesso ao conteúdo do volume do docker :wink: :
“/img/2020/06” “18_jenkins.png” “Mount Point” “Mount Point” >
Características do Jenkins
Realizamos todos esses passos para explicar algumas características básicas em relação ao funcionamento do jenkins:
Característica 1: Conceito de jobs
O Job é 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 Job como um Shell Script gigante para executar alguma coisa!
Porém ao contrário de um Shell Script, um Job contém algumas estruturas para organização das atividades, chamadas de steps. Cada Step é uma atividade com um propósito definido, por exemplo, os passos para se compilar uma aplicação pode ser:
- Baixar o código fonte;
- Compilar a aplicação;
- Copiar o artefato compilado para uma outra pasta;
- Enviar um email informando o sucesso da compilação;
Característica 2: Plugins
O Jenkins não serve de nada sem os plugins. 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:
- A integração com diversos provedores de autenticação;
- A estrutura de Roles de usuários;
- Os modos de acionamento dos
Jobs; - Integração com várias outras ferramentas (Jira, slack, google chat, github, etc..);
- Customização de layout;
- ….
A lista é gigante, e se houver a necessidade, você pode criar seu próprio plugin. (Um dia você irá precisar :lol:)
Característica 3: Filesystem
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 xml. O jenkins durante sua execução acessa a variável de ambiente JENKINS_HOME onde está o caminho dos arquivos internos.
Lembra do volume criado quando geramos o Docker? Ela é justamente a pasta apontada pelo JENKINS_HOME.
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.
Finalização
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.
Caso tenha alguma dúvida, ou uma sugestão, entre em contato.
Abraços!
Photo by Tian Kuan on Unsplash