what travis sonarcloud sonar scanner run java maven github sonarqube travis-ci

java - sonarcloud - travis github



¿Cómo hago para que Sonarcloud se ejecute en solicitudes de extracción de horquillas con Travis, Maven y github? (2)

Mientras investigaba mi reciente pregunta sobre la falla de Sonarcloud con Travis, Maven y Github, me di cuenta de que estaba haciendo la pregunta incorrecta. Estaba tratando de abordar un síntoma más que el problema subyacente.

Un proyecto en el que trabajo ( eclipse / escaneo ) usa Github como repositorio y Travis con Sonarcloud para integración continua y análisis de código.

Mientras que el análisis de Sonarcloud funciona bien con las solicitudes de extracción internas (solicitudes de extracción de las ramas directamente a eclipse / escaneo) no funciona cuando Travis ejecuta solicitudes de extracción externas (las de repos bifurcaciones).

El problema subyacente es que la forma en que estamos ejecutando sonarcloud en este momento depende de variables de entorno que no están pobladas para solicitudes de extracción externas por razones de seguridad:

Encrypted environment variables have been removed for security reasons. See https://docs.travis-ci.com/user/pull-requests/#Pull-Requests-and-Security-Restrictions

Tenemos nuestro repositorio configurado para que no se preocupe si Sonarcloud se ejecuta, pero eso significa que a menudo nos fusionamos en cambios que rompen las reglas de sonarcloud porque no nos damos cuenta de que se han roto. Solo vemos que esas reglas se han roto la próxima vez que las cambia alguien que las envía directamente al repositorio. Esto mueve la carga de solucionar los problemas descubiertos por Sonarcloud de los colaboradores a los committers.

Asi que,

  • ¿Hay alguna forma de habilitar el análisis Sonarcloud de las solicitudes de extracción de repositorios bifurcados sin introducir problemas de seguridad?

Tenga en cuenta que esta pregunta parece estar un paso más allá En el Repositorio público de Travis, cómo agregar una variable segura que también funciona en solicitudes de extracción que aún no tiene una respuesta.


Probablemente esta no sea la solución fácil que está buscando, pero no creo que haya una manera mucho más fácil de acceder a los secretos al generar solicitudes de extracción a menos que Travis agregue soporte para ello de alguna forma. Después de todo, las variables secretas no están disponibles por una buena razón, ya que las solicitudes de extracción pueden contener código arbitrario que se ejecuta durante la compilación. Un atacante podría usar esto para crear una solicitud de extracción que cambie el proceso de compilación para leer las variables de entorno descifrado y enviárselas.

El problema subyacente es que el código que ejecuta la construcción y el código que se construye provienen de la misma fuente (a veces no son de confianza). Para poder usar secretos en el proceso de compilación, el código que se crea y el código que se genera deben separarse y el código de compilación debe provenir de una fuente confiable. No se debe ejecutar ningún código de la fuente que no es de confianza a menos que sea un espacio aislado para que no pueda acceder a ninguno de los secretos.

Que yo sepa, Travis no proporciona un método estándar para lograr esto.

Siguiendo la idea de separar el código de compilación y el código que se está compilando, debería ser posible, no obstante, ejecutar un análisis de Sonarqube frente a las solicitudes de extracción externas.

El primer paso sería crear un nuevo repositorio "código de compilación" en Github que contenga solo los scripts de compilación de confianza. Estos scripts son responsables de verificar la solicitud de extracción y realizar el análisis de Sonarqube. Como estos no son parte de la solicitud de extracción externa, pueden acceder a variables secretas. Sin embargo, tenga cuidado de no ejecutar las pruebas unitarias en la solicitud de extracción ya que no son de confianza.

El segundo paso es activar una compilación del repositorio de "código de compilación" cada vez que se realiza una solicitud de extracción contra el repositorio de código fuente real. Travis proporciona una API para desencadenar construcciones . Sin embargo, esto también requiere un secreto. Por lo tanto, no podemos simplemente activar una compilación del repositorio de "código de compilación" al crear la solicitud de extracción. Sin embargo, lo que podemos hacer es instalar un webhook en el repositorio de código fuente en Github, que llama a un pequeño servicio web cuando se realiza una solicitud de extracción. Este servicio llama a la API de Travis para activar una compilación del repositorio de código de compilación de confianza.

Espero que esto tenga sentido. Por favor, avíseme si algo no está claro.

Todavía no he hecho esto yo mismo. Entonces no puedo proporcionar ningún código. Pero creo que no debería ser demasiado difícil configurar un pequeño servicio web que convierta un webhook de solicitud Github en una solicitud de compilación para Travis.


Como has adivinado perfectamente, a menos que codifiques tus tokens de GitHub y SonarCloud (que obviamente no quieres, para no revelarlos públicamente), actualmente no hay forma de analizar las solicitudes de extracción externas. Esto está documentado en la página oficial Addon de SonarCloud Travis .

Actualmente estamos trabajando activamente en una forma de apoyar adecuadamente este caso de uso, y espero que tengamos algo antes de fin de año.