Resumen

Lanza versiones a staging y production con confianza: este flujo con Now, Jenkins y Docker crea un deployment por cada lanzamiento, genera una URL nueva y permite alternar vía DNS. Así aislas cambios, reduces riesgos y conectas tu pipeline para decidir si pasas a producción.

¿Cómo funciona el deployment con Now, URLs y DNS?

Now publica el código y devuelve una URL única por deployment. Puedes tener decenas o cientos de versiones y apuntar por DNS a la correcta. El cambio de DNS no es inmediato para todos: algunos clientes verán la versión anterior por un tiempo limitado. A nivel de los “bounce” sería inmediato, pero Now no ofrece eso en este contexto. Para estos objetivos es suficiente.

  • Cada deployment genera una URL nueva.
  • Puedes alternar entre versiones por DNS.
  • La propagación de DNS tarda un poco.

¿Qué preparar en Now y Jenkins antes de desplegar?

Primero, crea tu cuenta en Now, entra a Account > Account Settings y genera un token. En Jenkins, añade este token como credencial de tipo secret text y nómbralo, por ejemplo, nowToken. Ese credencial se inyecta solo en los jobs donde lo asocias.

¿Cómo añadir credenciales y variables seguras en Jenkins?

  • Ir a la página de credenciales y agregar tipo secret text.
  • Nombrar y referir la variable como nowToken.
  • Inyectar el credencial solo en el job que lo requiera.

¿Qué plugin y paquetes globales necesitas?

  • En “Global Configuration Tool”, buscar instalaciones de No JS.
  • Si falta, instalar el plugin de No JS.
  • Agregar el paquete global Now. Now es un binario disponible en los builds cuando se usa esa versión.

¿Cómo se configura el entorno de Node y npm?

  • Usar “provide node en npm en el path”.
  • Seleccionar la versión “once punto cero punto uno punto cero”.

¿Cómo automatizar el deployment a staging desde el Jenkinsfile?

Se crea un job tipo freestyle project llamado “Deploy WebApp Staging” (WebApp es el repositorio; Staging el ambiente). Aunque aquí se muestra freestyle, la recomendación es usar Jenkinsfile.

¿Qué pasos incluye el job de Deploy WebApp Staging?

  • Aceptar un parámetro: artifact ID.
  • Borrar el workspace antes de empezar. Es una buena práctica y aquí es clave.
  • Añadir “secret text or file” e inyectar nowToken.
  • Proveer node y npm en el path con la versión indicada.
  • Ejecutar un shell que cree el Dockerfile y llame a Now con el token.

Ejemplo de fragmentos (replican lo dicho, no agregan lógica nueva):

# Crear Dockerfile a partir del artifact ID
echo "from ${ARTIFACT_ID}" > Dockerfile

# Desplegar con Now usando token (alias -t de --token)
now -t "$nowToken"
  • Now detecta el Dockerfile, crea un deployment tipo Docker, lo envía a su cloud y devuelve una URL.

¿Cómo se conecta el job de deploy desde el Jenkinsfile?

En el repositorio “Plazy Scripts”, carpeta “web app”, se define: “schedule staging deployment when branch is master”. Solo se lanza a staging si el build está en master y está verde. Si fallan tests o build, no corre el stage de staging.

Fragmento ilustrativo del Jenkinsfile con parámetros y sin espera bloqueante:

// schedule staging deployment when branch is master
when { branch 'master' }
steps {
  build job: 'Deploy WebApp Staging',
        parameters: [string(name: 'artifact ID', value: env.ARTIFACT_ID)],
        wait: false
}
  • artifact ID ya se había guardado como variable de entorno del job.
  • wait: false evita que el CI espere a que termine el deployment.

¿Qué verás al ejecutar el flujo completo?

  • Desde web app en master, corre build y tests.
  • Se programa “Deploy WebApp Staging” con éxito.
  • En el job de deploy: recibe el parámetro (por ejemplo, “3”), crea el archivo, Now “pulleea” la imagen del repositorio (p. ej., “Vue ocho web app” con su tag), muestra “Build completed, verifying instantiation” y lanza.
  • La URL queda activa. Un endpoint simple “add 1 + 2” responde “3”.
  • Luego, se pueden correr tests contra esa URL para decidir si pasar a production.

¿Tienes dudas o quieres compartir cómo ajustas tu pipeline con wait: false y staging? Comenta y conversemos.