SonarQube e IntelliJ IDEA: integración correcta


SonarQube es una herramienta excelente para introducir el análisis de código estático en el proceso de desarrollo de software. Es compatible tanto con Java utilizado en nuestra empresa como con una gran cantidad de otros lenguajes de programación.


Por el momento, esta herramienta ha entrado firmemente en nuestras vidas, siguiendo un único estilo de código y protegiendo contra una variedad de tipos de errores. Se encuentran errores al construir en CI o antes de aceptar una solicitud de extracción en el almacenamiento versionado. Todos los errores encontrados se muestran en la interfaz web, donde puede estudiarlos y administrarlos.


Sin embargo, el problema es que una interfaz basada en web conveniente no significa la conveniencia de eliminar los comentarios encontrados en el código del proyecto. Para hacer una corrección, primero debe mirar en qué archivo se encuentra este comentario, luego abrir este archivo y solo luego hacer una corrección. Esto también lleva al hecho de que el desarrollador aprende sobre un problema con un retraso muy grande (a veces el análisis en SonarQube puede tomar decenas de minutos), lo que no contribuye a mantener la pureza del código.


Para facilitarles la vida a los desarrolladores de nuestra empresa que usan IntelliJ IDEA, compilé las instrucciones. Y luego me di cuenta de que podría ser útil para un círculo más amplio de especialistas, y decidí ponerlo a disposición del público.


Unas palabras sobre mi empresa

Como mi artículo es el primero en el blog corporativo de NPO Krista, escribiré algunas palabras sobre mi empresa.


El campo de nuestra actividad es la tecnología de la información para el gobierno estatal y municipal. Nos preocupa la efectividad de las reformas gubernamentales, la efectividad del gobierno, la calidad de los servicios públicos, la transparencia de la información financiera, la apertura de los datos presupuestarios para la población, etc.


La historia de la empresa comenzó en Rybinsk. Los turistas a veces visitan nuestra ciudad, viajando en barco por el Volga. Búscalo en el mapa cerca del embalse de Rybinsk. La geografía moderna de nuestros centros de producción, sucursales y oficinas de representación es mucho más amplia, pero el centro principal de NPO "Krista" todavía se encuentra en Rybinsk.


Primero, veamos qué inspecciones generalmente admite SonarQube. En primer lugar, estas son nuestras propias inspecciones, que vienen en la entrega predeterminada. Pero, además de esto, también hay complementos para integrar varios analizadores de terceros:



Cada inspección individual puede configurarse individualmente, así como combinarse en perfiles, lo que le permite tener un único conjunto de inspecciones para toda la empresa. Entonces, en nuestro perfil principal, se activan más de 1200 inspecciones diferentes. Está claro que nadie puede mantener tantas reglas en su cabeza, lo que significa que después de cada etapa de escribir código, sigue la etapa de edición de comentarios de SonarQube. Y cuanto más corta es esta etapa, menos doloroso es para el desarrollador. Entonces, ¿cómo se puede simplificar?


Para resolver este problema, varios IDE tienen complementos que le permiten extraer información del servidor SonarQube y mostrarla directamente en el editor de código. En el caso de IntelliJ IDEA, esto es, en primer lugar, SonarLint , el complemento oficial de los desarrolladores de SonarQube. Solo toma un perfil del servidor con la configuración de las inspecciones activas, y el análisis en sí hace una incursión directamente en el IDE. Esto mejora significativamente la calidad del desarrollo, permitiéndole ver de inmediato todos los comentarios nuevos y corregirlos rápidamente. Pero hay una mosca en la pomada. SonarLint funciona exclusivamente con las propias inspecciones de SonarQube, ignorando completamente todas las demás inspecciones. No verá comentarios de FindBugs, ni de CheckStyle o PMD. Pero puede contener mucha información valiosa.


Pero no se desespere: el servidor SonarQube puede exportar configuraciones para todos los analizadores, lo que significa que es posible configurar complementos IDEA estándar para que produzcan un resultado equivalente al servidor.


Tratemos estas configuraciones en orden.


Configurar SonarLint


No hay trucos aquí. Entramos en la configuración de IDEA y en la sección Plugins encontramos el complemento SonarLint y lo instalamos.



