Configurazione delle scansioni SonarQube

SonarQube fornisce una panoramica dello stato generale e della qualità del codice sorgente ed evidenzia i problemi riscontrati nel nuovo codice. I programmi di analisi del codice rilevano errori complessi, come ad esempio dereferenziazioni di puntatori null, errori di logica e perdita di risorse, per più di 20 linguaggi di codifica.

Configura SonarQube per analizzare e misurare continuamente la qualità del tuo codice sorgente:

  1. Nella console IBM Cloud, fare clic sull'icona del menu Hamburger > Automazione piattaforma > Toolchains. Nella pagina Toolchains, fai clic sulla toolchain per aprirne la pagina di panoramica. In alternativa, nella pagina della panoramica della tua applicazione, nella scheda di fornitura continua, fai clic su View toolchain. Fai quindi clic su Overview.

    a. Fai clic su Add a tool.

    b. Nella sezione Tool Integrations, fai clic su SonarQube.

  2. Immetti un nome per questa istanza dell'integrazione dello strumento SonarQube.

  3. Immetti l'URL per l'istanza SonarQube che desideri aprire quando fai clic sulla scheda SonarQube dalla tua toolchain.

  4. Opzionale: Digitare il nome utente che si usa per connettersi al server SonarQube.

    È necessario specificare un nome utente solo se si utilizza una password per connettersi al server SonarQube. Se per la connessione utilizzi un token di autenticazione, lascia vuoto questo campo.

  5. Immetti la password o il token di autenticazione che utilizzi per connetterti al server SonarQube.

  6. Se il server non può essere su Internet pubblico, seleziona Advanced. IBM Cloud non può convalidare i dettagli di connessione che fornisci e alcune funzioni che richiedono l'accesso API a questo server sono disabilitate. La pipeline di distribuzione funziona solo utilizzando un operatore privato che ha accesso di rete a questo server.

  7. Fai clic su Crea integrazione.

  8. Nella pagina Panoramica della tua toolchain, sulla scheda Strumenti di terze parti, fai clic su SonarQube per visualizzare il pannello di controllo per l'istanza SonarQube a cui ti sei connesso.

Aggiunta di SonarQube alla pipeline di integrazione continua

Istanza SonarQube predefinita

  • Se sonarqube-config è impostato su default, per impostazione predefinita viene utilizzato SonarQube per la scansione. Questa scansione viene eseguita come DockerinDocker.

L'istanza utilizzata è disponibile solo durante l'esecuzione. Pertanto, non è possibile accedere alla dashboard.

  • Per impostazione predefinita, la pipeline utilizza l'edizione della community SonarQube che ha solo controlli checks.Many regole di vulnerabilità e problemi di hostspot non sono coperti in Community Edition.

  • Per verificare se una vulnerabilità è stata verificata nell'edizione della community, fai riferimento a thread in Sonarqube community question

Per scaricare il " SonarQube, fare riferimento al " SonarQube Download

L'istanza SonarQube sul cluster di sviluppo

Se sonarqube-config è impostato su cluster, la pipeline crea un'istanza di SonarQube durante l'esecuzione della pipeline nel cluster di sviluppo. Puoi accedere a questa istanza dopo che la fase di scansione statica è stata runs.You accedere al dashboard SonarQube localmente tramite l'inoltro della porta.

Istanza SonarQube esistente

Imposta sonarqube-config su custom, per aggiungere la tua istanza SonarQube alla tua pipeline esistente, aggiungere l'integrazione dello strumento alla tua toolchain e quindi aggiungere il parametro di integrazione dello strumento SonarQube alla pipeline. Per ulteriori informazioni, vedi Configurazione di SonarQube.

Server Sonarqube con certificato autofirmato

Se sonarqube-config è impostato su custom per utilizzare un server sonarqube esistente e il server ha un certificato autofirmato, affinché lo scanner sonar si connetta correttamente al server sonarqube, il certificato autofirmato deve essere aggiunto ai certificati CA affidabili.

Fornendo il certificato in un formato PEM (o base64 valore segreto codificato o PEM testo semplice formattato) come valore della proprietà sonarqube-root-certificate della pipeline/trigger, la configurazione verrà aggiunta in base all'utilizzo di SonarScanner per maven, SonarScanner per gradle sonar o SonarScanner invocato con Docker.

Parametri

Per eseguire la scansione SonarQube, la pipeline richiede i seguenti parametri di integrazione continua:

