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
-
Ir a GitHub → Settings
-
Navegar a "Developer settings" → "Personal access tokens" → "Tokens (classic)"
-
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
-
Ir a Docker Hub → Account Settings
-
Navegar a "Security" → "Access Tokens"
-
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
-
Ir a Jenkins →
http://localhost:8080
-
Navegar a "Manage Jenkins" → "Manage Credentials"
-
Hacer clic en "System" → "Global credentials (unrestricted)"
Paso 2: Agregar Credenciales de Docker Hub
- Hacer clic en "Add Credentials"
- 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:
- Hacer clic en "Add Credentials"
- 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
- Ir a "Manage Jenkins" → "Script Console"
- 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):
- Generar nuevos tokens en GitHub/Docker Hub
- Actualizar credenciales en Jenkins
- Probar pipeline con nuevas credenciales
- 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:
- ✅ Verificar que el token no haya expirado
- ✅ Confirmar que el username es correcto
- ✅ Regenerar token si es necesario
- ✅ Verificar permisos del token
Error: "Credentials not found"
Síntomas:
ERROR: Could not find credentials entry with ID dockerhub-credentials
Soluciones:
- ✅ Verificar que el ID sea exactamente
dockerhub-credentials
- ✅ Confirmar que las credenciales estén en "Global"
- ✅ Reiniciar Jenkins si es necesario
Error: "Access denied"
Síntomas:
ERROR: denied: requested access to the resource is denied
Soluciones:
- ✅ Verificar permisos del token Docker Hub
- ✅ Confirmar que el repositorio existe
- ✅ 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
Verificación Final
- ✅ Credenciales de Docker Hub configuradas
- ✅ Tokens con permisos apropiados
- ✅ IDs correctos para el pipeline
- ✅ Pruebas de conectividad exitosas