Configurer l’analyse du code
Vous pouvez configurer la façon dont GitHub analyse le code de votre projet à la recherche de vulnérabilités et d’erreurs. Lorsque vous choisissez votre propre configuration, vous gagnez du temps et vous décidez de la meilleure fréquence d’analyse du code pour votre projet. Dans cette unité, vous allez apprendre les principes fondamentaux de la configuration de l’analyse du code. Vous apprendrez également à configurer la fréquence des analyses et à les planifier en fonction de vos besoins en matière de référentiel et de développement.
Comme nous l’avons vu dans les unités précédentes, vous pouvez exécuter l’analyse du code sur GitHub, à l’aide de GitHub Actions ou à partir de votre système d’intégration continue (CI). La sélection de l’option d’installation avancée sur GitHub génère un fichier de flux de travail personnalisable que vous pouvez ensuite valider directement dans votre référentiel. En règle générale, vous n’avez pas besoin de modifier ce flux de travail. Toutefois, si nécessaire, vous pouvez personnaliser certains paramètres.
Vous pouvez, par exemple, modifier le flux de travail d’analyse CodeQL de GitHub pour spécifier la fréquence des analyses, les langages ou les répertoires à analyser et le code CodeQL que l’analyse recherche dans votre code. Vous devrez peut-être également modifier le flux de travail d’analyse CodeQL si vous utilisez un ensemble spécifique de commandes pour compiler votre code. L’analyse CodeQL ne constitue qu’un seul type d’analyse du code que vous pouvez effectuer dans GitHub. La place de marché GitHub contient plusieurs autres flux de travail d’analyse du code.
Passage de la configuration par défaut à la configuration en mode avancé de l’analyse de code
Si vous disposez déjà d’une configuration de référentiel pour utiliser l’analyse de code en tirant parti de la méthode de configuration par défaut, vous pouvez effectuer un basculement dans les paramètres pour utiliser la configuration en mode avancé. Accédez à la section Analyse du code sous Paramètres > Sécurité et analyse du code, puis sélectionnez l’icône de dépassement de trois points (...). Dans la liste déroulante, sélectionnez Basculer vers le mode avancé. Ensuite, suivez les instructions pour désactiver CodeQL et réactivez-le avec le fichier de workflow généré par l'installation avancée.
Modifier le flux de travail d’analyse du code
GitHub enregistre les fichiers de flux de travail dans le répertoire .github/workflows de votre dépôt. Vous pouvez trouver un flux de travail que vous avez ajouté en recherchant son nom de fichier. Par exemple, par défaut, le fichier de flux de travail pour l’analyse du code CodeQL est appelé codeql-analysis.yml.
Pour modifier un fichier de flux de travail, procédez comme suit :
Pour ouvrir l’éditeur de flux de travail, sélectionnez l’icône Modifier dans le coin supérieur droit de la vue de fichier.
Apportez vos modifications.
Une fois que vous avez modifié le fichier, sélectionnez Valider les modifications et remplissez le formulaire Valider les modifications. Vous pouvez valider directement dans la branche active ou créer une branche et démarrer une demande de tirage (pull request).
Consultez les sections suivantes pour obtenir des options courantes de configuration de l’analyse du code.
Configurer la fréquence
Une modification courante du fichier de flux de travail consiste à ajuster la fréquence à laquelle l’analyse du code se produit. Vous pouvez configurer le flux de travail d’analyse CodeQL pour analyser le code selon une planification ou lorsque des événements spécifiques se produisent dans un référentiel. Vous pouvez également modifier le fichier de workflow pour analyser le code lorsqu’un push est effectué et chaque fois qu’une pull request est créée. L’ajustement de cette fréquence empêche les développeurs d’introduire de nouvelles vulnérabilités et erreurs dans le code. L’analyse du code selon une planification vous informe des dernières vulnérabilités et erreurs découvertes par GitHub, les chercheurs en sécurité et la communauté. Même lorsque les développeurs ne maintiennent pas activement le référentiel.
Analyse sur envoi (push)
Par défaut, le flux de travail d’analyse CodeQL utilise l’événement on:push pour déclencher une analyse du code à chaque envoi (push) vers la branche par défaut du référentiel et toutes les branches protégées. Pour que l’analyse du code soit déclenchée sur une branche spécifiée, le flux de travail doit exister dans cette branche. Si vous effectuez une analyse push, les résultats s’affichent sous l’onglet Sécurité de votre référentiel.
En outre, lorsqu’une analyse on:push retourne un résultat qui peut être mappé à une demande de tirage (pull request) ouverte, ces alertes s’affichent automatiquement sur une demande de tirage au même emplacement que les autres alertes de demande de tirage. Les alertes sont identifiées en comparant l’analyse existante de la tête de la branche à l’analyse de la branche cible.
Analyse sur PR (demande de tirage)
Le flux de travail d’analyse CodeQL par défaut utilise l’événement pull_request pour déclencher une analyse de code sur les demandes de tirage ciblées sur la branche par défaut. Si une demande de tirage provient d’une fourche privée, l’événement pull_request n’est déclenché que si vous avez sélectionné l’option « Exécuter des flux de travail à partir de demandes de tirage (pull request) de la fourche » dans les paramètres du référentiel. Si vous analysez les demandes de tirage, les résultats s’affichent sous forme d’alertes dans une vérification des demandes de tirage.
Si vous utilisez le déclencheur pull_request, configuré pour analyser la validation de fusion de la demande de tirage plutôt que la validation de l’en-tête, les résultats produits sont plus efficaces et précis que ceux de l’analyse de l’en-tête de la branche sur chaque envoi (push). Toutefois, si vous utilisez un système d’intégration continue et de livraison continue (CI/CD) qui ne peut pas être configuré pour se déclencher sur des demandes de tirage, vous pouvez toujours utiliser le déclencheur on:push pour que l’analyse du code mappe les résultats aux demandes de tirage ouvertes sur la branche et ajoute les alertes en tant qu’annotations à une demande de tirage.
Définir les gravités entraînant l’échec de la vérification des demandes de tirage (pull requests)
Par défaut, seules les alertes avec le niveau de gravité Error ou le niveau de gravité de la sécurité Critical ou High entraînent l’échec de la vérification de la demande de tirage. Les échecs de pull-request n'empêchent pas l'analyse du code, mais représentent un obstacle lors de la fusion du code. Vous trouverez la liste des échecs de demande de tirage dans l’onglet Alertes d’analyse du code sous sécurité de votre référentiel. Dans les paramètres de votre référentiel, vous pouvez modifier les niveaux de gravité des alertes et de gravité de la sécurité qui entraînent l’échec de la vérification des demandes de tirage.
Sur GitHub.com, accédez à la page principale du référentiel. Sous le nom de votre référentiel, sélectionnez Paramètres.
Dans la barre latérale gauche, sélectionnez Sécurité et analyse du code.
Dans la section Analyse de code, sous Règles de protection, utilisez le menu déroulant pour sélectionner le niveau de gravité pour lequel vous souhaitez déclencher un échec de la vérification de la demande de tirage.
Éviter les analyses inutiles des demandes de tirage (pull requests)
Vous souhaiterez peut-être éviter qu’une analyse du code ne soit déclenchée sur des demandes de tirage spécifiques ciblées sur la branche par défaut, quels que soient les fichiers qui ont été modifiés. Vous pouvez configurer ce paramètre en spécifiant on:pull_request:paths-ignore ou on:pull_request:paths dans le flux de travail d’analyse du code. Par exemple, si les seules modifications apportées à une demande de tirage concernent des fichiers portant l’extension .md ou .txt, vous pouvez utiliser le tableau paths-ignore suivant.
on:
push:
branches: [main, protected]
pull_request:
branches: [main]
paths-ignore:
- '**/*.md'
- '**/*.txt'
Ajuster la planification de l’analyse
Si vous utilisez le workflow d’analyse CodeQL par défaut, le flux de travail analyse le code dans votre référentiel une fois par semaine à une date et heure générées de manière aléatoire, en plus des analyses déclenchées par des événements. Pour ajuster cette planification, modifiez la valeur cron dans le flux de travail.
L’exemple suivant montre un flux de travail d’analyse CodeQL pour un référentiel avec une branche par défaut appelée main et une branche protégée appelée protected :
on:
push:
branches: [main, protected]
pull_request:
branches: [main]
schedule:
- cron: '20 14 * * 1'
Ce flux de travail analyse les éléments suivants :
- Chaque envoi (push) vers la branche par défaut et la branche protégée
- Chaque demande de tirage (pull request) sur la branche par défaut
- La branche par défaut tous les lundis à 14:20 UTC