Jenkins Plugins

Jenkins Plugins
Los plugins de Jenkins que se deben instalar son:


 * SonarQube Plugin (version 2.4.4) (*)
 * Quality Gates (version 2.5)
 * Find Bugs (version 4.69)

Antes de usar los plugins, se debe configurar lo necesario en el Global Tool Configuration (maven, jdk, sonar server, etc).

(*) Estas versiones son compatibles con Jenkins 2.32.1 y SonarQube 4.5.7. Estas versiones fueron instaladas en Centos 6 con Java 7. OBS.: La versiones pueden variar dependiendo de la versión de Jenkins que se utilice. Lo importante es tener las versiones compatibles entre el Jenkins y el SonarQube a ser utilizado.

OWASP Dependency Check
Es una utilidad que identifica las dependencias del proyecto y comprueba si hay vulnerabilidades conocidas. Actualmente soporta Java y .NET

El plugin en Jenkins, analiza las dependencias y genera reportes para el OWASP.


 * 1) Base de datos de evidencias de problemas https://cve.mitre.org
 * 2) Sitio del proyecto open source: https://www.owasp.org/index.php/OWASP_Dependency_Check
 * 3) Dependency Check en Github: https://github.com/jeremylong/DependencyCheck

En las configuraciones globales de Jenkins, se debe configurar el directorio, dentro del servidor del Jenkins, en que se guardarán los resultados de los analisis realizados.



Luego, para terminar su configuración se debe correr un job creado para actualizar el owasp (por ejemplo, un job "owasp-update" que no tendrá otra función mas que actualizar la configuración del plugin), en el que se debe agregar el Build-step Invoke OWASP Dependency-Check NVD Update Only. Guardar el job y ejecutarlo una única vez.



Configurar OWASP en el job
Se deberá agregar en Post-Build Step el Invoke OWASP Dependency-Check analysis, que deberá quedar de la siguiente manera:



Luego, se debe agregar en Post-Build Action el Publish OWASP Dependency-Check Analysis results. Aqui se deben ajustar los parámetros a su necesidad. En este caso, los dejamos como están.



Una vez que el job fue ejecutado, se puede ver el reporte del OWASP, entrando en el número de Build y luego en Dependency-Check Warnings.



Cómo leer el reporte de dependency check: https://jeremylong.github.io/DependencyCheck/general/thereport.html

Integrar el OWASP al SonarQube
https://joko.miraheze.org/wiki/OWASP_Dependency_Check

Correr job con SonarQube Scanner
Antes que nada, se debe correr el job una vez antes de configurar los Pre-build y Post-build Actions. Esto es imprescindible, ya que deben existir los archivos binarios para que los jobs del SonarQube puedan ser ejecutados.

Una vez hecho esto, agregar en el job el SonarQube Scanner en un Pre-Build Action, donde se deben agregar los properties correspondientes:

sonar.projectKey=ejemplo-maven-project-security-check sonar.projectName=ejemplo-maven-project-security-check sonar.projectVersion=1 sonar.sources=src/main/java sonar.java.binaries=target/classes sonar.java.libraries=target/*.jar



Si el proyecto tiene una jerarquía compleja maven, en los properties deberán quedar separados, entre comas, los sources (/java) y las clases (/classes) de cada proyecto.

Por ejemplo, en el repositorio https://github.com/demoiselle/framework, se tienen varios proyectos dentro de un mismo repositorio, por lo tanto el properties quedará de la siguiente manera:

sonar.projectKey=maven-rpoject-parent-type-pom sonar.projectName=maven-rpoject-parent-type-pom sonar.projectVersion=1.001 sonar.sources=./demoiselle-rest/src/test/java,./demoiselle-rest/src/main/java,./demoiselle-core/src/test/java,./demoiselle-core/src/main/java,./demoiselle-security/src/test/java,./demoiselle-security/src/main/java,./demoiselle-configuration/src/test/java,./demoiselle-configuration/src/main/java,./demoiselle-script/src/test/java,./demoiselle-script/src/main/java,./demoiselle-security-token/src/test/java,./demoiselle-security-token/src/main/java,./demoiselle-security-jwt/src/test/java,./demoiselle-security-jwt/src/main/java,./demoiselle-crud/src/main/java sonar.java.binaries=./demoiselle-rest/target/classes,./demoiselle-core/target/classes,./demoiselle-security/target/classes,./demoiselle-configuration/target/classes,./demoiselle-script/target/classes,./demoiselle-security-token/target/classes,./demoiselle-security-jwt/target/classes,./demoiselle-crud/target/classes

Entonces, el job quedará asi:





=Configuraciones SonarQube= Todas las configuraciones del SonarQube deben ser realizadas bajo una sesión del usuario administrador.

El SonarQube debe tener instalado el plugin de FindBugs, el cual agrega el Quality Profile para adutoría de seguridad. Utilizaremos el "FindBugs Security Audit".



Configuración del Quality Profile
Al ingresar a la opción de Quality Profile, se debe seleccionar la opción de "Projects", y ahí agregar todos los proyectos que serán auditados.

Agregar Quality Gates
Correr el job una vez mas e ir al SonarQube, en el Quality Gates que corresponda, agregar el proyecto de Jenkins que corresponda.

Luego de esto, agregar los Quality Gates en un Post-Build Action en el Jenkins. Aquí se debe agregar el mismo ProjectKey que se tiene en las propiedades del SonarQube Scanner.



Definición del Quality Gate
Asi queda el Quality Gate definido, para que el job falle al correrlo si encuentro uno o mas issues o blocker issues. Esto es un ejemplo didáctico, intencionalmente hecho muy estricto para que se pueda apreciar la funcionalidad del Quality Gate, con su integración al Jenkins.



Una vez hecho esto, se podrá ejecutar el job, y se podrá ver si hubo errores y cuáles fueron tanto en el SonarQube como en el Jenkins.

Observación
Se debe configurar el Quality Gate entre las herramientas, ya que NO se guarda el Quality Gate en el Job, mientras salga el Warning en el Post-Build Action de que usará datos default y que hace falta configurar una instancia de sonar.

Resultados
En Jenkins:



En SonarQube: