Auto generar una imagen de Docker usando Jenkins y subirla a un servidor Docker Registry

Tiempo de lectura: 2 minutos

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.

Deja un comentario