Configuración de Credenciales - Eziuz/Proyecto-POLI-Generador-de-Claves GitHub Wiki

🔐 Configuración de Credenciales

Esta guía te mostrará cómo obtener y configurar las credenciales necesarias para que Jenkins pueda acceder a GitHub y Docker Hub automáticamente.

🎯 ¿Por qué necesitamos credenciales?

Nuestro pipeline necesita acceso a:

  • 📂 GitHub: Para clonar el repositorio y detectar cambios
  • 🐳 Docker Hub: Para publicar las imágenes construidas
  • 🔒 Seguridad: Sin exponer tokens en el código

🏗️ Flujo de Credenciales

graph TB
    A[👨‍💻 Developer] --> B[🔑 Genera Tokens]
    B --> C[📂 GitHub Token]
    B --> D[🐳 Docker Hub Token]
    C --> E[🤖 Jenkins Credentials]
    D --> E
    E --> F[🔄 Pipeline Access]
    F --> G[📦 Automated Build & Push]
    
    style C fill:#f0f8ff
    style D fill:#e6f3ff
    style E fill:#fff0f5
    style F fill:#f0fff0

📋 Credenciales Necesarias

Servicio Tipo Propósito Duración
GitHub Personal Access Token Clonar repos privados, webhooks Configurable
Docker Hub Access Token Push/Pull imágenes Configurable

🐙 Configuración de GitHub

Paso 1: Crear Personal Access Token

  1. Ir a GitHubSettings

  2. Navegar a "Developer settings" → "Personal access tokens" → "Tokens (classic)"

  3. Hacer clic en "Generate new token" → "Generate new token (classic)"

Paso 2: Configurar el Token

Configuración recomendada:

Campo Valor Propósito
Note Jenkins CI/CD - SecurePass Identificación del token
Expiration 90 days o No expiration Duración del token

Permisos necesarios (scopes):

  • repo - Acceso completo a repositorios

  • repo:status - Estado de commits

  • repo_deployment - Despliegues

  • public_repo - Repositorios públicos

  • workflow - Actualizar GitHub Actions

  • write:packages - Escribir en GitHub Packages (opcional)

  • read:org - Leer información de organización (si aplica)

Paso 3: Copiar y Guardar Token

⚠️ IMPORTANTE: El token solo se muestra una vez. Cópialo inmediatamente.

ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Ejemplo de token válido:

ghp_1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T

🐳 Configuración de Docker Hub

Paso 1: Crear Access Token

  1. Ir a Docker HubAccount Settings

  2. Navegar a "Security" → "Access Tokens"

  3. Hacer clic en "New Access Token"

Paso 2: Configurar el Token

Configuración del token:

Campo Valor Descripción
Token description Jenkins CI/CD Pipeline Identificación
Access permissions Read, Write, Delete Permisos completos

Paso 3: Copiar Token

⚠️ IMPORTANTE: Al igual que GitHub, el token solo se muestra una vez.

dckr_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxx

Ejemplo de token válido:

dckr_pat_1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T

🤖 Configuración en Jenkins

Paso 1: Acceder a Gestión de Credenciales

  1. Ir a Jenkinshttp://localhost:8080

  2. Navegar a "Manage Jenkins" → "Manage Credentials"

  3. Hacer clic en "System" → "Global credentials (unrestricted)"

Paso 2: Agregar Credenciales de Docker Hub

  1. Hacer clic en "Add Credentials"
  2. Configurar como sigue:
Campo Valor Descripción
Kind Username with password Tipo de credencial
Scope Global Disponible para todos los jobs
Username dennismorato Tu usuario de Docker Hub
Password dckr_pat_... El token que copiaste
ID dockerhub-credentials ⚠️ EXACTO - usado en Jenkinsfile
Description Docker Hub Access Token for CI/CD Descripción

⚠️ CRÍTICO: El ID debe ser exactamente dockerhub-credentials porque así está configurado en nuestro Jenkinsfile:

environment {
    DOCKERHUB_CREDENTIALS = credentials('dockerhub-credentials')
    // ...
}

Paso 3: Agregar Credenciales de GitHub (Opcional)

Si tu repositorio es privado o quieres webhooks automáticos:

  1. Hacer clic en "Add Credentials"
  2. Configurar como sigue:
Campo Valor Descripción
Kind Secret text Para tokens de API
Scope Global Disponible globalmente
Secret ghp_... Tu token de GitHub
ID github-token Identificador único
Description GitHub Personal Access Token Descripción

Paso 4: Verificar Credenciales

Deberías ver algo como esto:

