正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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レポートが欠落している場合があり、情報が表示されないことがあります。

ソースブランチでのレポートの欠落は、次の原因が考えられます:

  1. REPORT_STDOUT環境変数の使用により、レポートファイルが生成されず、マージリクエストに何も表示されません。

ターゲットブランチでのレポートの欠落は、次の原因が考えられます:

  • あなたの.gitlab-ci.ymlに新しく追加されたCode Qualityジョブ。
  • あなたのパイプラインが、ターゲットブランチでCode Qualityジョブを実行するように設定されていません。
  • Code Qualityジョブを実行しないコミットがデフォルトブランチに対して行われました。
  • artifacts:expire_in CI/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 /code

Code Climateプラグインのいずれかを有効にしていて、Code Quality CI/CDジョブがこのエラーメッセージで失敗する場合、ジョブの実行がデフォルトの900秒のタイムアウトを超えている可能性があります:

この問題を回避策するために、.gitlab-ci.ymlファイルでTIMEOUT_SECONDSをより高い値に設定してください。

例:

code_quality:
  variables:
    TIMEOUT_SECONDS: 3600

Kubernetesまたは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をレジストリの実際のドメインに置き換えます。

  1. 証明書を含むConfigMapを作成します:

    kubectl create configmap registry-crt --namespace gitlab-runner --from-file /etc/gitlab-runner/certs/gitlab.example.com.crt
  2. GitLab 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クエリを実行できます:

  1. パイプラインの詳細ページに移動します。

  2. URLに.jsonを追加します。

  3. パイプラインのiidをコピーします。

  4. インタラクティブGraphQLエクスプローラーに移動します。

  5. 次のクエリを実行します。

    {
      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アーティファクトは作成されません。

このイシューを解決するには、次のいずれかの操作を行います:

詳細については、Runner設定の変更を参照してください。