Continuous integration pipeline parameters
Nome Immettere Descrizione Obbligatoria o facoltativa
nome - cluster Testo Nome del cluster di build Docker. Obbligatorio
area di sviluppo Testo La regione IBM Cloud che ospita il cluster. Obbligatorio
opt-in - sonar Testo L'opzione per abilitare la scansione SonarQube. Obbligatorio
sonarqube Integrazione strumento L'integrazione dello strumento SonarQube. Facoltativo
configurazione sonetto Testo Esegue una scansione SonarQube in un contenitore Docker- in -Docker isolato (configurazione predefinita) o in un cluster Kubernetes di sviluppo esistente (configurazione cluster). In alternativa, puoi portare la tua istanza SonarQube e configurare l'integrazione dello strumento SonarQube (configurazione personalizzata). Opzioni: default, cluster o custom. L'impostazione predefinita è default. Per ulteriori informazioni, vedi (Aggiunta di SonarQube alla pipeline di integrazione continua). Obbligatorio
punti di attivazione - opt - in - sonar Testo La scansione Sonarqube per rilevare gli hotspot. Facoltativo
opt-in-sonar-portoni-di-qualità Testo Consente la scansione Sonarqube per rilevare i guasti del cancello di qualità. Facoltativo
opt-in-sonar-pr-analisi Testo Permettere a Sonarqube scan di fare l'analisi della richiesta di pull (questa opzione funziona solo se la PR non proviene da un repository biforcato). Questo parametro è valido solo per App-preview PR pipeline. Facoltativo
sonarqube-token-utente Secret Passare il token utente utilizzato per l'accesso all'API in caso di sonarqube-config impostato su custom Facoltativo
certificato-radice-sonarqube Testo o messaggio Nel caso in cui sonarqube-config sia impostato su custom, passare il certificato autofirmato come testo formattato PEM o segreto codificato base64 Facoltativo

Per ulteriori informazioni sui parametri delle pipeline, vedi Parametri pipeline.

Se aggiungi più integrazioni di strumenti SonarQube alla tua pipeline, puoi passare da una all'altra modificando il valore del parametro della pipeline SonarQube, che è un parametro di integrazione dello strumento.

Plug-in installati in SonarQube

DevSecOps Pipelines utilizza SonarQube versione 10.0 per impostazione predefinita.

Per ulteriori informazioni sull'elenco dei plug-in preinstallati, fare riferimento a plug-in

Problemi riportati da SonarQube

DevSecOps Pipelines filtra i problemi segnalati durante la scansione di SonarQube. Le pipeline creano esclusivamente Incidazioni di conformità per problemi che non sono di tipo CODE_SMELL o BUG. La pipeline ignora anche i problemi per cui lo stato è CLOSED.

Abilitazione dell'analisi delle richieste di pull nella pipeline PR di App Preview

L'opzione di analisi del PR viene fornita in App Preview PR pipeline se il PR proviene dallo stesso repo del repository di destinazione (e non da un fork). L'istanza Sonarqube deve supportare anche l'analisi PR. Le istanze predefinite di sonarqube utilizzate in modalità cluster e dind non supportano questa funzione, poiché l'analisi delle richieste di pull è disponibile a partire da sonarqube Developer Edition. La variabile d'ambiente opt-in-sonar-pr-analysis deve essere aggiunta alla pipeline e il suo valore non deve essere vuoto.

Abilitazione dell'elaborazione dei risultati del Quality Gate per un progetto SonarQube

Un Quality Gate in SonarQube è un insieme di condizioni che determinano se un progetto soddisfa gli standard di qualità richiesti dal codice. Per ulteriori informazioni su Quality Gates, consultare la documentazione di SonarQube.

SonarQube l'issue parser supporta l'elaborazione dei risultati del Quality Gate di SonarQube e crea problemi se si verifica un fallimento. Per consentire l'elaborazione dei risultati di Quality Gates, impostare la proprietà dell'ambiente opt-in-sonar-quality-gates come 1.

Se opt-in-sonar-quality-gates è impostato come 1 e si sta usando la propria istanza SonarQube come integrazione (con sonarqube-config impostato come custom), per recuperare il nome del Quality Gate si può generare un SonarQube User Token con i permessi necessari per accedere alla Web API SonarQube e impostare la proprietà dell'ambiente della pipeline sonarqube-user-token con il token come valore segreto. Per informazioni dettagliate sui permessi necessari per i token, consultare SonarQube.

