Code Qualityのトラブルシューティング
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
Code Qualityを使用する際に、次のイシューが発生する可能性があります。
コードが見つからず、パイプラインが常にデフォルトの設定で実行される
プライベートRunnerとDocker-in-Dockerソケットバインディング設定を使用している可能性があります。Code Qualityチェックをワーカーで実行するように設定する必要があります。プライベートRunnerの使用にドキュメントされているとおりです。
デフォルトの設定を変更しても効果がない
一般的なイシューは、Code Quality(GitLab固有)とCode Climate(GitLabが使用するエンジン)という用語が非常によく似ていることです。デフォルトの設定を変更するには、.codequality.ymlファイルではなく、.codeclimate.yml ファイルを追加する必要があります。間違ったファイル名を使用すると、デフォルトの.codeclimate.ymlが引き続き使用されます。
Code Qualityレポートがマージリクエストに表示されない
マージリクエストでの比較のために、ソースブランチまたはターゲットブランチからのCode Qualityレポートが欠落している場合があり、情報が表示されないことがあります。
ソースブランチでのレポートの欠落は、次の原因が考えられます:
REPORT_STDOUT環境変数の使用により、レポートファイルが生成されず、マージリクエストに何も表示されません。
ターゲットブランチでのレポートの欠落は、次の原因が考えられます:
- あなたの
.gitlab-ci.ymlに新しく追加されたCode Qualityジョブ。 - あなたのパイプラインが、ターゲットブランチでCode Qualityジョブを実行するように設定されていません。
- Code Qualityジョブを実行しないコミットがデフォルトブランチに対して行われました。
artifacts:expire_inCI/CD設定により、Code Qualityアーティファクトが意図したよりも早く期限切れになることがあります。
マージリクエストAPIを使用してbase_shaを取得し、ベースコミットにレポートが存在することを確認し、sha属性を持つパイプラインAPIを使用してパイプラインが実行されたかを確認します。
変更ビューにCode Qualityシンボルがない
変更ビューにシンボルが表示されない場合は、コード品質レポート内のlocation.pathが次のようになっていることを確認してください:
- コード品質違反を含むファイルへの相対パスを使用していること。
./でプレフィックスが付いていないこと。例えば、pathは./somedir/file1.rbではなくsomedir/file1.rbである必要があります。
複数のCode Qualityレポートが定義されているのに、1つしか表示されない
Code Qualityは複数のレポートを自動的に結合します。
RuboCopエラー
RubyプロジェクトでCode Qualityジョブを使用している場合、RuboCopの実行で問題が発生する可能性があります。例えば、非常に新しいバージョンまたは非常に古いRubyのバージョンを使用している場合に、次のエラーが表示されることがあります:
/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これは、チェックエンジンで使用されるRuboCopのデフォルトバージョンが、使用中のRubyバージョンのサポートをカバーしていないことが原因です。
プロジェクトで使用されているRubyのバージョンをサポートするカスタムバージョンのRuboCopを使用するには、プロジェクトリポジトリに作成された.codeclimate.ymlファイルを通じて設定を上書きできます。
例えば、RuboCopリリース0.67を使用することを指定するには:
version: "2"
plugins:
rubocop:
enabled: true
channel: rubocop-0-67カスタムツールを使用しているときにCode Qualityがマージリクエストに表示されない
カスタムツールを使用しているときに、マージリクエストにCode Qualityの変更が表示されない場合は、JSON内の行プロパティがすべて integerであることを確認してください。
エラー: Could not analyze code quality
次のエラーが表示されることがあります:
error: (CC::CLI::Analyze::EngineFailure) engine pmd ran for 900 seconds and was killed
Could not analyze code quality for the repository at /codeCode Climateプラグインのいずれかを有効にしていて、Code Quality CI/CDジョブがこのエラーメッセージで失敗する場合、ジョブの実行がデフォルトの900秒のタイムアウトを超えている可能性があります:
この問題を回避策するために、.gitlab-ci.ymlファイルでTIMEOUT_SECONDSをより高い値に設定してください。
例:
code_quality:
variables:
TIMEOUT_SECONDS: 3600KubernetesまたはOpenShift RunnerでCode Qualityを使用する
CodeClimateベースのスキャンには特別な要件があります。スキャンが正常に機能する前に、KubernetesまたはOpenShift RunnerをCodeClimateベースのスキャン用に設定する必要がある場合があります。
エラー: x509: certificate signed by unknown authority
CODE_QUALITY_IMAGEを、自己署名証明書など、信頼されていないTLS証明書を使用するDockerレジストリでホストされているイメージに設定すると、次のエラーが表示されることがあります:
$ docker pull --quiet "$CODE_QUALITY_IMAGE"
Error response from daemon: Get https://gitlab.example.com/v2/: x509: certificate signed by unknown authorityこれを修正するには、証明書を/etc/docker/certs.dディレクトリ内に配置して、Dockerデーモンが証明書を信頼するように設定してください。
このDockerデーモンは、GitLab Code Qualityテンプレート内の後続のCode Quality Dockerコンテナに公開され、証明書設定を適用したい他のコンテナにも公開される必要があります。
Docker
GitLab Runnerの設定にアクセスできる場合は、ディレクトリをボリュームマウントとして追加します。
gitlab.example.comをレジストリの実際のドメインに置き換えます。
例:
[[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"]Kubernetes
GitLab Runnerの設定とKubernetesクラスターにアクセスできる場合は、ConfigMapをマウントできます。
gitlab.example.comをレジストリの実際のドメインに置き換えます。
証明書を含むConfigMapを作成します:
kubectl create configmap registry-crt --namespace gitlab-runner --from-file /etc/gitlab-runner/certs/gitlab.example.com.crtGitLab Runnerの
config.tomlを更新して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"
Code Qualityレポートの読み込みに失敗しました
アーティファクトファイルからのデータ解析にイシューがある場合、Code Qualityレポートの読み込みが失敗することがあります。エラーに関するインサイトを得るには、次の手順でGraphQLクエリを実行できます:
パイプラインの詳細ページに移動します。
URLに
.jsonを追加します。パイプラインの
iidをコピーします。インタラクティブGraphQLエクスプローラーに移動します。
次のクエリを実行します。
{ project(fullPath: "<fullpath-to-your-project>") { pipeline(iid: "<iid>") { codeQualityReports { count nodes { line description path fingerprint severity } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } } } } }
レポートアーティファクトが作成されない
特定のRunner設定では、Code Qualityスキャンジョブがソースコードにアクセスできない場合があります。この場合、gl-code-quality-report.jsonアーティファクトは作成されません。
このイシューを解決するには、次のいずれかの操作を行います:
- Dockerソケットバインディングではなく特権モードを使用する、Docker-in-DockerのドキュメントされたRunner設定を使用します。
- Dockerソケットバインディングの使用を継続したい場合は、イシュー32027でのコミュニティによる回避策を適用します。
詳細については、Runner設定の変更を参照してください。