doc-locale/fr-fr/ci/testing/code_quality_troubleshooting.md
{{< details >}}
{{< /details >}}
Lorsque vous utilisez Code Quality, vous pouvez rencontrer les problèmes suivants.
Vous utilisez probablement un runner privé avec la configuration de liaison de socket Docker-in-Docker. Vous devez configurer les vérifications Code Quality pour qu'elles s'exécutent sur votre worker, comme indiqué dans Use private runners.
Un problème courant est que les termes Code Quality (spécifique à GitLab) et Code Climate (moteur utilisé par GitLab) sont très similaires. Vous devez ajouter un fichier .codeclimate.yml pour modifier la configuration par défaut, et non un fichier .codequality.yml. Si vous utilisez le mauvais nom de fichier, le .codeclimate.yml par défaut est toujours utilisé.
Les rapports Code Quality provenant de la branche source ou de la branche cible peuvent être manquants pour la comparaison dans le merge request, ce qui rend l'affichage d'informations impossible.
L'absence de rapport sur la branche source peut être due à :
REPORT_STDOUT : aucun fichier de rapport n'est généré et rien ne s'affiche dans le merge request.L'absence de rapport sur la branche cible peut être due à :
.gitlab-ci.yml.artifacts:expire_in peut entraîner l'expiration des artefacts Code Quality plus rapidement que souhaité.Vérifiez la présence du rapport sur le commit de base en obtenant base_sha via l'API merge request et utilisez l'API pipelines avec l'attribut sha pour vérifier si des pipelines ont été exécutés.
Si aucun symbole n'est affiché dans la vue des modifications, vérifiez que location.path dans le rapport Code Quality :
./. Par exemple, path doit être somedir/file1.rb plutôt que ./somedir/file1.rb.Code Quality combine automatiquement plusieurs rapports.
Lorsque vous utilisez des jobs Code Quality sur un projet Ruby, vous pouvez rencontrer des problèmes lors de l'exécution de RuboCop. Par exemple, l'erreur suivante peut apparaître lors de l'utilisation d'une version de Ruby très récente ou très ancienne :
/usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/config.rb:510:in `check_target_ruby':
Unknown Ruby version 2.7 found in `.ruby-version`. (RuboCop::ValidationError)
Supported versions: 2.1, 2.2, 2.3, 2.4, 2.5
Ce problème est dû au fait que la version par défaut de RuboCop utilisée par le moteur de vérification ne prend pas en charge la version de Ruby utilisée.
Pour utiliser une version personnalisée de RuboCop qui prend en charge la version de Ruby utilisée par le projet, vous pouvez remplacer la configuration via un fichier .codeclimate.yml créé dans le dépôt du projet.
Par exemple, pour spécifier l'utilisation de la release RuboCop 0.67 :
version: "2"
plugins:
rubocop:
enabled: true
channel: rubocop-0-67
Si vos merge requests n'affichent aucune modification Code Quality lors de l'utilisation d'un outil personnalisé, vérifiez que toutes les propriétés de ligne dans le JSON sont de type integer.
Could not analyze code quality {#error-could-not-analyze-code-quality}Vous pourriez obtenir l'erreur suivante :
error: (CC::CLI::Analyze::EngineFailure) engine pmd ran for 900 seconds and was killed
Could not analyze code quality for the repository at /code
Si vous avez activé l'un des plugins Code Climate et que le job CI/CD Code Quality échoue avec ce message d'erreur, il est probable que le job prenne plus de temps que le délai d'expiration par défaut de 900 secondes :
Pour contourner ce problème, définissez TIMEOUT_SECONDS sur une valeur plus élevée dans votre fichier .gitlab-ci.yml.
Par exemple :
code_quality:
variables:
TIMEOUT_SECONDS: 3600
L'analyse basée sur CodeClimate présente des exigences particulières. Vous devrez peut-être configurer les runners Kubernetes ou OpenShift pour l'analyse basée sur CodeClimate avant que les analyses fonctionnent correctement.
x509: certificate signed by unknown authority {#error-x509-certificate-signed-by-unknown-authority}Si vous définissez CODE_QUALITY_IMAGE sur une image hébergée dans un registre Docker utilisant un certificat TLS non approuvé, tel qu'un certificat auto-signé, vous pourriez voir l'erreur suivante :
$ docker pull --quiet "$CODE_QUALITY_IMAGE"
Error response from daemon: Get https://gitlab.example.com/v2/: x509: certificate signed by unknown authority
Pour résoudre ce problème, configurez le daemon Docker pour qu'il approuve les certificats en plaçant le certificat dans le répertoire /etc/docker/certs.d.
Ce daemon Docker est exposé au conteneur Docker Code Quality suivant dans le modèle GitLab Code Quality et doit également être exposé à tous les autres conteneurs dans lesquels vous souhaitez que votre configuration de certificat s'applique.
Si vous avez accès à la configuration de GitLab Runner, ajoutez le répertoire en tant que montage de volume.
Remplacez gitlab.example.com par le domaine réel du registre.
Exemple :
[[runners]]
...
executor = "docker"
[runners.docker]
...
privileged = true
volumes = ["/cache", "/etc/gitlab-runner/certs/gitlab.example.com.crt:/etc/docker/certs.d/gitlab.example.com/ca.crt:ro"]
Si vous avez accès à la configuration de GitLab Runner et au cluster Kubernetes, vous pouvez monter un ConfigMap.
Remplacez gitlab.example.com par le domaine réel du registre.
Créez un ConfigMap avec le certificat :
kubectl create configmap registry-crt --namespace gitlab-runner --from-file /etc/gitlab-runner/certs/gitlab.example.com.crt
Mettez à jour le fichier config.toml de GitLab Runner pour spécifier le ConfigMap :
[[runners]]
...
executor = "kubernetes"
[runners.kubernetes]
image = "alpine:3.12"
privileged = true
[[runners.kubernetes.volumes.config_map]]
name = "registry-crt"
mount_path = "/etc/docker/certs.d/gitlab.example.com/ca.crt"
sub_path = "gitlab.example.com.crt"
Le rapport Code Quality peut ne pas se charger lorsque des problèmes surviennent lors de l'analyse des données du fichier d'artefact. Pour obtenir des informations sur les erreurs, vous pouvez exécuter une requête GraphQL en suivant les étapes ci-dessous :
Accédez à la page de détails du pipeline.
Ajoutez .json à l'URL.
Copiez l'iid du pipeline.
Accédez à l'explorateur GraphQL interactif.
Exécutez la requête suivante :
{
project(fullPath: "<fullpath-to-your-project>") {
pipeline(iid: "<iid>") {
codeQualityReports {
count
nodes {
line
description
path
fingerprint
severity
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
}
}
}
}
Avec certaines configurations de runner, le job d'analyse Code Quality peut ne pas avoir accès à votre code source. Si cela se produit, l'artefact gl-code-quality-report.json ne sera pas créé.
Pour résoudre ce problème, vous pouvez :
Pour plus de détails, consultez Change Runner configuration.