Instalación de docker como runner de Jenkins

Hasta ahora hemos estado trabajando con una instalación de jenkins sobre docker y hemos comprobado que las tareas que se realizan se hacen sobre el mismo nodo.

En este apartado vamos a configurar jenkins para que use contenedores docker como runner, es decir cuando ejecutemos un pipeline se creará un contenedor docker donde se realizarán las tareas. Esto tiene muchas ventajas, ya que no necesito instalar en la máquina de jenkins las herramientas que necesito para ejecutar las tareas, y además podemos usar cualquier imagen docker para que ejecute dichas tareas.

Para realizar la configuración necesitamos instalar docker en la máquina de jenkins, es por ello que vamos a hacer una nueva instalación usando la paquetería que nos proporciona jenkins:

Instalación de jenkins con apt

Según el manual de instalación. ejecutamos los siguientes comandos:

apt update
apt install fontconfig openjdk-17-jre
wget -O /usr/share/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
apt-get update
apt-get install jenkins

Instalamos docker, y añadimos el usuario jenkins al grupo docker:

usermod -aG docker jenkins

Accedemos a jenkins y tenemos que obtener la clave de administración:

cat /var/lib/jenkins/secrets/initialAdminPassword

Configuración de docker como runner

Instalamos dos nuevos plugins: Docker y Docker Pipeline. (Administrar Jenkins -> Administrar Plugins). Y reiniciamos Jenkins. (Si nmo se reinicia desde el panel web podemos ejecutar systemctl restart jenkins).

docker

Configuramos una nueva nube: Administrar Jenkins -> Administrar Nodos -> Configure Clouds.

docker

Y configuramos el acceso a docker:

docker

Y ya podemos hacer una prueba, creando un pipeline con las siguientes instrucciones:

pipeline {
    agent {
        docker { image 'python:3' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'python --version'
            }
        }
    }
}

Al ejecutar el pipeline podemos observar como se ha descargado la imagen, ha creado un contenedor, ha ejecutado la instrucción indicada y finalmente borra el contenedor.

docker


Índice