DEV Community

Cover image for Instalar Jenkins en Docker
Ulises Serrano
Ulises Serrano

Posted on

Instalar Jenkins en Docker

En este post vamos a dar una revisada de como instalar Jenkins dentro de un contenedor de Docker. Jenkins es una herramienta Open Source y es una de las herramientas más utilizadas para la automatización de tareas o generación de pipelines.

Prerequisitos:

  • Tener instalado Docker
  • Jalar la imagen de Docker in Docker de Docker Hub por medio del siguiente comando: docker pull docker:dind

Antes de comenzar lo que necesitamos es crear una red con Docker en este ejemplo la llamaremos jenkins.

docker network create jenkins
Enter fullscreen mode Exit fullscreen mode

Posteriormente lo que necesitamos es instalar un contenedor con Docker para que tenga acceso al de Jenkins y se puede ocupar los comandos de Docker dentro de Jenkins, para ello ejecutamos la siguiente instrucción en nuestra línea de comandos.

docker run \
  --name jenkins-docker \
  --detach \
  --privileged \
  --network jenkins \
  --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins-docker-certs:/certs/client \
  --volume jenkins-data:/var/jenkins_home \
  docker:dind \
  --storage-driver overlay2
Enter fullscreen mode Exit fullscreen mode

Lo vamos a ir desglosando paso a paso para que sepamos que estamos haciendo con la anterior instrucción.

  1. Se especifica el nombre del contenedor.
  2. Se corre el contenedor en segundo plano y no se quede atado a la terminal en la que estamos ejecutando el comando.
  3. Para ejecutar Docker in Docker se necesita de privilegios para ser ejecutado, es por ello que esta línea es requerida.
  4. Queremos que se conecte a la red que creamos en el paso anterior.
  5. Se genera una variable de entorno en donde se administrarán los certificados TLS de Docker.
  6. Se crea un volumen persistente con el directorio de jenkins-docker-certs para la administración de los certificados TLS.
  7. Se crea un volumen persistente con el directorio jenkins-data, este volumen ayuda a que el contenedor de Docker pueda tener acceso a Jenkins.
  8. Como parte de docker run tambien queremos que ejecute la imagen de Docker in Docker pero con una pequeña configuración el driver de almacenamiento sea overlay2.

Una vez que tenemos el contenedor de Docker configurado vamos a personalizar la imagen de Jenkins para que Docker pueda autenticar los paquetes del mismo e instala dos plugings.

FROM jenkins/jenkins:2.440.2-jdk17
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
Enter fullscreen mode Exit fullscreen mode

Ahora construimos la imagen de Jenkins de la siguiente manera:

docker build -t myjenkins-blueocean:2.440.2-1 .
Enter fullscreen mode Exit fullscreen mode

Una vez creada la imagen de Jenkins la tenemos que correr son los siguientes parámetros.

docker run \
  --name jenkins-blueocean \
  --restart=always\
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  myjenkins-blueocean:2.440.2-1
Enter fullscreen mode Exit fullscreen mode

Lo vamos a desglosar paso a paso para que entendamos que hace cada parámetro.

  1. Se especifica el nombre del contenedor.
  2. En caso de que el contenedor se pare se tiene que volver a levantar.
  3. Se corre el contenedor en segundo plano y no se quede atado a la terminal en la que estamos ejecutando el comando.
  4. Queremos que se conecte a la red que creamos en el paso anterior.
  5. Se configuran las variables que son usadas por docker y docker-compose para conectar con las herramientas de Docker ya configuradas.
  6. Se expone el puerto 8080 para entrar al contenedor de Jenkins a través del portal web.
  7. Se generan los volúmenes tanto jenkins-data como jenkins-docker-cert

Una vez corriendo el contenedor de Jenkins se puede acceder por medio de la IP del servidor en el puerto 8080, se desplegará una pantalla como la siguiente:

Pantalla de configuración de Jenkins

Nos solicita que ingresemos la contraseña del administrador que la podemos obtener de la siguiente manera estando dentro del contenedor.

cat /var/jenkins_home/secrets/initialAdminPassword
Enter fullscreen mode Exit fullscreen mode

Copiamos y pegamos la clave como se muestra en la imagen.

Ejemplo de clave de administrador

De esta manera ya tendrías corriendo Jenkins.

Top comments (0)