GoLang

Despliegue continuo de una aplicación Golang usando Travis CI

Así que has estado desarrollando una aplicación utilizando el lenguaje de programación Go con un equipo de desarrolladores para tu organización. Las mejores prácticas dirían que necesitas crear pruebas adecuadas y desarrollar una estrategia de integración y despliegue continuos.

Si te has mantenido al día con mis tutoriales, recordarás que escribí sobre la creación de un pipeline de despliegue continuo con Node.js y Jenkins. Esta vez vamos a cambiar las cosas con la tecnología de desarrollo y el servicio CI / CD.

Vamos a ver cómo desplegar de forma continua una aplicación Golang que interactúa con Couchbase con el popular Travis CI servicio.

El objetivo de este tutorial es ayudarte a crear una aplicación Golang que se comunique con Couchbase. Esta aplicación tendrá pruebas unitarias apropiadas que se utilizarán cuando se active Travis CI. Si las pruebas tienen éxito en Travis CI, la aplicación se desplegará automáticamente en algún servidor remoto con SSH.

Como prerrequisito, necesitarás tener al menos una instancia de Couchbase Server disponible. Esta instancia de Couchbase Server se utilizará durante el despliegue.

Desarrollo de una aplicación con Go y Couchbase NoSQL

Vamos a crear un nuevo proyecto Golang para este ejemplo. En algún lugar de tu $GOPATH crear un archivo llamado main.go e incluyen lo siguiente:

El código anterior es simple, pero cambiará significativamente a medida que avancemos en este tutorial. Por ahora, vamos a averiguar lo que hace.

Como estamos usando Couchbase, necesitamos haber obtenido el Go SDK. Esto se puede instalar ejecutando lo siguiente:

Con el Go SDK instalado, podemos añadirlo a las importaciones de nuestro proyecto.

El proyecto tendrá dos funciones muy simples. Habrá una función para recuperar un documento y una función para crear un documento. Cada documento tendrá la función Persona tal como se define en el struct.

Cuando la aplicación se inicie, se conectará a un cluster de Couchbase según lo especificado por las variables de entorno. Asimismo, se autenticará una cuenta RBAC y se abrirá un bucket.

Una vez que la base de datos está lista, primero obtenemos un documento basado en un id:

Suponiendo que el documento exista, será devuelto. Una vez recuperado el documento, insertamos un nuevo documento en la base de datos.

Ahora te estarás preguntando por qué estamos creando funciones para esto. Quiero decir que no estamos haciendo nada especial más allá de utilizar el SDK real.

Usa tu imaginación con estas funciones. Asume que son algo complejas porque escribiremos casos de prueba para ellas. En este ejemplo son simples para que sean fáciles de entender.

Diseño de pruebas unitarias con datos simulados

Tenemos una base para nuestro proyecto, así que podemos empezar a pensar en escribir casos de prueba para nuestra aplicación. Antes de empezar a escribir pruebas, vamos a hacer algunos cambios en el archivo main.go que acabamos de crear.

Abra el main.go e incluya lo siguiente:

Observa que hay algunos ligeros cambios en el código anterior.

Cuando escribimos pruebas para funciones que interactúan con nuestra base de datos, probablemente no es una buena idea probar contra nuestra base de datos real. En su lugar vamos a querer utilizar datos simulados. Sin embargo, vamos a querer escribir pruebas sin saltar a través de demasiados aros.

Para realizar pruebas fácilmente, podemos crear una interfaz que represente nuestro bucket de Couchbase. En nuestro código principal, usaremos un bucket real y en nuestro código de prueba usaremos un bucket falso.

En nuestro ejemplo, la interfaz para nuestro cubo sólo incluye dos de las muchas funciones posibles del SDK. Esta interfaz coincide con lo que veríamos en el SDK real.

Las dos funciones que habíamos creado ahora forman parte del módulo Base de datos clase.

Crear un main_test.go en tu proyecto y asegúrate de que contiene el siguiente código:

El código anterior es realmente donde la magia entra en nuestro proyecto. Utiliza una mezcla de código del archivo principal y código de prueba personalizado.

Tomemos como ejemplo lo siguiente:

Al realizar las pruebas, no vamos a trabajar con un bucket Couchbase real, por lo que tenemos que crear nuestro propio bucket ficticio struct. Utilizaremos el Base de datos del archivo principal y utiliza la estructura de datos BucketInterface.

Cuando comiencen las pruebas, podremos crear nuestro cubo ficticio:

Ahora, como nuestro cubo simulado no tiene funciones como el cubo real, tenemos que crear las funciones definidas en nuestra interfaz. En otras palabras, tenemos que crear un Inserte y un Visite función.