Inicialmente, el complemento utiliza la configuración de inspección predeterminada. Ahora puede ir a la ventana del complemento y configurar la conexión al servidor SonarQube. Dado que es mejor ver una vez que leer cien veces, solo daré una serie de capturas de pantalla de la secuencia de configuración. De aquí en adelante, los lugares que requieren atención se marcarán en rojo. Estos son campos para completar, o botones en los que desea hacer clic, o indicadores que desea traer a la vista especificada:








Lo principal es no olvidar hacer clic en Update binding después de agregar un nuevo servidor para que el complemento cargue el perfil con la configuración. Este botón deberá presionarse cada vez que el perfil cambie en el servidor (inspecciones agregadas / eliminadas, cambios en su configuración).


Si ha conectado varios módulos en un proyecto IDEA, entonces en la configuración tendrá que cambiar a un módulo específico cada vez que necesite analizarlo para obtener comentarios. Esto no es muy conveniente, pero lo es.


La lista de comentarios se actualizará automáticamente en segundo plano cada vez que se abra un nuevo archivo o se realicen cambios en este archivo. Si este comportamiento no es deseable, puede deshabilitarlo allí, en la configuración del complemento.


Un ejemplo de cómo funciona el aspecto de SonarLint se puede ver a continuación (se puede hacer clic en la imagen):



Si algo salió mal

Hay situaciones en las que SonarLint por alguna razón se niega a funcionar. En este caso, en la ventana de SonarLint, puede ir a la pestaña de registro y ver qué sucedió. Pero, desafortunadamente, la información en este registro no siempre es clara y suficiente.


Por ejemplo, después de la última versión de IntelliJ IDEA (2019.2), dejé de trabajar con este error:



Es muy informativo ... Y no pude descubrir cómo obtener más información por mi cuenta.


La situación fue guardada por las preguntas frecuentes en el sitio web de SonarQube . Resulta que en la ventana SonarLint en IDEA, puede cambiar el nivel de registro de errores:



Si selecciona los elementos seleccionados, comenzará a aparecer un registro más detallado, desde el cual ya puede comprender lo que está sucediendo:



Si! Ahora apareció el error, y quedó claro lo que estaba sucediendo.


De hecho, hubo una versión desagradable del conflicto. Nuestras aplicaciones aún usan Java 8 y se prueban en SonarQube 7.1. Al mismo tiempo, todo el proceso de producción está vinculado a las capacidades de SonarQube para analizar la diferencia de errores entre la rama de desarrollo principal y la solicitud de extracción.


Pero lo más desagradable es que desde SonarQube 7.2 esta función se ha pagado, por lo que todavía no hemos actualizado a la última versión. Y el soporte para Java 11 se implementó solo en SonarQube 7.3.


Otro punto importante es que el complemento SonarLint, al analizar el código, compila el código fuente con la ayuda del JRE que ejecuta IntelliJ IDEA. Mientras IDEA trabajaba en Java 8, todo estuvo bien con nosotros. Pero cuando cambió a usar Java 11 en la versión 2019.2, todo se vino abajo, porque de hecho hay una compilación en el código de bytes de Java 11 ( archivo de clase versión principal 55 ), y es analizado por la versión del analizador que está instalado en el servidor, t es decir, no es compatible con este formato de bytecode. Y este es un problema conocido .


Aparentemente, debe buscar urgentemente formas de actualizar SonarQube a la última versión. Tal vez utilizando un complemento de terceros sonarqube-community-branch-plugin que ofrece las funciones que necesitamos.


Descargar la configuración del analizador desde SonarQube


Cada uno de los complementos, excepto SonarLint, necesita sus propios archivos de configuración, cada uno en su propio formato. Afortunadamente, SonarQube puede descargar estos archivos. Se encuentran en la ventana de configuración del perfil de análisis.


Para llegar allí, debe ir a la sección Quality Profile en la interfaz web del servidor SonarQube y seleccionar el perfil que se utiliza para analizar el proyecto:



En la página que se abre, aparece una sección que proporciona enlaces para exportar configuraciones para cada uno de los analizadores:



La configuración de FindBugs y PMD debe cargarse en un disco local con la extensión XML , pero la configuración de CheckStyle se puede usar directamente desde la URL del sitio.


Configurar CheckStyle


En IDEA, el complemento se llama CheckStyle-IDEA . Este es quizás el complemento más libre de problemas en términos de uso, ya que le permite cargar configuraciones directamente por URL y no requiere cambiar entre módulos, como SonarLint.