Se si utilizza l'istanza di SonarQube creata dalla pipeline o un'integrazione personalizzata dello strumento SonarQube, seguire i seguenti passi per navigare nella dashboard di SonarQube:

  1. Vai al cruscotto SonarQube creato dall' URL, dai registri della pipeline nel task static-scan.

    CruscottoSonarQube
    CruscottiSonarQube

  2. Per impostazione predefinita, il gate di qualità Sonar way è associato a qualsiasi progetto che non sia esplicitamente associato a un gate di qualità specifico. È inoltre possibile creare nuovi Quality Gate con condizioni metriche personalizzate.

    • Per cercare l'elenco dei Quality Gate nel dashboard, fare clic su Quality Gate dalla barra di navigazione superiore.

      SonarQube gate di qualità predefinito Gate di qualità predefinito
      SonarQube

    • Per creare un nuovo Quality Gate, fare clic su Quality Gate dalla barra di navigazione superiore e poi su Crea. È possibile aggiungere un nome al Quality Gate e aggiungere/eliminare/aggiornare le metriche delle condizioni.

    • Per cercare il Quality Gate associato al progetto, selezionare il progetto e poi fare clic su Impostazioni progetto > Quality Gate.

      SonarQube progetto Quality Gate Quality Gate associato al progetto
      SonarQube

    • Per associare un Quality Gate (diverso da quello predefinito) a un particolare progetto, selezionare il progetto e poi fare clic su Impostazioni progetto > Quality Gate > Usa sempre un Quality Gate specifico > Selezionare il Quality Gate richiesto dal menu a tendina > Salva

      caption-side=bottom"
      SonarQube progetto Quality Gate Associare il quality gate al progetto

  3. Nuove scansioni vengono valutate da questo gate di qualità e la prova viene creata dai risultati del gate di qualità. I problemi vengono creati in base alle condizioni che hanno causato il fallimento del Quality Gate.

    Un esempio del formato del risultato del gate di qualità che è la risposta dell'API 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"
          }
       }
    }
    
    

    Per saperne di più sulle API di SonarQube, consultare la documentazione di Sonarqube WebAPI

    Per ogni chiave metrica con stato ERROR viene creato un problema, in modo da garantire che ogni metrica non funzionante venga monitorata e affrontata individualmente.

    Esempio di problema:

    caption-side=bottom"
    SonarQube issue Problema di Sonarqube per una metrica non riuscita

    Esempio SonarQube prova fallita a causa del fallimento 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.com/<org-name>/compliance-issues-20250310111628285/issues/14",
          "https://github.com/<org-name>/compliance-issues-20250310111628285/issues/15"
       ],
       "findings": [
          {
             "id": "Metric: new_coverage",
             "due_date": "n/a",
             "severity": "high",
             "first_found": "2025-03-18",
             "url": "https://github.com/<org-name>/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.com/<org-name>/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.com/<org-name>/abcd/compliance-app-20250310111628285.git#7a06e70001a59032d1",
             "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/1812f77dfc646c93320794810460acd3e/index.json"
          }
       ]
    }
    
    

Assicurarsi di abilitare opt-in-sonar-quality-gates in CC nel caso in cui sia abilitato nella pipeline CI. In caso contrario, i problemi del gate di qualità riscontrati da CC saranno autoclusi. Al momento stiamo visualizzando un messaggio di avviso nei registri relativo a questa incongruenza.

Per saperne di più su SonarQube, consultare la DocumentazioneSonarQube.

Abilitazione dell'elaborazione di SonarQube Hotspot

Un hotspot di SonarQube evidenzia il codice sensibile alla sicurezza che richiede una revisione manuale per determinare se rappresenta un rischio reale. Aiuta gli sviluppatori a concentrarsi sulle potenziali vulnerabilità senza generare falsi positivi. Per ulteriori informazioni sulla gestione degli hotspot, consultare la Documentazione di SonarQube.

Per abilitare l'elaborazione degli hotspot SonarQube, impostare la proprietà dell'ambiente opt-in-sonar-hotspots come 1.

Se opt-in-sonar-hotspots è impostato come 1 e si utilizza la propria istanza SonarQube come integrazione (con sonarqube-config impostato come custom), per recuperare gli hotspot rilevati da Sonarqube utilizzando l'API Web, è possibile generare un token utente SonarQube con i permessi necessari per accedere all'API Web SonarQube e impostare la proprietà dell'ambiente pipeline sonarqube-user-token con il token come valore segreto. Per informazioni dettagliate sui permessi necessari per i token, consultare SonarQube.

  • Per esaminare gli hotspot di sicurezza rilevati da SonarQube per un progetto, selezionare il progetto e poi fare clic su Hotspot di sicurezza.

    SonarQube progetto Hotspot Hotspot rilevati da
    SonarQube

  • Per esaminare gli hotspot rilevati, selezionare l'hotspot e fare clic su Rivedi. Viene visualizzata una maschera che consente di impostare lo stato di revisione come uno dei seguenti: To Review, Acknowledged, Fixed e Safe.

    SonarQube progetto Hotspots Recensione hotspots
    SonarQube