Empezando por el Inserte función:

Nuestra prueba va a ser sencilla. Vamos a intentar insertar cualquier documento excepto uno con una clave de nraboy. La prueba tendrá éxito o fracasará en función de la clave.

En Visite funciona de forma similar.

Al intentar obtener un documento, esperamos una clave de nraboy. Si se ha proporcionado la clave correcta, devuelve algunos datos marshalled por nuestro convertir de lo contrario devolverá un error.

De nuevo, estas son versiones simuladas de lo que encontraríamos en el SDK de Go para operaciones de cubo. Con las funciones de interfaz creadas, podemos escribir nuestras dos funciones de prueba.

En TestGetPersonDocument utilizará nuestro base de datos de pruebas que utiliza el cubo simulado. Sin embargo, utiliza la variable GetPersonDocument del main.go archivo. Recuerde, nuestra función padre podría ser mucho más compleja, pero el tema de la base de datos es ahora un simulacro.

El resultado de nuestra función se decodificará en el archivo Persona utilizando la estructura de datos mapaestructura paquete. Puede obtener más información sobre el uso del paquete mapstructure en aquí.

En TestCreatePersonDocument sigue la misma estrategia. Estamos utilizando el cubo falso, pero el muy real CrearDocumentoPersona función. En Inserte utilizará lo que habíamos creado en nuestra prueba.

No hay mucho para probar una aplicación Golang que incluya interacción con la base de datos. Tu mejor opción es crear una interfaz y utilizar tus propias versiones simuladas personalizadas de las funciones y los datos.

Creación de una configuración YAML para Travis CI

Así que tenemos nuestra aplicación Go con algunas pruebas unitarias. Ahora tenemos que ser capaces de utilizar Travis CI para probar automáticamente nuestra aplicación y desplegarla si tiene éxito.

Travis CI funciona a partir de un archivo de configuración YAML. Tomemos como ejemplo la siguiente configuración:

La configuración anterior indica que estamos utilizando Go 1.8. Antes de empezar a ejecutar scripts, necesitamos descargar un paquete necesario. Necesitamos sshpass que nos permite SSH con contraseñas en texto plano. Al final probablemente querrás usar claves, pero para este ejemplo está bien.

En sshpass se ha descargado, tenemos que ejecutar nuestras pruebas. Esto se hace en el guiones sección. Después de que el primer script termine, podemos construir nuestro proyecto.

Asumiendo que ambos scripts se han completado con éxito, queremos centrarnos en el despliegue.

Se ejecutan dos comandos diferentes para el despliegue. El primer comando copiará el binario a un servidor remoto y el segundo comando ejecutará ese archivo en el servidor remoto.

Ambos comandos de despliegue hacen referencia a variables de entorno en el proceso CI / CD que posteriormente se pasan al servidor.

Ahora, notarás que no hemos establecido ninguna variable de entorno. Estas variables son sensibles y no deberían ser texto plano dentro de nuestro repositorio Git. En su lugar podemos utilizar secretos con Travis CI.

Descargar el travis CLI siguiendo la documentación de Travis CI. Con la herramienta instalada, ejecute lo siguiente:

En lugar de añadir toda su información como texto plano en el archivo YAML, se cifra y puede ser entendido por Travis CI. La configuración YAML que añada tendrá este aspecto:

Esto es algo que puedes guardar en tu repositorio Git y sentirte seguro. Un enfoque aún más seguro sería utilizar claves públicas y privadas para SSH, pero esto está bien para este ejemplo.

Cuando empujes tu proyecto, asumiendo que lo has vinculado en tu cuenta de Travis CI, la aplicación se probará y desplegará automáticamente.

La importancia de NoSQL en la implantación continua

Hemos visto cómo crear pruebas que utilizan datos simulados como base de datos. Sin embargo, lo que es realmente conveniente es que no necesitamos crear scripts de actualización cuando nuestros datos cambian. En una base de datos relacional tendrías que crear scripts de alteración para tu tabla. Con Couchbase, si tu modelo de datos necesita cambiar, simplemente cambia a struct para Persona en el código.

Conclusión

Acaba de ver cómo utilizar Travis CI para desplegar continuamente su proyecto Golang que utiliza un archivo Couchbase Base de datos NoSQL. Durante la fase de integración continua, la aplicación se prueba utilizando datos simulados. Cuando se superan las pruebas y se construye el proyecto, se envía a un servidor remoto y se ejecuta.

El ejemplo utilizado en este tutorial se encuentra en GitHub. Tenga en cuenta que el servidor remoto al que se envía el proyecto ha sido eliminado.

Si está interesado en saber más sobre Go con Couchbase, consulte la página Portal para desarrolladores de Couchbase.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.