Para conectar la configuración, vaya a la configuración de IDEA y seleccione la sección CheckStyle . A continuación, debe agregar un nuevo elemento a la tabla Configuration File :



E indique la fuente de la configuración:



Además, no olvide marcar la configuración recién agregada como activa en la tabla de la ventana de configuración.


Eso es todo, ahora puede ir a la ventana CheckStyle e iniciar el análisis (el botón superior seleccionado):



Si el perfil del servidor SonarQube ha cambiado, debe actualizar la configuración haciendo clic en el botón correspondiente en la misma ventana (el botón marcado en la parte inferior).


Si algo salió mal

En caso de error "No se pudo analizar el archivo de reglas Checkstyle", es decir, "SuppressionCommentFilter no está permitido como elemento secundario en Checker", debe reducir la versión de Checkstyle en la configuración del complemento que se utiliza en el servidor SonarQube. El cumplimiento de la versión se puede encontrar en la tabla en la descripción del complemento Checkstyle para SonarQube.


Configurar FindBugs


En IDEA, el complemento se llama FindBugs-IDEA . A diferencia de los complementos anteriores revisados, este no puede tomar la configuración directamente del servidor y requiere un archivo local.


Para conectar la configuración, vaya a la configuración de IDEA y seleccione la sección FindBugs-IDEA . A continuación, en la pestaña Filter , agregue un nuevo elemento a la tabla Include filter files :



El complemento está listo para funcionar. En su ventana, puede comenzar el análisis de un solo archivo, así como el proyecto completo o cualquier otro águila pescadora para elegir:



Nota importante 1: en la configuración del complemento hay una pestaña Share , en la que se propone conectar el archivo de configuración SonarQube. No recomiendo usar esta configuración, porque no funcionó correctamente, pero las consecuencias se tratan de manera no trivial. El hecho es que simplemente eliminar esta configuración no funcionó. El complemento no comenzó a funcionar normalmente. Para restaurar el trabajo, tuve que eliminar el .idea/findbugs-idea.xml en el directorio del proyecto y volver a configurar todo de nuevo.


Nota importante 2: Si la configuración del servidor SonarQube ha cambiado, debe cargarla nuevamente en el disco.


Nota importante 3: desafortunadamente, el desarrollo de este complemento se detuvo después de que el desarrollo de FindBugs se transfirió a su bifurcación de SpotBugs. En el rastreador de errores de JetBrains hay un ticket sobre este tema. Entonces, si, junto con nosotros, desea soporte completo para todos los comentarios de SonarQube directamente en casa, en su IDE favorito, puede votar por este boleto. Quizás el carro se mueva.


Configuración de PMD


En IDEA, el complemento se llama PMDPlugin. Similar a FindBugs, este complemento requiere un archivo de configuración en el disco. Para configurar, vaya a la configuración de IDEA y agregue el archivo descargado de SonarQube:



El nombre del archivo juega un papel importante, porque en el futuro será utilizado por el complemento para formar el elemento de menú correspondiente para comenzar el análisis.


También en la contribución contigua, debe especificar la versión de Java que usa el proyecto (bueno, la codificación al mismo tiempo):



Ahora puede comenzar el análisis del archivo actual utilizando el menú contextual:


 Run PMD->Custom Rules-><  > 

Nota importante 1: PMD también se puede iniciar a través del menú principal, pero esto no se recomienda, porque en este caso, no se escaneará ningún archivo, sino que se abrirá todo el proyecto en el IDE. Esto puede llevar mucho tiempo y sobrecargar significativamente el sistema.


Nota importante 2: Al igual que FindBugs, PMD requiere un archivo de configuración en el disco. Por lo tanto, debe actualizarlo cada vez que cambie la configuración del perfil SonarQube.


Conclusión


En resumen, noto lo siguiente. A pesar de que tiene que administrar la configuración de hasta 4 complementos para realizar un seguimiento de los comentarios, aún es mejor que esperar cada vez que aparezcan los resultados de edición en el servidor SonarQube, y le permite confirmar de inmediato un código más limpio.


Espero que la información presentada aquí ayude a alguien a hacerse más fácil con los analizadores estáticos en general y con SonarQube en particular.


También quiero agradecer a mis colegas que me ayudaron a escribir y apoyar la relevancia de este artículo: Dmitry Zimichev, Yuri Krupin y Artyom Ganev.

Source: https://habr.com/ru/post/469963/


All Articles