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.