Configuración de exploraciones de SonarQube
SonarQube ofrece una visión general del estado general y de la calidad del código fuente e identifica los problemas del nuevo código. Los analizadores de código detectan errores complicados, como referencias a punteros nulos, errores de lógica y falta de recursos, para más de 20 lenguajes de codificación.
Configure SonarQube de modo que analice y evalúe continuamente la calidad del código fuente:
-
En la consola IBM Cloud, haga clic en el icono de menú
> Automatización de la plataforma > Cadenas de herramientas. En la página Cadenas de herramientas, pulse la cadena de herramientas para abrir su página Visión general. Como alternativa, en la página Visión general de su app, en la tarjeta de Entrega continua, pulse Ver cadena de herramientas. A continuación, pulse Visión general.
a. Pulse Añadir una herramienta.
b. En la sección Integraciones de herramientas, pulse SonarQube.
-
Escriba un nombre para esta instancia de la integración de herramientas SonarQube.
-
Escriba el URL correspondiente a la instancia de SonarQube que desea abrir cuando pulse la tarjeta de SonarQube en la cadena de herramientas.
-
Opcional: Escriba el nombre de usuario que utiliza para conectarse al servidor SonarQube.
Sólo es necesario especificar un nombre de usuario si se utiliza una contraseña para conectarse al servidor SonarQube. Si utiliza una señal de autenticación para conectar, deje este campo vacío.
-
Escriba la contraseña o la señal de autenticación que utiliza para conectarse al servidor de SonarQube.
-
Si el servidor no puede estar en la Internet pública, seleccione Avanzado. IBM Cloud no puede validar los detalles de conexión que usted proporciona y ciertas funciones que requieren acceso API a este servidor están deshabilitadas. La interconexión de entrega sólo funciona utilizando un trabajador privado que tiene acceso de red a este servidor.
-
Pulse Crear integración.
-
En la página Visión general de la cadena de herramientas, en la tarjeta Herramientas de terceros, pulse SonarQube para ver el panel de control de la instancia de SonarQube a la que se ha conectado.
Adición de Sonarqube a la interconexión de integración continua
Instancia predeterminada de SonarQube
- Si
sonarqube-configse establece endefault, se utiliza SonarQube de forma predeterminada para escanear. Este escaneo se ejecuta como Dockeren-Docker.
La instancia utilizada sólo está disponible durante la ejecución. Por lo tanto, no puede acceder al panel de control.
-
De forma predeterminada, la interconexión utiliza la edición de comunidad SonarQube que sólo tiene comprobaciones de checks.Many y problemas de zona de host no están cubiertos en Community Edition.
-
Para verificar si se ha incorporado una vulnerabilidad en la edición de comunidad, consulte la hebra en la pregunta de comunidad de Sonarqube
-
La implementación predeterminada que es la instancia de SonarQube Community Edition registrada con CISO no es una edición edition.SonarQube Enterprise Edition es la única edición aprobada por ITSS.
Para descargar SonarQube, consulte DescargasSonarQube
Instancia de SonarQube en el clúster de desarrollo
Si sonarqube-config se establece en cluster, el conducto crea una instancia SonarQube durante la ejecución del conducto en el clúster dev. Puede acceder a esta instancia después de que la etapa de exploración estática
se haya runs.You Puede acceder al panel de control SonarQube localmente mediante el reenvío de puertos.
Instancia existente de SonarQube
Establezca sonarqube-config en custom, para añadir su propia instancia SonarQube a su canalización existente, añada la integración de herramientas a su cadena de herramientas y, a continuación, añada el parámetro
de integración de herramientas SonarQube a la canalización. Para obtener más información, consulte Configuración de SonarQube.
Servidor Sonarqube con certificado autofirmado
Si sonarqube-config está configurado en custom para utilizar un servidor sonarqube existente y el servidor tiene un certificado
autofirmado, para que el escáner sonar se conecte correctamente al servidor sonarqube, el certificado autofirmado debe añadirse a los certificados CA de confianza.
Al proporcionar el certificado en formato PEM (ya sea base64 codificado valor secreto o PEM formateado texto sin formato) como el valor de la propiedad pipeline/trigger sonarqube-root-certificate, se añadirá la configuración de
acuerdo con el uso de la SonarScanner para maven, SonarScanner para gradle sonar o SonarScanner invocado con Docker.
Parámetros
Para ejecutar la exploración de SonarQube, la interconexión necesita los siguientes parámetros de integración continua:
| Nombre | Tipo | Descripción | Obligatoria u opcional |
|---|---|---|---|
| cluster-name | Texto | El nombre del clúster de compilación de Docker. | Obligatorio |
| dev-region | Texto | La región de IBM Cloud que aloja el clúster. | Obligatorio |
| opt-in-sonar | Texto | La opción para habilitar la exploración de sonarQube. | Obligatorio |
| sonarqube | Integración de herramientas | La integración de herramientas de Sonarqube. | Opcional |
| sonarqube-config | Texto | Ejecuta una exploración SonarQube en un contenedor aislado de Docker-in-Docker (configuración predeterminada) o en un clúster Kubernetes de desarrollo existente (configuración de clúster). De forma alternativa, puede traer su propia
instancia de SonarQube y configurar la integración de herramientas de SonarQube (configuración personalizada). Opciones: default, cluster o custom. Por defecto es default. Para obtener
más información, consulte (Adición de SonarQube al conducto de integración continua). |
Obligatorio |
| zonas activas de opt-in-sonar | Texto | Exploración de Sonarqube para detectar zonas activas. | Opcional |
| opt-in-sonar-quality-gates | Texto | Permitir que el escáner Sonarqube detecte fallos en la puerta de calidad. | Opcional |
| opt-in-sonar-pr-analysis | Texto | Permitir que Sonarqube scan haga el análisis del pull request (Esta opción sólo funcionará si el PR no es contribuido desde un repositorio forked). Este parámetro sólo es válido para App-preview PR pipeline. |
Opcional |
| sonarqube-user-token | Secreto | Pase el token de usuario utilizado para el acceso a la API en caso de sonarqube-config configurado como custom |
Opcional |
| sonarqube-root-certificate | Texto o Segert | En caso de que sonarqube-config esté configurado como custom, pase el certificado autofirmado como texto con formato PEM o secreto codificado base64 |
Opcional |
Para obtener más información sobre los parámetros de interconexiones, consulte Parámetros de interconexión.
Si añade varias integraciones de herramientas de SonarQube en la interconexión, podrá conmutar entre ellas cambiando el valor del parámetro de interconexión de sonarqube, que es un parámetro de integración de herramientas.
Plug-ins instalados en SonarQube
DevSecOps Pipelines utiliza SonarQube Versión 10.0 por defecto.
Para obtener más información sobre la lista de plugins preinstalados, consulte plugins
Problemas notificados desde SonarQube
DevSecOps Pipelines filtra los problemas notificados durante el análisis SonarQube. Las interconexiones crean exclusivamente incidencias de conformidad para problemas que no son del tipo CODE_SMELL o BUG. La interconexión
también omite los problemas para los que el estado es CLOSED.
Habilitación del análisis de Pull Request en la canalización de App Preview PR
La opción de análisis de PR se proporciona en App Preview PR pipeline si el PR proviene del mismo repositorio que el repositorio de destino (y no de un fork). La instancia Sonarqube también debe apoyar el análisis PR. Las instancias
predeterminadas de sonarqube utilizadas en los modos cluster y dind no admiten esta función, ya que el análisis de solicitudes pull está disponible a partir de sonarqube Developer Edition. La variable de entorno
opt-in-sonar-pr-analysis debe añadirse a la canalización y su valor no debe estar vacío.
Habilitación del procesamiento de resultados Quality Gate para un proyecto SonarQube
Una Quality Gate en SonarQube es un conjunto de condiciones que determinan si un proyecto cumple las normas de calidad exigidas por el código. Para obtener más información sobre las puertas de calidad, consulte SonarQube Documentation.
SonarQube issue parser permite procesar los resultados de SonarQube Quality Gate y crear issues si se produce un fallo debido a ello. Para permitir el procesamiento del resultado de Quality Gates, establezca la propiedad de entorno opt-in-sonar-quality-gates como 1.
Si opt-in-sonar-quality-gates está configurado como 1, y está utilizando su propia instancia SonarQube como integración (con sonarqube-config configurado como custom), para obtener el nombre de la puerta de calidad puede generar un token de usuario SonarQube con el permiso necesario para acceder a la API web SonarQube y configurar la propiedad de
entorno de canalización sonarqube-user-token con el token como valor secreto. Para más información sobre los permisos necesarios para los tokens, consulte SonarQube token permission.
Si utiliza la instancia de SonarQube que creó la canalización o una integración personalizada de la herramienta SonarQube, siga los pasos que se indican a continuación para navegar por el panel de control de SonarQube:
-
Vaya al panel de control de SonarQube creado por el URL de los registros de interconexión en la tarea
static-scan.
'SonarQube cuadros de mandos -
Por defecto, la puerta de calidad
Sonar wayse asocia a cualquier proyecto que no esté explícitamente asociado a una puerta de calidad específica. También pueden crearse nuevas puertas de calidad con condiciones métricas personalizadas.-
Para buscar la lista de Puertas de Calidad en el panel de control, haga clic en Puerta de Calidad en la barra de navegación superior.
SonarQube -
Para crear una nueva puerta de calidad, haga clic en Puerta de calidad en la barra de navegación superior y, a continuación, en Crear. Puede añadir un nombre a la puerta de calidad y añadir/eliminar/actualizar las métricas de condición.
-
Para buscar la puerta de calidad asociada al proyecto, seleccione el proyecto y, a continuación, haga clic en Configuración del proyecto > Puerta de calidad.
SonarQube -
Para asociar una puerta de calidad (distinta de la predeterminada) a un proyecto determinado, seleccione el proyecto y haga clic en Configuración del proyecto > Puerta de calidad > Utilizar siempre una puerta de calidad específica > Seleccione la puerta de calidad deseada en el menú desplegable > Guardar
caption-side=bottom"
-
-
Esta puerta de calidad evalúa las nuevas exploraciones y los resultados de la puerta de calidad crean la prueba. Los problemas se crean en función de las condiciones que provocaron el fallo de la puerta de calidad.
Un ejemplo del formato del resultado del estado de la puerta de calidad que es la respuesta de la API de Sonarqube:
${SONAR_HOST_URL}/api/qualitygates/project_status?projectKey=${SONAR_PROJECT_KEY}:{ "projectStatus": { "status": "ERROR", "conditions": [ { "status": "ERROR", "metricKey": "new_coverage", "comparator": "LT", "errorThreshold": "80", "actualValue": "0.0" }, { "status": "OK", "metricKey": "new_duplicated_lines_density", "comparator": "GT", "errorThreshold": "3", "actualValue": "0.0" }, { "status": "ERROR", "metricKey": "new_security_hotspots_reviewed", "comparator": "LT", "errorThreshold": "100", "actualValue": "0.0" }, { "status": "ERROR", "metricKey": "new_violations", "comparator": "GT", "errorThreshold": "0", "actualValue": "14" } ], "ignoredConditions": false, "period": { "mode": "PREVIOUS_VERSION", "date": "2025-03-18T09:43:25+0000" }, "caycStatus": "compliant", "additional": { "qualityGateName": "Sonar way", "projectKey": "hello-compliance-app-compliance-check", "dashboardUrl": "http://localhost:9001/dashboard?id=hello-compliance-app-compliance-check" } } }Para más información sobre las API SonarQube, consulte la documentación de Sonarqube WebAPI
Se crea una incidencia para cada clave de métrica que tenga el estado ERROR, lo que garantiza que cada métrica que falla se rastrea y aborda individualmente.
Ejemplo de problema:
caption-side=bottom"
Ejemplo SonarQube pruebas fallidas debido a un fallo del Quality Gate:
{ "id": "abc", "evidence_type_id": "com.ibm.static_scan", "evidence_type_version": "1.0.0", "date": "2025-03-18T11:22:35.086Z", "origin": { }, "details": { "result": "failure", "tool": "sonarqube", "failure_reason": "tool_detected_vulnerabilities" }, "issues": [ "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/14", "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/15" ], "findings": [ { "id": "Metric: new_coverage", "due_date": "n/a", "severity": "high", "first_found": "2025-03-18", "url": "https://github.ibm.com/abcd/compliance-issues-repo/issues/14", "found_status": "existing", "has_exempt": false, "cvss": "n/a", "package": [] }, { "id": "Metric: new_security_hotspots_reviewed", "due_date": "n/a", "severity": "high", "first_found": "2025-03-18", "url": "https://github.ibm.com/abcd/compliance-issues-repo/issues/15", "found_status": "existing", "has_exempt": false, "cvss": "n/a", "package": [] } ], "attachments": [ { "hash": "d10a1e5d727b4f778a1d70c2ebaa2060251d56dd79", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/d10a1e5d727b4f778a1d70c2e/content", "label": "app_issues" }, { "hash": "d76d356cc4da1afc942a6259c1222a7b079607ea7e0d64", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/d76d356cc4da1afc942a6259c1222a7b0/content", "label": "app_hotspots" }, { "hash": "f0f84a2c2210a9c65c8430d577dafdd71bee6df5da", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/f0f84a2c2210a9c65c8430d577dafdd71bee6e/content", "label": "app_quality_status_updated" } ], "assets": [ { "hash": "1812f77dfc646c93320794810460acd3e53", "uri": "https://github.ibm.com/abcd/compliance-app-20250310111628285.git#7a06e70001a59032d1", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/1812f77dfc646c93320794810460acd3e/index.json" } ] }
Por favor, asegúrese de habilitar opt-in-sonar-quality-gates en CC en caso de que esté habilitado en la tubería de CI. De lo contrario, los problemas de calidad detectados por CC se autoinculparán. Actualmente estamos apareciendo
un mensaje de advertencia en los registros en relación con esta incoherencia.
Para obtener más información sobre SonarQube,, consulte la documentación de SonarQube.
Activación del procesamiento de SonarQube Hotspot
Un punto caliente de SonarQube destaca el código sensible desde el punto de vista de la seguridad que requiere una revisión manual para determinar si supone un riesgo real. Ayuda a los desarrolladores a centrarse en las vulnerabilidades potenciales sin generar falsos positivos. Para obtener más información sobre la gestión de zonas activas, consulte SonarQube Documentation.
Para permitir el procesamiento de SonarQube Hotspots, establezca la propiedad de entorno opt-in-sonar-hotspots como 1.
Si opt-in-sonar-hotspots está configurado como 1, y está utilizando su propia instancia SonarQube como integración (con sonarqube-config configurado como custom), para obtener los puntos de acceso detectados por Sonarqube mediante la API web, puede generar un token de usuario SonarQube con el permiso necesario para acceder a la API web SonarQube
y configurar la propiedad de entorno de canalización sonarqube-user-token con el token como valor secreto. Para más información sobre los permisos necesarios para los tokens, consulte SonarQube token permission.
-
Para ver los puntos críticos de seguridad detectados por SonarQube para un proyecto, seleccione el proyecto y haga clic en Puntos críticos de seguridad.
SonarQube -
Para revisar las zonas activas detectadas, seleccione la zona activa y haga clic en Revisar. Aparecerá un modal que le permitirá establecer el Estado de Revisión como uno de los siguientes:
To Review,Acknowledged,FixedySafe.
SonarQube
Al activar el indicador opt-in-sonar-hotspots, se crearán incidencias cuando SonarQube detecte una zona activa cuyo estado de revisión no esté establecido en: Acknowledged Fixed y Safe.
Un ejemplo del formato de los resultados de los hotspots, que es la respuesta de la API SonarQube:${SONAR_HOST_URL}/api/hotspots/search?projectKey=${SONAR_PROJECT_KEY}&p=$page&status=TO_REVIEW"
{
"hotspots": [
{
"key": "AYLD_a1_Hqacjdg4wbDR",
"component": "hello-compliance-app-compliance-check:index.js",
"project": "hello-compliance-app-compliance-check",
"securityCategory": "others",
"vulnerabilityProbability": "LOW",
"status": "TO_REVIEW",
"line": 74,
"message": "Make sure disabling content security policy frame-ancestors directive is safe here.",
"author": "abc@1.com",
"creationDate": "2022-04-01T06:29:13+0000",
"updateDate": "2022-08-22T05:18:31+0000",
"textRange": {
"startLine": 74,
"endLine": 84,
"startOffset": 0,
"endOffset": 1
},
"flows": [
{
"locations": [
{
"component": "hello-compliance-app-compliance-check:app.js",
"textRange": {
"startLine": 76,
"endLine": 82,
"startOffset": 4,
"endOffset": 5
}
}
]
}
],
"rule": {
"key": "javascript:S5732"
}
}
]
}
En caso de que se encuentre un hotspot de estado To Review en el resultado de la API anterior, se recoge una prueba de fallo que incluye información sobre el hotspot en la sección findings.
Ejemplo SonarQube pruebas fallidas debido a la detección de Hotspot:
{
"id": "62fc60140b2a761a969c6ad4f64d93d9c0f8f2301b1",
"evidence_type_id": "com.ibm.static_scan",
"evidence_type_version": "1.0.0",
"date": "2025-03-18T10:29:00.896Z",
"origin": {
},
"details": {
"result": "failure",
"tool": "sonarqube",
"failure_reason": "tool_detected_vulnerabilities"
},
"issues": [
"https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/13"
],
"findings": [
{
"id": "javascript:S4426",
"due_date": "n/a",
"severity": "high",
"first_found": "2025-03-18",
"url": "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/12",
"found_status": "new",
"has_exempt": false,
"cvss": "n/a",
"package": []
},
{
"id": "Hotspot: javascript:S2068",
"due_date": "n/a",
"severity": "high",
"first_found": "2025-03-18",
"url": "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/13",
"found_status": "new",
"has_exempt": false,
"cvss": "n/a",
"package": []
},
],
"attachments": [
{
"hash": "e579a1ab8025d280d5870eb8d4464d6d6a41a22",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/e579a1ab8025d280d5870eb8d4464d6d6a41a/content",
"label": "app_issues"
},
{
"hash": "6defa891c320ae2b80ae76d03e168edc2379",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/6defa891c320ae2b80ae76d03e168edc2379748d9/content",
"label": "app_hotspots"
},
{
"hash": "060a60e2d693427cde6064f72743ebb9e1d6",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/060a60e2d693427cde6064f72743ebb9e1d/content",
"label": "app_quality_status_updated"
}
],
"assets": [
{
"hash": "d7391b3273e5e52852f293031d62b9",
"uri": "https://github.ibm.com/abcd/compliance-app-20250310111628285.git#4eadaaf7454b8cb0edad927",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/d7391b3273e5e52852f293031d62b9bf0/index.json"
}
]
}
Por favor, asegúrese de habilitar opt-in-sonar-hotspots en CC en caso de que esté habilitado en la tubería de CI. De lo contrario, los problemas detectados por CC serán autocerrados. Actualmente estamos apareciendo un mensaje
de advertencia en los registros en relación con esta incoherencia.
Permisos para SonarQube Token
En caso de utilizar la instancia SonarQube existente y publicar con éxito el testrecord a Devops Insights y obtener el nombre de Quality Gate para un proyecto, tenemos que crear un token de usuario con los permisos necesarios
y establecerlo como un valor secreto en la propiedad env sonarqube-user-token con el fin de proporcionar permiso para acceder a los enpoints Sonarqube requeridos.
Para crear un identificador de usuario, abra SonarQube Dashboard > haga clic en la imagen de su perfil en la esquina superior derecha > seleccione Mi cuenta > seleccione Seguridad > en el menú desplegable Tipo seleccione Identificador de usuario > haga clic en Generar
-
El plugin Devops Insights realiza las siguientes llamadas API al servidor Sonarqube, como se indica a continuación:
-
GET api/qualitygates/estado_proyecto
Requiere uno de los siguientes permisos:
- administrar sistema
- derechos de "administrador" en el proyecto especificado
- examinar" el proyecto especificado
- ejecutar análisis" en el proyecto especificado
-
Requiere el permiso "Examinar" en el proyecto o proyectos especificados. componente.
-
Requiere el permiso "Examinar" en el proyecto o proyectos especificados.
-
Requiere uno de los siguientes permisos:
- administrar" a nivel global o de proyecto
- ejecutar análisis" a nivel global o de proyecto
-
-
Para obtener el nombre de la puerta de calidad, se accede a SonarQube Endpoint:
-
GET api/qualitygates/get_by_project
Requiere uno de los siguientes permisos:
- administrar sistema
- derechos de "administrador" en el proyecto especificado
- examinar" el proyecto especificado
-
-
Para obtener los Hotspots detectados en SonarQube, se accede al siguiente SonarQube Endpoint:
-
Requiere el permiso "Examinar" en el proyecto o proyectos especificados.
-
Para más información sobre los permisos de acceso a la API web SonarQube, consulte la documentación de la API web SonarQube
Utilización de su propio archivo de configuración
Puede modificar la configuración predeterminada sin utilizar su propia instancia de SonarQube. Cree un archivo sonar-project.properties en el repositorio en el que desea crear el archivo de configuración. Si nuestro script detecta
un archivo configuration sonar-project.properties existente en el repositorio, utiliza ese archivo en lugar del archivo predeterminado. Para obtener más información sobre los posibles parámetros de análisis en el archivo de
configuración, consulte Parámetros de análisis aquí.
Si se añade sonar.branch.name en el archivo sonarqube-project.properties, entonces se establece la propiedad sonar-branch-name env como valor por defecto, de lo contrario se toma en consideración el nombre
de la rama disponible en load_repo <app-name> branch. Para más información, consulte la documentación de Análisis de Rama.
Asegúrese de añadir las credenciales de inicio de sesión y el URL de host correctos en el archivo de configuración.
Utilización de otra implementación de exploración estática
Puede modificar el archivo .pipeline-config.yaml para añadir su propio script personalizado en la etapa static-scan para utilizar su propia implementación de exploración estática.
Más información sobre SonarQube
Para saber más sobre SonarQube,, consulte Integre su análisis SonarQube en su cadena de herramientas.