Rodando Jenkins em um Raspberry Pi Zero W
Raspberry Pi é um computador muito simples e com hardware limitado e, por esse motivo é muito barato e usado para as mais diversas coisas, desde um simples desktop até robôs e máquinas de jogos retrô. Esses são alguns exemplos, mas basta procurar pra ver a quantidade de projetos feitos utilizando esse simples pedaço de hardware.
O modelo mais simples atualmente é o Raspberry Pi Zero que custa USD 5 e possui um processador single-core de 1 GHz, 512MB de RAM, slot para micro SD, uma porta micro USB para conectar periféricos, uma porta micro USB para energia e uma porta mini HDMI. A versão que usei para configurar o Jenkins é o Raspberry Pi Zero W, que possui o mesmo hardware porém, com Wi-Fi e Bluetooth, o que faz o valor aumentar para USD 10.
A ideia de rodar o Jenkins neste hardware limitado surgiu como um primeiro projeto para poder entender como é trabalhar com um Raspberry Pi, e os requisitos mínimos para instalar este sistema de integração contínua (CI) estão dentro das configurações do hardware. Estou utilizando um micro SD de 64GB, que é mais do que suficiente.
O primeiro passo é baixar o Raspberry Pi Imager para o seu sistema operacional e conectar o card micro SD em sua máquina para ser formatado e instalar o OS. Aqui vem o primeiro detalhe: Apesar de ter alguns sistemas operacionais na lista, como o Ubuntu, o processador do Raspberry Pi Zero é um ARM6, e por esse motivo ele é limitado aos sistemas operacionais desta arquitetura. A única opção deste lista é o Raspberry Pi OS, que é um port do Debian.
É possível conectar monitor, mouse e teclado no Raspberry Pi Zero, utilizando os devidos conectores. Mas, no meu caso, quero acessá-lo pela rede como um servidor, por isso não preciso de uma interface de desktop. Sendo assim, instalei o Raspberry Pi OS Lite, que não possui desktop. Caso você queira rodar outros sistemas operacionais, um hardware mais robusto como o Raspberry Pi 4 pode ser uma opção melhor.
Com o micro SD formatado e com o Raspberry Pi OS Lite devidamente instalado nele, é preciso fazer apenas duas configurações antes de colocá-lo no Raspberry Pi Zero e iniciar seu sistema. O acesso por SSH vem desabilitado por padrão, e para habilitá-lo precisamos criar um arquivo com nome SSH na raiz do micro SD. Além disso, como o acesso vai ser feito por Wi-Fi, é preciso criar um arquivo com o nome da rede e senha para que ele conecte automaticamente na rede. Os comandos abaixo podem ser utilizamos no macOS para criar os arquivos.
Em seguida, abra o arquivo wpa_supplicant.conf no notepad ou similar para editar seu conteúdo. Cole o texto abaixo, mas lembre de substituir os valores para sua rede Wi-Fi e senha.
Agora pode-se remover o micro SD e colocá-lo no Raspberry Pi Zero, e então conectá-lo na energia para ser iniciado. Por mais que sua fonte de alimentação seja um cabo micro USB, não conecte em sua máquina, mas sim utilize um adaptador para ligá-lo na tomada. Depois de algumas piscadas o LED verde da placa deve ficar estável, e então abra seu terminal e utilize os comandos abaixo para conectar no Raspberry Pi Zero. O usuário padrão é pi e a senha padrão é raspberry, lembre-se de alterá-la depois.
Após conectar com sucesso no Raspberry Pi Zero, é preciso atualizar seus pacotes e instalar o Java 1.8, o qual é necessário para rodar o Jenkins. Instalar o Java padrão irá causar diversos erros por causa da arquitetura do hardware. Por isso, utilizei o OpenJava, que possui uma versão do Java 1.8 para o ARM6. Conforme as linhas abaixo:
Por fim, para instalar o Jenkins. Lembre-se de que o Raspberry Pi OS é um port do Debian, por isso é necessário executar os passos para instalação do Jenkins no Debian. Se você estiver utilizando outro sistema operacional, procure as instruções adequadas no site oficial. A última linha do bloco abaixo, adicionar o Jenkins como um serviço para sempre ser inicializado junto com o sistema operacional.
Com todos estes comandos executados com sucesso, você está pronto para abrir o navegador em http://raspberrypi.local:8080 e começar a configurar o Jenkins seguindo os passos no navegador. Parabéns, você tem um CI rodando em um Raspberry Pi!
Existe um pequeno detalhe que só descobri depois de tudo isso. Apesar do Raspberry Pi Zero estar nos requisitos mínimos para rodar o Jenkins, ele é extremamente lento. Se prepare para ver a tela acima por vários minutos antes de fazer qualquer coisa no Jenkins. E tenha paciência para configurar jobs, muita paciência mesmo! O hardware é muito limitado, e apesar de um projeto interessante, não recomendo utilizá-lo como um servidor local de CI. Provavelmente um Raspberry Pi 4 funcione melhor, pois possui um processador quad-core e o principal gargalo nesse sistema é o processamento.
Com muita paciência consegui criar um servidor Node e fazer o deploy de uma aplicação bem simples utilizando o Jenkins, tudo rodando no mesmo servidor do Raspberry Pi Zero - algo bem impressionante, beirando o limite de memória RAM do hardware.