Executar o build do Jenkins dentro de um container.

Instalando Docker

# instalando
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce

# adicionando usuario ao grupo docker para evitar usar sudo
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo newgrp docker ou logout/login

# ativando na inicialização do sistema e iniciando o serviço
sudo systemctl enable docker
sudo systemctl start docker

# a execução dos comando abaixo com sucesso indica que o docker foi instalado corretamente
docker images
docker run hello-world

Configurando Docker

Se o acesso ao daemon do docker é feito de uma máquina remota, é necessário configurar o hosts no arquivo /etc/docker/daemon.json, em outras palavras, se o jenkins está em uma máquina e o docker em outra, essa configuração é necessária.

Adicionar o conteúdo abaixo ao arquivo /etc/docker/daemon.json

{
  "hosts": ["tcp://0.0.0.0:2375"]
}

Essa configuração expõe o acesso ao daemon do docker a partir de todas as interfaces de rede. Para garantir a segurança tem que usar certificado: https://docs.docker.com/engine/security/https/

Reiniciar o docker

sudo systemctl restart docker

Configurando Jenkins

Instalar o plugin Docker Plugin: https://wiki.jenkins.io/display/JENKINS/Docker+Plugin

Jenkins - Instalando plugin Docker

Configurar plugin

  1. abrir o Jenkins
  2. menu Manage Jenkins
  3. menu Configure System
  4. na seção Cloud
    1. clicar em Add a new cloud > Docker > preencher os campos
    2. Name: docker cloud
    3. Docker Host URI: unix:///var/run/docker.sock ou tcp://IP-MAQUINA-DOCKER:2375
    4. clicar em Test Connection e se tudo ok deve exibir a versão do docker
    5. Enabled: check
    6. Container Cap: 5
    7. clicar em Docker Agent templates...
    8. clicar em Add Docker Template
    9. Labels: docker-slave
    10. Enabled: check
    11. Docker Image: jenkins/ssh-slave
    12. clicar em Container settings...
    13. Remote Filing System Root: /home/jenkins
    14. Usage: Only build jobs with label expressions matching this node
    15. Connect method: Connect with SSH
    16. SSH Key: Inject SSH Key
    17. User: jenkins
    18. Pull strategy: Pull once and update latest
  5. clicar em Save

Overview da configuração

Jenkins - Docker Conf Overview

Criar Job (ou alterar um existente)

Configurar o build para executar em container

  1. abrir as configurações do job
  2. marcar a opção Restrict where this project can be run
  3. Label Expression: docker-slave Jenkins - Restrict where this project can be run

Buildar

Jenkins - Buildando dentro de container

Versões/Referências