Global credentials (unrestricted)
├── dockerhub-credentials (dennismorato/****)
└── github-token (Secret text)

✅ Verificación de Credenciales

Verificar Docker Hub

  1. Ir a "Manage Jenkins" → "Script Console"
  2. Ejecutar este script:
withCredentials([usernamePassword(credentialsId: 'dockerhub-credentials', 
                                  usernameVariable: 'USER', 
                                  passwordVariable: 'PASS')]) {
    println "Username: ${USER}"
    println "Password length: ${PASS.length()}"
    println "Password starts with: ${PASS.substring(0, 10)}..."
}

Resultado esperado:

Username: dennismorato
Password length: 44
Password starts with: dckr_pat_1...

Verificar GitHub (si configurado)

withCredentials([string(credentialsId: 'github-token', variable: 'TOKEN')]) {
    println "Token length: ${TOKEN.length()}"
    println "Token starts with: ${TOKEN.substring(0, 10)}..."
}

Resultado esperado:

Token length: 40
Token starts with: ghp_1A2B3C...

🔒 Mejores Prácticas de Seguridad

🛡️ Gestión de Tokens

✅ Hacer ❌ No Hacer
Usar tokens con permisos mínimos Dar permisos de admin innecesarios
Configurar expiración Tokens sin expiración (en producción)
Rotar tokens regularmente Reutilizar tokens comprometidos
Usar descripciones claras IDs genéricos como "token1"
Monitorear uso de tokens Ignorar logs de acceso

🔄 Rotación de Credenciales

Cada 90 días (recomendado):

  1. Generar nuevos tokens en GitHub/Docker Hub
  2. Actualizar credenciales en Jenkins
  3. Probar pipeline con nuevas credenciales
  4. Revocar tokens antiguos

📊 Monitoreo

Verificar regularmente:

  • 📈 Uso de tokens en GitHub/Docker Hub
  • 🚨 Intentos de acceso fallidos
  • Fechas de expiración
  • 🔍 Logs de Jenkins para errores de autenticación

🚨 Troubleshooting

Error: "Invalid credentials"

Síntomas:

ERROR: Invalid username or password

Soluciones:

  1. ✅ Verificar que el token no haya expirado
  2. ✅ Confirmar que el username es correcto
  3. ✅ Regenerar token si es necesario
  4. ✅ Verificar permisos del token

Error: "Credentials not found"

Síntomas:

ERROR: Could not find credentials entry with ID dockerhub-credentials

Soluciones:

  1. ✅ Verificar que el ID sea exactamente dockerhub-credentials
  2. ✅ Confirmar que las credenciales estén en "Global"
  3. ✅ Reiniciar Jenkins si es necesario

Error: "Access denied"

Síntomas:

ERROR: denied: requested access to the resource is denied

Soluciones:

  1. ✅ Verificar permisos del token Docker Hub
  2. ✅ Confirmar que el repositorio existe
  3. ✅ Verificar que el usuario tenga permisos de push

🧪 Prueba de Credenciales

Script de Prueba Completo

// Probar credenciales de Docker Hub
try {
    withCredentials([usernamePassword(credentialsId: 'dockerhub-credentials', 
                                      usernameVariable: 'DOCKER_USER', 
                                      passwordVariable: 'DOCKER_PASS')]) {
        def proc = "docker login -u ${DOCKER_USER} --password-stdin".execute()
        proc.outputStream.write("${DOCKER_PASS}\n".bytes)
        proc.outputStream.close()
        proc.waitFor()
        
        if (proc.exitValue() == 0) {
            println "✅ Docker Hub login successful"
        } else {
            println "❌ Docker Hub login failed"
        }
    }
} catch (Exception e) {
    println "❌ Error testing Docker credentials: ${e.message}"
}

// Logout por seguridad
"docker logout".execute().waitFor()

📋 Checklist de Configuración

Antes de continuar, verifica:

  • GitHub Token creado con permisos correctos
  • Docker Hub Token creado con permisos Read/Write/Delete
  • Credenciales agregadas en Jenkins con IDs correctos
  • Credenciales verificadas con scripts de prueba
  • Tokens guardados en lugar seguro (gestor de contraseñas)

IDs de Credenciales Configurados

Servicio ID en Jenkins Variable en Pipeline
Docker Hub dockerhub-credentials DOCKERHUB_CREDENTIALS
GitHub github-token GITHUB_TOKEN (opcional)

🎉 ¡Credenciales Configuradas!

Excelente trabajo. Ahora Jenkins puede acceder automáticamente a GitHub y Docker Hub de forma segura.

Próximos Pasos

  1. ⚙️ Crear tu Primer Pipeline →
  2. 🔍 Entender el Jenkinsfile →

Verificación Final

  • ✅ Credenciales de Docker Hub configuradas
  • ✅ Tokens con permisos apropiados
  • ✅ IDs correctos para el pipeline
  • ✅ Pruebas de conectividad exitosas