Abilitando il flag opt-in-sonar-hotspots, i problemi verranno creati quando viene rilevato un hotspot da SonarQube in cui lo stato di revisione non è impostato su: Acknowledged, Fixed e Safe.

SonarQube problema hotspot problema hotspot
SonarQube

Un esempio del formato dei risultati degli hotspot che è la risposta di SonarQube API:${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"
         }
      }
   ]
}

Nel caso in cui venga riscontrato un hotspot di stato To Review nel risultato dell'API precedente, viene raccolta un'evidenza di fallimento che include le informazioni sull'hotspot nella sezione findings.

Esempio SonarQube prova fallita a causa del rilevamento di 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.com/<org-name>/compliance-issues-20250310111628285/issues/13"
  ],
  "findings": [
    {
      "id": "javascript:S4426",
      "due_date": "n/a",
      "severity": "high",
      "first_found": "2025-03-18",
      "url": "https://github.com/<org-name>/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.com/<org-name>/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.com/<org-name>/compliance-app-20250310111628285.git#4eadaaf7454b8cb0edad927",
      "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/d7391b3273e5e52852f293031d62b9bf0/index.json"
    }
  ]
}

Assicurarsi di abilitare opt-in-sonar-hotspots in CC nel caso in cui sia abilitato nella pipeline CI. In caso contrario, i problemi di hotspot rilevati da CC verranno chiusi automaticamente. Al momento stiamo visualizzando un messaggio di avviso nei registri relativo a questa incongruenza.

Permessi per il token SonarQube

Nel caso in cui si utilizzi un'istanza esistente di SonarQube e per pubblicare con successo il testrecord su Devops Insights e recuperare il nome del Quality Gate per un progetto, è necessario creare un token utente con i permessi richiesti e impostarlo come valore segreto nella proprietà env sonarqube-user-token, in modo da fornire il permesso di accedere agli enpoint Sonarqube richiesti.

Per creare il token utente, aprire SonarQube Dashboard > fare clic sull'immagine del profilo > selezionare Il mio account > selezionare Sicurezza > dal menu a tendina Tipo selezionare Token utente > fare clic su Genera

SonarQube Token utente Generazione di token utente
SonarQube

  1. Il plugin Devops Insights effettua le seguenti chiamate API al server Sonarqube:

    • OTTIENI api/qualitygates/project_status

      Richiede una delle seguenti autorizzazioni:

      • amministrare il sistema
      • diritti di 'amministrazione' sul progetto specificato
      • sfogliare il progetto specificato
      • esegui analisi' sul progetto specificato
    • GET api/misure/componente

      Richiede l'autorizzazione 'Sfoglia' sul progetto o sui progetti specificati. componente.

    • GET api/problemi/ricerca

      Richiede l'autorizzazione "Sfoglia" per i progetti specificati.

    • OTTIENI api/ce/task

      Richiede una delle seguenti autorizzazioni:

      • amministrare" a livello globale o di progetto
      • eseguire l'analisi" a livello globale o di progetto
  2. Per ottenere il nome del Quality Gate, si utilizza il seguente endpoint SonarQube:

    • GET api/qualitygates/get_by_project

      Richiede una delle seguenti autorizzazioni:

      • amministrare il sistema
      • diritti di 'amministrazione' sul progetto specificato
      • sfogliare il progetto specificato
  3. Per recuperare gli hotspot rilevati da SonarQube, viene utilizzato il seguente endpoint SonarQube:

Per ulteriori informazioni sui permessi di accesso alla Web API di SonarQube, consultare la documentazione della Web API di SonarQube

Utilizzo del proprio file di configurazione

Puoi modificare la configurazione predefinita senza utilizzare la tua istanza SonarQube. Crea un file sonar-project.properties nel repo in cui vuoi creare il file di configurazione. Se il nostro script rileva un file configuration sonar-project.properties esistente nel repository, utilizza tale file invece del file predefinito. Per ulteriori informazioni sui parametri di analisi possibili nel file di configurazione, consultare Parametri di analisi qui.

Se sonar.branch.name è aggiunto nel file sonarqube-project.properties, allora viene impostato come valore predefinito alla proprietà env sonar-branch-name, altrimenti viene preso in considerazione il nome del ramo disponibile da load_repo <app-name> branch. Per ulteriori informazioni, consultare la documentazione di Branch Analysis.

Assicurati di aggiungere le credenziali di accesso corrette e l'host URL al file di configurazione.

Utilizzo di un'altra implementazione della scansione statica

È possibile modificare il proprio file .pipeline-config.yaml per aggiungere il proprio script personalizzato allo stage static-scan per utilizzare la propria implementazione della scansione statica.

Ulteriori informazioni su SonarQube

Per saperne di più su SonarQube, consultare la DocumentazioneSonarQube.