Hola, hoy vamos a aprender cómo podemos generar una imagen de Docker en cada subida que hagamos a Jenkins de forma automática con CI/CD.

Lo primero que vamos a hacer es acceder a nuestro Jenkins y almacenar las contraseñas de nuestro Docker Registry (si las tiene).

Abrimos administrar Jenkins.
Y pulsamos en Manage Credentials:

Pulsamos donde pone global en alguna de ellas:

Y pulsamos en Add Credentials.

Elegimos credenciales de tipo Username with password (aquí indicamos los credenciales de nuestro Docker Registry) y los rellenamos:

Elegimos de id: docker_registry_credentials y pulsamos en create.
Ahora ya tenemos configurado nuestro Jenkins.
Tenemos que configurar el Jenkinsfile.
Para ello editamos nuestro Jenkinsfile o lo creamos y añadimos:
pipeline { agent any environment { //Generar imagen docker DOCKER_REGISTRY_CREDENTIALS = credentials('registry_credentials') URL_DOCKER_REGISTRY = 'url_docker_registry' IMAGE_VERSION = sh(script: 'date +%Y%m%d', returnStdout: true).trim() DOCKER_IMAGE_NAME = "${URL_DOCKER_REGISTRY}:${IMAGE_VERSION}" } stages { stage('Docker Login') { steps { script { sh "docker login -u ${DOCKER_REGISTRY_CREDENTIALS_USR} -p ${DOCKER_REGISTRY_CREDENTIALS_PSW} ${URL_DOCKER_REGISTRY}" } else { error('Credenciales del Docker Registry no encontradas') } } } } stage('Build and Push Docker Image') { steps { script { // Construye la imagen de Docker con el nombre y versión especificados sh "docker build -t ${DOCKER_IMAGE_NAME} ." sh "docker push ${DOCKER_IMAGE_NAME}" } } } } }
Otra opción es usar un terminal ssh:
stage('Create Docker Image') { steps { sshagent(['Oracle_ecare_ssh']) { sh "ssh -o StrictHostKeyChecking=no -i $SSH_KEY user@$IP_SERVER 'docker login -u $DOCKER_REGISTRY_CREDENTIALS_USR -p $DOCKER_REGISTRY_CREDENTIALS_PSW $URL_DOCKER_REGISTRY && docker build -t $DOCKER_IMAGE_NAME . && docker push $DOCKER_IMAGE_NAME && docker logout $URL_DOCKER_REGISTRY && docker rmi $DOCKER_IMAGE_NAME '" } } }
Tendremos que cambiar la línea
URL_DOCKER_REGISTRY = 'url_docker_registry'
Por la url dónde tengamos desplegado el docker registry.
Y ya debería generar automáticamente las imagenes.

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.