Instalación de Jenkins usando Docker como runner
- Francisco Javier Huete
- Implantacion
- March 9, 2025
Índice
En primer lugar, en un equipo con Docker instalado instalamos también Jenkins.
sudo apt update
sudo apt install fontconfig openjdk-17-jre
sudo 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
sudo apt update
sudo apt install jenkins
Para que Jenkins pueda usar docker como runner hay que añadir el usuario jenkins
al grupo docker
.
sudo usermod -aG docker jenkins
Para configurar la aplicación se accede a la IP de la máquina en el puerto 8080 y se indica la contraseña que se ha generado en el directorio /var/lib/jenkins/secrets/initialAdminPassword durante la instalación.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
En adelante, la instalación es interactiva a través de la interfaz gráfica del navegador.
Para poder usar Jenkins con Docker, en el menú Administrar Jenkins -> Plugins
se instalan los plugins Docker
y Docker Pipeline
.
Después se configura una nueva cloud en Administrar Jenkins -> Nodes -> Clouds
. Esta nube debe ser de tipo docker y, en la configuración, se indica el socket unix de docker.
unix:///var/run/docker.sock
Para aplicar la configuración hay que reiniciar el servicio.
sudo systemctl restart jenkins.service
Y después, se puede hacer una prueba con un pipeline de ejemplo.
pipeline {
agent {
docker { image 'python:3' }
}
stages {
stage('Test') {
steps {
sh 'python --version'
}
}
}
}
La ejecución de este pipeline tiene el siguiente resultado:
Started by user admin
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/Prueba@2
[Pipeline] {
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . python:3
Error: No such object: python:3
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker pull python:3
3: Pulling from library/python
a492eee5e559: Pulling fs layer
32b550be6cb6: Pulling fs layer
35af2a7690f2: Pulling fs layer
7576b00d9bb1: Pulling fs layer
42c54e83066f: Pulling fs layer
d49ecfcc3fa9: Pulling fs layer
b2eee27aad58: Pulling fs layer
42c54e83066f: Waiting
d49ecfcc3fa9: Waiting
b2eee27aad58: Waiting
7576b00d9bb1: Waiting
32b550be6cb6: Verifying Checksum
32b550be6cb6: Download complete
a492eee5e559: Verifying Checksum
a492eee5e559: Download complete
35af2a7690f2: Verifying Checksum
35af2a7690f2: Download complete
42c54e83066f: Verifying Checksum
42c54e83066f: Download complete
b2eee27aad58: Verifying Checksum
b2eee27aad58: Download complete
d49ecfcc3fa9: Verifying Checksum
d49ecfcc3fa9: Download complete
a492eee5e559: Pull complete
32b550be6cb6: Pull complete
7576b00d9bb1: Verifying Checksum
7576b00d9bb1: Download complete
35af2a7690f2: Pull complete
7576b00d9bb1: Pull complete
42c54e83066f: Pull complete
d49ecfcc3fa9: Pull complete
b2eee27aad58: Pull complete
Digest: sha256:08471c63c5fdf2644adc142a7fa8d0290eb405cda14c473fbe5b4cd0933af601
Status: Downloaded newer image for python:3
docker.io/library/python:3
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 104:109 -w /var/lib/jenkins/workspace/Prueba@2 -v /var/lib/jenkins/workspace/Prueba@2:/var/lib/jenkins/workspace/Prueba@2:rw,z -v /var/lib/jenkins/workspace/Prueba@2@tmp:/var/lib/jenkins/workspace/Prueba@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** python:3 cat
$ docker top 9e57b359c48d8132334c635b8e6e98a7893f54c52fa02a2007cf81e1262ef040 -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ python --version
Python 3.13.2
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 9e57b359c48d8132334c635b8e6e98a7893f54c52fa02a2007cf81e1262ef040
$ docker rm -f --volumes 9e57b359c48d8132334c635b8e6e98a7893f54c52fa02a2007cf81e1262ef040
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS