Hoy nos toca hablar de SonarQube. Una plataforma de software libre para evaluar código fuente que usa diversas herramientas de análisis estático de código fuente como Checkstyle, PMD o FindBugs. Con ello obtiene métricas que pueden ayudar a mejorar la calidad del código de un programa.
Si tu sistema operativo es Windows, te recomendamos nuestro tutorial de como descargar SonarQube en Windows. En este tutorial vamos a conocer cómo realizar la instalación de SonarQube en Linux utilizando Virtualbox, generando un Ubuntu (64 bits). La versión de este sistema operativo utilizada será la 18.10 cuya iso puedes conseguir en el siguiente enlace. Crearemos nuestro Ubuntu haciendo uso de Virtualbox y nos aseguraremos de que tiene al menos 4GB de RAM para asegurarnos de que SonarQube no nos de problemas de espacio al ser ejecutado.
Como ya hemos comentado antes, es imprescindible tener espacio suficiente, por lo que debes asegurarte de tener como mínimo 4GB de RAM. Esto lo puedes comprobar en la configuración de tu máquina virtual. Concretamente en la sección de Sistema, debes asegurarte de que se cumple el valor en el valor de Memoria Base:
Para poder modificar este valor, debemos tener la máquina virtual parada. En caso de haberla abierto y tener que reconfigurarlo por no haberlo hecho en la creación de la misma, deberás apagar la máquina, cambiar el valor y reiniciarla.
Para asegurarnos de que instalamos las últimas versiones en nuestra máquina, actualizaremos nuestro sistema con el siguiente comando
$ sudo apt-get update && apt-get upgrade
Uno de los requisitos para que SonarQube funcione correctamente, es el de instalar un JDK. En este caso descargaremos la última versión ejecutando:
$ sudo apt-get install default-jdk
Para este tutorial haremos uso de MySQL, aunque podrías utilizar PostgresSQL, Oracle, etc. Para ello, ejecutaremos:
$ sudo apt install mysql-server
Una vez se haya instalado correctamente, deberemos ejecutar el archivo de instalación segura:
$ sudo mysql_secure_installation
Cuando ejecutemos esto, se nos mostrará una serie de opciones de configuración. La primera de las preguntas será acerca de si se quiere utilizar el plugin Validate Password que sirve para controlar que las contraseñas tengan una fortaleza mínima (baja, media y alta).
Para las siguientes preguntas que aparezcan diremos a todo que sí, para aceptar las opciones por defecto (borrar la tabla “test” ya que no la vamos a necesitar, deshabilitar los logins remotos y cargar estas reglas según los cambios que acabamos de definir).
A continuación, entraremos en MySQL con:
$ sudo mysql
para comprobar la tabla de usuarios y contraseñas:
mysql> SELECT user, authentication_string, plugin, host FROM mysql.user;
Esto debería mostrar una tabla como la siguiente:
Como se puede apreciar, el usuario root hace uso del plugin auth_socket para autenticarse. Para configurar que el usuario root se autentique con una contraseña, ejecutaremos el siguiente comando, sustituyendo “tuContraseña” por la contraseña que escojas:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'tuContraseña';
Seguido deberemos recargar las tablas con el siguiente comando:
Para asegurarnos de que todo ha ido correctamente, podremos ejecutar el mismo comando anterior y ver que la tabla ahora ya está lista:
Para salir, simplemente deberemos ejecutar el comando exit:
Nuestro siguiente paso será el de crear un usuario, que usaremos más adelante, al que llamaremos SonarQubeen MySQL. Dado que ahora el usuario root se autentica con la contraseña que hayamos definido, deberemos iniciar mysql con el usuario root y meter la contraseña:
$ mysql -u root -p
Una vez estemos dentro de MySQL, crearemos una tabla llamada sonar a través de CREATE y justo después indicaremos que queremos hacer uso de esa tabla con USE:
mysql> CREATE DATABASE sonar;
mysql> USE sonar;
Cuando tengamos esto, crearemos el usuario de la siguiente manera (cambiandoSonarContraseña por la contraseña que desees, siempre y cuando cumpla con los requisitos que hayas configurado - baja, media o alta):
mysql> CREATE USER 'sonarqube'@'localhost' IDENTIFIED BY 'SonarContraseña';
Cuando se haya creado con éxito, le daremos a este usuario todos los privilegios necesarios con:
mysql> GRANT ALL PRIVILEGES ON sonar.* to 'sonarqube'@'localhost';
Para salir, simplemente deberemos ejecutar el comando exit:
mysql> exit
Una vez configurada nuestra máquina virtual, accederemos a ella y nos descargaremos el zip que nos ofrece SonarQube. Para este tutorial se utilizará la última versión estable disponible: 7.4.
Cuando lo hayamos descargado, nos aseguramos de descomprimirlo. Dentro de esta carpeta encontraremos tres carpetas clave para este tutorial: bin, conf y logs:
En esta carpeta encontraremos los distintos ejecutables para los diferentes SSOO (Windows, Linux, Mac).
Para este tutorial haremos uso del archivo sonar.h que se encuentra en la carpeta linux-x86-64.
En esta carpeta dispondremos del archivo principal de configuración de SonarQube. Este archivo se llama: sonar.properties que más adelante tendremos que modificar algunas de sus líneas para hacerlo funcionar correctamente:
En esta carpeta encontraremos los diferentes archivos de Log que se generan al lanzar SonarQube. Por ello, debe tener en cuenta esta carpeta y si a lo largo del tutorial tuvieras algún fallo, acude aquí y analiza los diferentes archivos de log que se hayan creado.
Luego comentaremos los distintos errores que pudiéramos tener y en qué logs se presentarían.
Desde las últimas versiones de SonarQube, éste no se puede ejecutar como root, por lo que debemos crear un usuario que será el que utilicemos para ejecutar el script de SonarQube.
Crearemos un usuario llamado sonar al que tendremos que dar todos los permisos necesarios para leer y modificar archivos en nuestra carpeta de SonarQube. Deberás cambiar donde pone ruta_a_sonarqube por la ruta donde tengas alojado el contenido de la carpeta descomprimida de SonarQube.
Por ejemplo:/home/usuario/Escritorio/sonarqube-7.4)
$ sudo groupadd gsonar
$ useradd -c "Usuario Sonar" -d ruta_a_sonarqube -g gsonar -s /bin/bash usonar
Cambiamos la propiedad de la carpeta (recursivamente con -R, es decir, que se aplique a todos los archivos que hay en sun interior) de SonarQube:
$ chown -R usonar:gsonar ruta_a_sonarqube
Cuando tengamos esto, ya podremos dar paso a la configuración de SonarQube.
En este punto, vamos a modificar el archivo sonar.properties que encontramos en la carpeta conf. Podremos modificarlo a través de un editor de texto o a través de la herramienta vim. Si quieres hacer uso de ella deberás instalarla:
$ sudo apt install vim
Para modificar un archivo con vim simplemente tendremos que navegar a través de la consola a la carpeta conf y ejecutar el comando:
$ sudo vim sonar.properties
Tanto si lo modificas con vim o un editor de texto de tu elección, deberás realizar una serie de cambios en este fichero:
En este campo debes colocar el nombre el usuario que hayas definido en MySQL. En el caso de este tutorial, el usuario se llama SonarQube<, por lo que debes descomentar (quitar el símbolo #) la línea 16 donde está la propiedad sonar.jdbc.username y darle dicho valor:
sonar.jdbc.username=sonarqube
En este campo debes colocar la contraseña que hayas definido en MySQL. En el caso de este tutorial, el usuario era la que pusiste en vez de SonarContraseña al crear el usuario de SonarQube, por lo que debes descomentar (quitar el símbolo #) la línea 17 donde está la propiedad sonar.jdbc.password y darle dicho valor:
sonar.jdbc.password=SonarContraseña
Podríamos descomentar la configuración de la url donde se despliega MySQL que se encuentra en la línea 28 donde se encuentra la propiedad sonar.jdbc.url si tuviéramos que redefinir un puerto concreto.
De la misma manera que podríamos descomentar la IP por defecto donde se lanzará SonarQube (localhost) en la línea 108, donde encontrarás la propiedad: sonar.web.host.
El puerto por defecto donde se despliega SonarQube será el 9000, pero podríamos modificarlo si descomentamos y modificamos la línea 114 del fichero de propiedades donde se encuentra la propiedad sonar.web.port. Aquí también podremos modificar el contexto a través de la propiedad sonar.web.context que deberá comenzar con /. En este tutorial se propone utilizar /sonarqube:
Este archivo se encuentra en la carpeta bin>linux-x86-64 como vimos al comienzo del tutorial. En este archivo es donde realizaremos la configuración acerca del usuario que va a ejecutar SonarQube.
Como hemos comentado más arriba, SonarQube ya no permite ser ejecutado como root (es decir, ya no podemos emplear sudo para ejecutarlo), de manera que utilizaremos el usuario del sistema que creamos en el paso anterior: sonar.
Deberemos abrir este archivo y acudir a la línea 48 y modificar la propiedad RUN_AS_USER para darle el valor de sonar:
Una vez hayamos configurado tanto el archivo sonar.properties como el archivo sonar.h, estaremos casi listos para ejecutar SonarQube, pero antes, vamos a crear un servicio en init.d de nuestro Ubuntu para poder ejecutarlo desde ahí.
Para hacer esto, crearemos una copia del archivo de sonar.sh. Deberemos desplazarnos a nuestra carpeta de SonarQube donde se encuentra la carpeta bin y realizaremos el comando de la siguiente manera:
$ sudo cp bin/linux-x86-64/sonar.sh /etc/init.d/sonar
Ahora nos encargaremos de modificar este archivo, donde deberemos modificar algunos puntos. Para ello haremos uso de vim:
$ sudo vim /etc/init.d/sonar
Esta es la propiedad que define la ruta que accede al wrapper de SonarQube. Se encuentra de dentro de la carpeta bin/linux-x86-64 por lo que modificaremos este valor ya sea hardcodeado (poniendo la ruta completa) o haciendo uso de alguna variable que defina la ruta parcial (por ejemplo SONAR_HOME para la ruta raíz de sonar y plataforma de sonar que se quiere implementar con PLATFORMA)para después sustituirlo con ${SONAR_HOME} y ${PLATFORMA} en la propiedad WRAPPER_CMD que encontrarás en la línea 26 del archivo.
WRAPPER_CMD="${SONAR_HOME}/bin/${PLATFORMA}/wrapper"
En la línea 17 encontrarás la propiedad WRAPPER_CONF que define la ruta donde se encuentra el archivo de configuración del wrapper (se encuentra en la carpeta conf). De la misma manera que antes, editaremos esta propiedad con la ruta adecuada:
WRAPPER_CONF="${SONAR_HOME}/conf/${PLATFORMA}/wrapper.conf"
Nota: Si al iniciar SonarQube salta algún error acerca de estas rutas, simplemente acude a este archivo y asegúrate de que estén bien descritas.
En este punto debemos crear una carpeta bajo la ruta /var/run, a la que llamaremos, por ejemplo, sonardaemon. Realizamos esto, dado que /var/run únicamente la puede ejecutar el usuario root del sistema. Por ello, debemos definir el archivo pid donde se almacenará el id del programa en ejecución (SonarQube).
Para ello ejecutaremos el comando mkdir y también chown para darle todos los permisos a nuestro usuario sonar:
$ sudo mkdir /var/run/sonardaemon$ sudo chown usonar:gsonar /var/run/sonardaemon
Debemos modificar también la propiedad PPDIRy darle el valor /var/run/sonardaemon
Nota: Asegúrate de que la propiedad RUN_AS_USER sigue siendo usonar.
Nota 2: Para cerrar vim y guardar los cambios, simplemente pulsa ESC y seguido teclea 😡 para finalizar pulsando ENTER. Esto cerrará el archivo y guardará aquellas modificaciones que hayas realizado.
Para acabar eliminaremos los startup links que haya en /etc/init.d/sonar y le daremos todos los permisos (755 = permiso rwx). Finalmente, haremos una actualización para que se persistan todos los cambios:
$ sudo update-rc.d -f sonar remove$ sudo chmod 755 /etc/init.d/sonar$ sudo update-rc.d sonar defaults
[/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]
Llegamos al final de tutorial que consiste en ejecutar el servicio que inicia sonar y comprobar que en efecto se realizar correctamente. Con todo configurado como hemos comentado, deberías ser capaz de ejecutar el servicio de la siguiente manera:
$ sudo /etc/init.d/sonar start
El sistema te pedirá una contraseña, que no es otra que la que le hayas dado al usuario de sistema “sonar” y que has definido como RUN_AS_USER en el servicio.
Nota: La inicialización puede tardar un poco. A pesar de que salga el mensaje Started SonarQube puede que aún no haya acabado de desplegarlo. Puedes acudir a los logs generados en la carpeta de logs y ver si se están actualizando para saber que aún no ha acabado el proceso. Los más interesantes serían: sonar.log, es.log y web.log (En este orden).
Podemos asegurarnos del estado de SonarQube para saber si todo ha ido bien con el comando:
$ sudo /etc/init.d/sonar status
Una vez llegado a este punto, SonarQube estará listo para comprobarlo e interactuar con él a través del navegador.
Simplemente abre una pestaña nueva y escribe la dirección http:// localhost:9000/sonarqube (Siempre y cuando hayas definido el sonar.web.context como sonarqube. Si has definido otro, indícalo o si no has definido ninguno, simplemente accede al puerto 9000 de localhost)
Podrías registrarte con el usuario que se crea por defecto (usuario = admin y contraseña = admin) desde el botón de login:
Al acceder, podrás ver el dashboard inicial de SonarQube:
Para detener SonarQube, simplemente debes hacer uso del comando stop:
$ sudo /etc/init.d/sonar stop
Con la configuración que hemos definido en este tutorial no debería haber problemas a la hora de inicializar SonarQube, pero si por alguna razón hubiera algún problema, aquí listamos un par de errores comunes:
Este error puede darse porque estés intentando iniciar sonar con permisos de root (es decir, estás implementando sudo en la sentencia).
Solución: Asegúrate de que has implementado correctamente el RUN_AS_USER y que éste tiene todos los permisos necesarios sobre la carpeta de sonar.
Este error puede darse porque no hayas configurado correctamente la máquina virtual.
Solución: Apaga la máquina virtual y desde Virtualbox accede a la configuración de su sistema y amplía su Memoria Base.
No pierdas la oportunidad de mejorar tus habilidades de programación y aprende a utilizar SonarQube de manera efectiva con nuestro curso especializado. ¡Contáctanos para obtener más información!