Risolvere i problemi dei risultati di CodeQL
Questa unità fornisce suggerimenti per l'ottimizzazione e la risoluzione dei problemi quando si usa CodeQL e l'analisi del codice.
Ottimizzare i runtime di analisi CodeQL
Esistono diversi motivi per cui il completamento dell'analisi CodeQL potrebbe richiedere troppo tempo:
- Se si usano strumenti di esecuzione self-hosted per l'analisi di CodeQL, è possibile incrementare la memoria o il numero di core.
- I problemi possono verificarsi quando un repository contiene più lingue. È possibile modificare il flusso di lavoro in modo da usare una matrice che velocizza l'analisi di più lingue. L'analisi di ogni linguaggio viene eseguita in parallelo con il flusso di lavoro di analisi CodeQL predefinito. Potrebbe essere necessario configurare flussi di lavoro avanzati in modo analogo se sono configurati per eseguire l'inizializzazione e l'analisi del linguaggio in sequenza.
- La quantità di codice che si sta analizzando potrebbe causare runtime lunghi. Il tempo di analisi è in genere proporzionale alla quantità di codice da analizzare. È possibile ridurre le dimensioni del codice escludendo il codice di test o suddividendo il codice in più flussi di lavoro per analizzare solo un subset con ogni analisi.
- È consigliabile attivare l'analisi sul
scheduleevento solo se le prestazioni dell'analisi sono troppo lente durante gli eventipushopull_request.
Ottimizzazione delle query CodeQL
Alcuni problemi di prestazioni possono verificarsi da query personalizzate. È possibile trovare problemi comuni e come risolverli nella documentazione di CodeQL sulla risoluzione dei problemi relativi alle prestazioni delle query.
Ecco alcuni punti importanti da tenere presenti durante l'uso di CodeQL e del linguaggio di query QL:
- I predicati e le classi CodeQL vengono valutati nelle tabelle di database. I predicati di grandi dimensioni generano tabelle di grandi dimensioni con molte righe, quindi sono costosi da calcolare.
- Il linguaggio QL viene implementato tramite operazioni di database standard e algebra relazionale, ad esempio join, proiezione e unione.
- Le query vengono valutate in basso verso l'alto, il che significa che un predicato non viene valutato fino a quando non vengono valutati tutti i predicati da cui dipende.
Eseguire il debug degli artefatti
È possibile ottenere artefatti per facilitare il debug dei problemi con l'analisi del codice CodeQL. Modificare il init passaggio del file del flusso di lavoro CodeQL e impostare debug: true. Gli artefatti di debug vengono caricati nel flusso di lavoro come artefatto denominato debug-artifacts. I dati contengono i log CodeQL, i database CodeQL e tutti i file SARIF prodotti dal flusso di lavoro.
Risolvere i problemi relativi all'estensione CodeQL per VS Code
I file di log dell'estensione VS Code contengono informazioni dettagliate che consentono di risolvere i problemi.
I messaggi di stato e di errore vengono visualizzati come notifiche nell'angolo inferiore destro dell'area di lavoro. È possibile utilizzare il menu a discesa CodeQL Extension Log per selezionare i registri necessari.
Messaggi di errore comuni
Per risolvere i problemi del flusso di lavoro codeQL, acquisire familiarità con i messaggi di errore comuni seguenti.
Errore: "Errore del server"
Se l'esecuzione di un flusso di lavoro per l'analisi del codice ha esito negativo a causa di un errore del server, potrebbe verificarsi un problema di comunicazione temporaneo. Provare a eseguire di nuovo il flusso di lavoro. Se il problema persiste, contattare il supporto di GitHub.
Errore: "Disco insufficiente" o "Memoria insufficiente"
CodeQL potrebbe esaurire il disco o la memoria nello strumento di esecuzione per i progetti troppo grandi. Se si tratta di uno strumento di esecuzione di GitHub Actions ospitato, contattare il supporto di GitHub per analizzare il problema. Se si tratta di uno strumento di esecuzione self-hosted, potrebbe essere necessario apportare modifiche alle specifiche del server. Per altre informazioni, vedere la documentazione di CodeQL sull'hardware consigliato per l'esecuzione di CodeQL.
Errore: 403 "Risorsa non accessibile dall'integrazione" quando si usa Dependabot
Dependabot viene considerato non attendibile quando attiva un'esecuzione del flusso di lavoro. Il flusso di lavoro viene eseguito con ambiti di sola lettura. Il caricamento dei risultati dell'analisi del codice per un ramo richiede in genere il security_events: write scope. Tuttavia, l'analisi del codice consente sempre il caricamento dei risultati quando l'evento pull_request attiva l'esecuzione dell'azione. Per i rami Dependabot, è consigliabile usare l'evento pull_request anziché l'evento push .
Un approccio semplice consiste nell'esecuzione su push nel ramo predefinito e in altri rami a esecuzione prolungata importanti, nonché richieste pull aperte rispetto a questo set di rami.
Ecco un esempio:
on:
push:
branches:
- main
pull_request:
branches:
- main
Errore: "Caricamento SARIF rifiutato a causa dell'installazione predefinita"
I caricamenti SARIF vengono bloccati quando l'installazione predefinita di CodeQL è abilitata. Questo errore si verifica quando un processo tenta di caricare un file SARIF contenente i risultati dell'analisi CodeQL in un repository con la configurazione predefinita abilitata. L'errore si verifica anche se il caricamento viene eseguito tramite l'API REST e l'interfaccia della riga di comando codeQL. Questo blocco è in atto per ridurre il potenziale di confusione dell'utente quando più sistemi generano avvisi di analisi del codice simili.
Questo errore si verifica solo per i file SARIF che contengono risultati creati usando CodeQL. Per correggere questo errore, disabilitare CodeQL nel repository e quindi riprovare a caricare il file SARIF.
Ulteriori letture
Per altre informazioni sulla risoluzione dei problemi, vedere la documentazione di CodeQL per la risoluzione dei problemi di analisi del codice.