CircleCI es una herramienta muy sencilla que está bien configurada como supervisora de nuestros proyectos. Pero, ¿es sencilla la configuración en sí? Esto, por supuesto, depende de la complejidad del proyecto. En nuestro caso (mono repo) resultó ser más difícil de lo esperado.
La configuración para los proyectos Ruby on Rails no es complicada, y el documentación describe con precisión cada elemento del config.yml. Sin embargo, me gustaría centrarme en las herramientas circleci que se utilizan para ayudarnos a mantener el código limpiar y garantizar las buenas prácticas.
Es probable que RuboCope no necesite presentación, sin embargo, para aquellos que no estén familiarizados con él, se trata de un analizador y formateador estático de código Ruby. Si ya utilizas rubocop en tu proyectoBasta con añadir CircleCI al archivo de configuración:
ESLint es una herramienta para identificar y notificar patrones encontrados en los archivos ECMAScript o JavaScript para que el código sea más coherente y evitar errores.
En RSpec, las pruebas no son sólo scripts que verifican el código de la aplicación, también son explicaciones detalladas de cómo debe comportarse la aplicación, expresadas en un inglés sencillo:
En el caso de RSpec, guardamos el resultado de la prueba en un catálogo creado previamente /tmp/test-results en el archivo rspec.xml, y luego usando el comando tiendapruebaresultados almacenamos un catálogo determinado. Ahora la pestaña Insights nos dará acceso a información como el tiempo medio de compilación, el tiempo de la última compilación o la tasa de éxito. Puedes leer más sobre la pestaña Insights aquí. Si queremos almacenar el archivo rspec.xml como un "artefacto" tenemos que añadir la propiedad almacenar_artifactos en nuestro archivo de configuración.
Brakeman es una herramienta de análisis estático que comprueba las aplicaciones Ruby on Rails en busca de vulnerabilidades de seguridad. Por defecto, Brakeman devuelve un código de salida distinto de cero si se detectan advertencias de seguridad o errores de análisis. Por lo tanto, nos hemos centrado únicamente en los errores críticos y hemos desactivado las advertencias.
Si además queremos almacenar el resultado del escaneo de la misma forma que RSpec, nuestra configuración tendrá este aspecto, y tendremos acceso a nuestro fichero en la pestaña Artifacts.
RubyCritic es una gema que utiliza gemas de análisis estático, como Reek, Flay y Flog, para proporcionar un informe sobre la calidad de tu código. El informe contiene una calificación A / B / C / D / F, cada archivo en nuestro proyecto que queremos tener escaneado y lugares precisos que necesitan mejoras, y la documentación con cada alerta (por ejemplo: TooManyMethods). Esta herramienta actúa como consultor en el proyecto. En base al informe recibido, la decisión final sobre si realmente es necesario corregir nuestro código depende del desarrollador. En nuestra configuración de circleci, se asigna un trabajo independiente que se encarga de preparar el informe y enviar un comentario especial con el resultado en github.
La configuración básica de rubycritic no difiere de las anteriores.
De forma estándar, ejecutamos el bundle con información sobre qué directorio queremos escanear ./app, en qué lugar queremos guardar el resultado -p /tmp/rubycritic (rubycritic crea automáticamente un directorio en el que almacenaremos nuestro informe), en qué formato -f json y la opción -no- browser. También utilizamos la gema círculoci-cobertura_reportero, que tras el escaneo, pone un comentario en github en nuestro pull request con un enlace al informe y una valoración porcentual de los archivos escaneados.
Para que la gema anterior funcione correctamente junto con circleci, debemos añadirla a nuestro proyecto y generar dos claves (una de ellas es circleci, la segunda es github).
Instalación estándar:
Gemfile gem 'circleci-coverage_reporter'
Rakefile require 'circleci/cobertura_reportero/rake_task' if ENV['CIRCLECI']
Sección 'settings' de nuestro proyecto. Después de elegir "Crear Token" cambiar el ámbito de "todos" y rellenar Token etiqueta. Token para API se generará después de hacer clic en
COVERAGE_REPORTER_VCS_TOKEN
Alcance de la clave de repo
Después de generar las claves, debemos añadirlas a nuestras variables de entorno en Ajustes: