Hace unos meses escribí sobre creación de una canalización de despliegue continuo con Node.js y Jenkinsdonde la aplicación Node.js utilizaba Couchbase de alguna manera. Esencialmente, tomó un proyecto de GitHub, instaló las dependencias, ejecutó las pruebas y luego ejecutó la aplicación en algún servidor, donde algún servidor era la misma máquina en la que estaba Jenkins.
Jenkins está muy bien, pero cuesta mucho trabajo configurarlo y mantenerlo en funcionamiento. En su lugar, existen soluciones alojadas de integración continua (CI) y despliegue continuo (CD), como CircleCI.
Vamos a ver cómo tomar un proyecto Node.js que está controlado por versiones en GitHub y desplegarlo continuamente en algún servidor remoto usando CircleCI cada vez que se hace un push.
Antes de continuar, deberías haber creado una cuenta CircleCI, disponer de un servidor remoto y tener un proyecto Node.js disponible en GitHub.
En este ejemplo, estoy usando un Droplet que he creado en Océano Digital y el Proyecto de tienda de perfiles de usuario en Node.js que había escrito hace un tiempo. Siéntete libre de usar lo que quieras.
Preparación del servidor remoto para conexiones SSH
El objetivo del despliegue continuo es poder desplegar automáticamente un proyecto estable en su servidor sin problemas.
Cuando usamos CircleCI, durante el paso de despliegue, queremos que nuestro proyecto sea copiado después de que nuestro flujo de trabajo de pruebas tenga éxito. Esto puede ocurrir a través de un SCP o un Git Checkout con una serie de comandos en el servidor remoto. Lo que mejor se adapte a tus necesidades.
Como estamos usando Node.js, es mejor usar la segunda opción porque necesitaremos instalar dependencias y reiniciar el servicio Node.js. Tiene un poco más de profundidad que simplemente copiar archivos. Por esta razón, necesitaremos CircleCI para poder conectarnos a nuestra instancia remota a través de SSH.
La forma más segura de hacerlo es crear una clave privada SSH para CircleCI. Desde su servidor, suponiendo que sea Linux, ejecute lo siguiente:
1 |
ssh-keygen -t rsa -C "circleci" |
Se le harán una serie de preguntas relacionadas con la clave. Es importante que esta clave SSH no contenga una contraseña, ya que CircleCI no admite contraseñas de clave por el momento.
Una vez generada la clave, ejecute lo siguiente:
1 |
cat ~/.ssh/id_rsa.pub >> ~/.ssh/llaves_autorizadas |
El comando anterior asume que usted ha nombrado a su clave id_rsa. Añadirá la clave pública al final del archivo llaves_autorizadas archivo.
El contenido del id_rsa El archivo de clave privada debe copiarse en nuestro panel CircleCI más adelante en esta guía.
Antes de diseñar el flujo de trabajo, necesitamos clonar el proyecto de GitHub en nuestro servidor. Tomemos como ejemplo lo siguiente:
1 |
git clonar https://github.com/my-example-project ./perfil-almacén |
Es importante recordar dónde ha clonado el proyecto, ya que será utilizado por el script de despliegue en nuestro flujo de trabajo. CircleCI hará SSH en nuestro servidor y hará un git pull
dentro del directorio del proyecto.
Diseño de los pasos del flujo de trabajo
Antes de que el proyecto sea recogido por CircleCI, necesita ser alterado un poco en GitHub. CircleCI, como muchas otras soluciones CI / CD, requiere un archivo de configuración para ser colocado en el proyecto.
Suponiendo que esté mirando el perfil de usuario tienda proyectonecesitamos crear un directorio llamado .circleci en la raíz con un archivo llamado config.yml.
Abra este .circleci/config.yml y añada lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
versión: 2 puestos de trabajo: construya: docker: - imagen: circleci/nodo:7 pasos: - checkout - ejecute: nombre: instale-dependencias comando: npm instale - ejecute: nombre: pruebas comando: npm prueba - despliegue: nombre: digital-océano comando: ssh -o "StrictHostKeyChecking no" usuario@nombre de host "cd ~/profile-store; git pull; npm install; forever start app.js" |
¿Qué ocurre en la configuración anterior?
Estamos diciendo que queremos hacer girar un contenedor Docker ejecutando Node 7.x para realizar nuestras pruebas y otras pruebas de flujo de trabajo. En cuanto a los pasos, en primer lugar el proyecto se comprueba desde GitHub en el contenedor. A continuación, instalamos todas las dependencias en el proyecto, ya que no están confirmadas en GitHub. El paquete.json de nuestro proyecto tiene un script llamado prueba que en teoría ejecutaría nuestras pruebas. Nuestro proyecto no tiene pruebas reales.
Si los tres pasos anteriores se han realizado correctamente, se producirá el despliegue. Este comando se SSH en nuestro servidor, navegar hasta el directorio de nuestra elección, tirar de los cambios en el proyecto, instalar cualquier potencialmente nuevas dependencias, e iniciar el para siempre proceso.
Somos capaces de desplegar nuestro proyecto a través de SSH porque en este punto estamos seguros de que los pasos locales anteriores han tenido éxito en el contenedor.
Compila los cambios del proyecto en GitHub para que podamos configurarlo en el panel de control de CircleCI.
Configuración del proyecto en CircleCI Dashboard
Es necesario configurar algunas cosas en CircleCI para que el proceso CI/CD funcione en el proyecto. Dentro de su Cuadro de mandos de CircleCI encuentra el proyecto de GitHub que deseas gestionar. Si has vinculado GitHub con CircleCI, es muy probable que ya aparezca gracias a la adición del archivo de configuración.
En la configuración del proyecto, busque la opción Permisos SSH sección.
Deberá copiar la clave privada creada anteriormente en esta sección. Esto permitirá a CircleCI conectarse a su servidor para el despliegue. Recuerde que, a partir de ahora, la clave SSH no debe tener contraseña.
En este punto, cualquier empuje futuro a GitHub debe resultar en el inicio de la tubería. Si todo va bien, deberías poder acceder a los cambios a medida que se producen en tu servidor que ejecuta Node.js.
¿Dónde está el beneficio de NoSQL?
Digamos que los cambios en el código implican cambios en el modelo de datos. Si estuvieras usando un RDBMS, probablemente tendrías que empujar un script SQL con un montón de ALTERAR
cada vez que realice un cambio. Aunque es posible, no es nada cómodo.
Seamos un poco más específicos.
Digamos que quiero incluir información sobre direcciones en cada uno de mis perfiles de usuario, algo que no se estaba recopilando anteriormente. Con NoSQL y un modelo JSON flexible, podría simplemente añadir la información a mis objetos JavaScript que se están guardando y completar el guardado. Sin necesidad de crear ningún script de migración.
Conclusión
Acabamos de ver cómo utilizar CircleCI para el despliegue continuo de una aplicación web Node.js. Habíamos utilizado un almacén de perfiles de usuario solicitud de un ejemplo anteriory lo desplegaba en un servidor a través de SSH cada vez que se introducían nuevos cambios en GitHub.
Hay muchas soluciones de integración continua y despliegue continuo disponibles. Si desea alojar su propia solución, puede consultar una variación de este tutorial que utiliza Jenkins llamada, Crear una tubería de despliegue continuo con Node.js y Jenkins.
¡Bien, gracias!