Instalación y configuración de Jenkins
A continuación se describe cómo desplegar Jenkins como un contenedor de Docker.
Construcción del contenedor Jenkins
La imagen pública del contenedor de Jenkins está disponible en DockerHub, con el nombre jenkins/jenkins:lts. Esta imagen genérica necesita instalarle algunos plugins y herramientas. En concreto, hay que instalarle el propio Docker para permitir que Jenkins ejecute tareas de docker, como por ejemplo docker build para construir imágenes de contenedores. Esto es lo que se conoce como Docker-in-Docker (dind), y hay que gestionarlo correctamente cuando se trata de entornos de CI.
Por tanto, vamos a crear una imagen personalizada del contenedor de Jenkins basándonos en la imagen pública e instalándo Docker dentro del contenedor. Lo más adecuado es que construyas la imagen de Jenkins con Docker en la propia máquina donde lo vamos a ejecutar, es decir en la instancia de jenkins.
Conecta por ssh a la instancia de jenkins. Recuerda que el usuario de la instancia es ubuntu. Por tanto, la conexión a la misma consistiría en ejecutar desde el terminal el comando
ssh ubuntu@MAQUINA_JENKINS
sustituyendo MAQUINA_JENKINS por la IP o el nombre DNS de la misma.
|
Si utilizas la shell de la consola web de Google Cloud para conectar por ssh a la máquina, verás que estarás conectado como tu usuario de la UAL, del tipo |
|
Realiza las actividades conectando a las instancias bien con el usuario |
|
Prueba que docker se ejecuta correctamente. Si la ejecución de
Tras ello, reinicia la sesión. Prueba ahora sin |
Crea una carpeta jenkins-docker y crea el archivo Dockerfile. Usa el siguiente Dockerfile (descrito en esta entrada de medium.com: Jenkins Building Docker Image and Sending to Registry.
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
RUN apt-get install -y docker-ce
RUN usermod -a -G docker jenkins
USER jenkins
Construimos la imagen a partir del Dockerfile:
docker build --tag ualjjcanada/jenkins-docker:1.0 . (1)
| 1 | Sustituye ualjjcanada/ por tu usuario de Dockerhub si estás registrado, si no simplemente no lo pongas. |
docker build de Jenkins con Docker
docker build successfulComprueba que la imagen ha sido creada, y está disponible en tu máquina:
docker image ls
docker image lsPublicación en Google Container Registry
Opcionalmente podemos publicar nuestra imagen personalizada en DockerHub, o alternativamente el Google Container Registry. Más adelante se describirá cómo hacerlo.
Ejecución del contenedor de Jenkins
Ejecutamos el contenedor a partir de la imagen creada previamente.
-
Crear una carpeta para
jenkins_homeque configuraremos como volumen para que los datos de Jenkins se guarden fuera del contenedor.
mkdir ~/jenkins_home
chmod 777 ~/jenkins_home
-
Ejecutamos el contenedor con
docker run:
docker run -d --name jenkins-docker -p 80:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v ~/jenkins_home:/var/jenkins_home --restart always ualjjcanada/jenkins-docker:1.0
Los parámetros de docker run son:
-
--name jenkins-docker: nombre que le asignamos al contenedor -
-p 80:8080: jenkins se ejecutará en el puerto 80 en el host, que está mapeado al puerto 8080 del contenedor -
-v /var/run/docker.sock:/var/run/docker.sock: volumen para compartir el docker socket (usado en la máquina host) con el contenedor. -
-v ~/jenkins_home:/var/jenkins_home: mapea la carpeta local~/jenkins_homecon la carpeta/var/jenkins_homedel contenedor. En el contenedor, la carpeta HOME del usuario jenkins es/var/jenkins_home, donde Jenkins guarda todos los archivos que utiliza. Si se tira el contenedor o se actualiza, no se pierden los datos ya que se guardan "fuera" del contenedor. -
--restart always: inicia el contenedor cuando se enciende la instancia. -
ualjjcanada/jenkins-docker:1.0: imagen del contenedor a ejecutar, la que hemos construido en el paso anterior.
-
Comprueba que el contenedor está ejecutándose con
docker ps
docker psConfiguración básica de Jenkins
A continuación se muestran los pasos a realizar en el inicio y configuración básica de Jenkins. Además, se describe la instalación de algunos plugins adicionales.
-
Conectamos a la IP/URL de la instancia con el navegador web. Aparecerá la ventana para introducir el password inicial. Para ver el password ejecuta:
cat /home/ubuntu/jenkins_home/secrets/initialAdminPassword
-
Selecciona Install suggested plugins.
Tras unos minutos, introduce los datos del usuario administrador de Jenkins. Introduce un nombre de usuario y contraseña.
Acepta el nombre de dominio de la máquina. Si aun no has registrado el nombre de dominio, lo puedes hacer más tarde en la configuración general de Jenkins.
Jenkins está listo.
Instalación de plugins adicionales
Vamos a instalar varios plugins: NodeJs, GitHub integration, Docker Pipeline, Warnings Next Generation, Jacoco, Code Coverage API, Google Container Registry Auth.
Haz clic en Manage Jenkins > Manage Plugins. En la pestaña Available busca Github integration, seleccionaló y pulsa en Download now and install after restart.
Repite los pasos para los plugins Green Balls, NodeJS y Docker Pipeline.
Marca Restart Jenkins para completar la instalación. Tras unos segundos, vuelve a iniciar sesión y tendrás los plugins instalados.
Configuración las tools en Jenkins
Tras la instalación del plugin NodeJS, es necesario realizar la siguiente configuración:
-
Ve a Manage Jenkins, Global Tool configuration.
-
En NodeJS, añade un instalador (se recomienda la última versión disponible). Dale por nombre "nodejs" y marca instalar automáticamente.
-
Guarda los cambios.
De la misma forma, instala la última versión de Maven.