Publicar imágenes Docker a Docker Hub desde Jenkins
Clase 10 de 21 • Curso Profesional de DevOps
Contenido del curso
Containers y ambientes de desarrollo
Pruebas
Integración Continua
Despliegue Continuo
Reliability
Cierre del curso
Lleva tu integración continua al siguiente nivel al convertir tu salida de CI en un artifact reutilizable: la imagen Docker con la que ejecutas los tests. Aquí verás cómo autenticar Jenkins con Docker Hub, usar el bloque with registry para hacer docker image push y por qué guardar la imagen en remoto mejora la resiliencia y el rollback.
¿Cómo publicar imágenes Docker desde Jenkins a Docker Hub?
El objetivo es que el resultado final de la automatización sea una imagen Docker lista para uso y despliegue. Esa imagen se almacena en un repositorio: el más común es Docker Hub (también existen otros como el de AWS o uno propio). Para el flujo descrito, se usa Docker Hub como destino.
¿Qué es el artifact en CI y dónde guardarlo?
- El artifact es la imagen que construyes y con la que corres los tests.
- Guardarlo en un repositorio Docker permite reutilizarla y versionarla.
- Para este flujo, se publica en Docker Hub desde Jenkins.
¿Cómo configurar credenciales en Jenkins para Docker Hub?
- Crea una cuenta en hub.docker.com y genera un token de autenticación en tu consola.
- En Jenkins, entra a Credentials y sigue: Scopes to Jenkins > Jenkins > Global Credentials.
- Pulsa Add Credentials y elige tipo: username with password.
- Ingresa tu username y el token como contraseña.
- Asigna un ID consistente con tu pipeline, por ejemplo: "docker hub credentials".
- Asegúrate de referenciar ese ID en el código del pipeline.
¿Qué hace el bloque with registry en el Jenkinsfile?
- La publicación ocurre solo al estar en la rama master.
- El bloque with registry (también referido como withregistry) sin URL asume el valor por defecto: hub.docker.com.
- Dentro del bloque, usas las credenciales guardadas e invocas docker image push.
- Existen otros métodos de autenticación, pero este es el más sencillo; no es el más seguro.
// Jenkinsfile (fragmento ilustrativo)
// Publica la imagen cuando la rama es 'master'
when {
branch 'master'
}
steps {
script {
docker.withRegistry('', 'docker hub credentials') {
// La imagen ya fue construida y tagueada en 'build'
sh 'docker image push <imagen:tag>'
}
}
}
¿Qué sucede al hacer docker image push en el pipeline?
Al ejecutar la etapa de publicación, Jenkins usa las credenciales para autenticarse y subir la imagen al repositorio remoto. El proceso gestiona automáticamente los layers, los tags y el registro del hash resultante.
¿Cómo se resuelven los tags y los layers?
- No necesitas pasar el tag en el push: ya se definió en el build.
- El push sube los layers al repositorio; los existentes se reutilizan.
- El registro muestra el hash de la imagen y el output del proceso.
¿Qué señales confirman autenticación y publicación?
- Verás "authentication succeeded" en el log cuando Jenkins se conecte a Docker Hub.
- El bloque with registry automatiza la sesión y el docker push.
- El log muestra qué layers se suben y el resultado final del push.
¿Por qué guardar el artifact en remoto para rollback?
- La imagen también vive en Jenkins, pero en remoto queda disponible siempre.
- Mantienes redundancia ante fallos locales: si Jenkins falla, la imagen sigue en Docker Hub.
- Facilita un rollback rápido con una versión previamente publicada.
- Como siguiente paso, se puede hacer el deployment de esa imagen con Now.
¿Tienes dudas sobre la configuración de credentials o el bloque with registry? Cuéntame tu contexto y podemos afinar tu pipeline paso a paso.