- デバッグレベルのロギング
- GitLabが管理するCI/CDテンプレートの変更に関連するパイプラインエラー
- 特定の分析ジョブのエラー
exec /bin/sh: exec format error
ジョブログのメッセージError response from daemon: error processing tar file: docker-tar: relocation error
- 警告メッセージ
gl-sast-report.json: no matching files
- エラー:
sast is used for configuration only, and its script should not be executed
- rules:exists を使うときの制限
- SpotBugs UTF-8 マッピング不可能文字エラー
- SpotBugs エラー:
Project couldn't be built
- Flawfinder エンコードエラー
- Semgrepの速度低下、予期しない結果、その他のエラー
SASTのトラブルシューティング
デバッグレベルのロギング
デバッグ・レベルのロギングは、トラブルシューティングの際に役立ちます。詳細については、デバッグレベルロギングを参照してください。
GitLabが管理するCI/CDテンプレートの変更に関連するパイプラインエラー
GitLab が管理する SAST CI/CD テンプレートは、どのアナライザージョブが実行され、どのように設定されるかを制御します。テンプレートを使っているときに、ジョブの失敗やその他のパイプラインエラーが発生するかもしれません。例えば
- 影響を受けたパイプラインを表示すると、
'<your job>' needs 'spotbugs-sast' job, but 'spotbugs-sast' is not in any previous stage
のようなエラーメッセージが表示されます。 - CI/CD パイプライン設定に予期しない別のタイプのイシューが発生しました。
ジョブが失敗したり、SAST関連のyaml invalid
パイプラインステータスが表示されたりする場合、一時的に古いバージョンのテンプレートに戻すことで、問題を調査している間パイプラインを動作させ続けることができます。古いバージョンのテンプレートを使うには、CI/CD YAML ファイルの既存のinclude
ステートメントを変更して、v15.3.3-ee
のような特定のテンプレートバージョンを参照するようにします:
include:
remote: 'https://gitlab.com/gitlab-org/gitlab/-/raw/v15.3.3-ee/lib/gitlab/ci/templates/Jobs/SAST.gitlab-ci.yml'
GitLab インスタンスのネットワーク接続が限られている場合は、ファイルをダウンロードして別の場所でホストすることもできます。
この方法は一時的に使用し、できるだけ早く標準テンプレートに戻すことをお勧めします。
特定の分析ジョブのエラー
GitLab SASTアナライザはコンテナイメージとしてリリースされています。GitLabが管理するSAST CI/CDテンプレートや自分のプロジェクトの変更とは関係なさそうな新しいエラーが表示される場合は、影響を受けるアナライザーを特定の古いバージョンに固定してみてください。
それぞれのアナライザープロジェクトには、CHANGELOG.md
ファイルがあり、利用可能な各バージョンでの変更がリストアップされています。
exec /bin/sh: exec format error
ジョブログのメッセージ
GitLab SASTアナライザは、amd64
CPUアーキテクチャ上での実行のみをサポートしています。このメッセージは、ジョブがarm
のような異なるアーキテクチャで実行されていることを示します。
Error response from daemon: error processing tar file: docker-tar: relocation error
このエラーは、SASTジョブを実行するDockerのバージョンが19.03.0
の場合に発生します。Docker19.03.1
以上へのアップデートを検討してください。古いバージョンは影響を受けません。この問題の。
警告メッセージgl-sast-report.json: no matching files
これについては、一般的なアプリケーションセキュリティのトラブルシューティングのセクションを参照してください。
エラー:sast is used for configuration only, and its script should not be executed
これについては、GitLab Secureのトラブルシューティングを参照してください。
rules:exists を使うときの制限
SAST CI テンプレートは rules:exists
パラメータを rules:exists
使用します。rules:exists
パフォーマンス上の理由から、指定されたグロブ・パターンに対して最大数のマッチが行われます。 rules:exists
一致数がrules:exists
最大 rules:exists
値を超える場合rules:exists
、パラメータは rules:exists
true
を返します。リポジトリ内のファイル数によっては、スキャナがプロジェクトをサポートしていなくても SAST ジョブがトリガーされることがあります。このイシューの詳細については、rules:exists
ドキュメントを参照してください。
SpotBugs UTF-8 マッピング不可能文字エラー
これらのエラーは、SpotBugsのビルドでUTF-8エンコーディングが有効になっておらず、ソースコードにUTF-8文字がある場合に発生します。このエラーを修正するには、プロジェクトのビルドツールでUTF-8を有効にしてください。
Gradle ビルドの場合は、build.gradle
ファイルに以下を追加してください:
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
Maven ビルドの場合は、以下をpom.xml
ファイルに追加します:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
SpotBugs エラー:Project couldn't be built
もしジョブがビルドステップで “Project couldn’t be built” というメッセージとともに失敗する場合、それはジョブが SpotBugs にデフォルトツールに含まれていないツールでのビルドを要求している可能性が高いです。SpotBugs のデフォルトツールの一覧は、SpotBugs の asdf dependencies を参照してください。
解決策はプリコンパイルを使うことです。プリコンパイルによって、SpotBugs が必要とするイメージがジョブのコンテナで利用できるようになります。
Flawfinder エンコードエラー
これは、Flawfinder が無効な UTF-8 文字に遭遇したときに発生します。これを修正するには、プロジェクト内のすべてのソースコードを UTF-8 文字エンコーディングに変換してください。これはcvt2utf
またはiconv
を使ってプロジェクト全体、またはbefore_script
機能を使ってジョブごとに行うことができます。
Semgrepの速度低下、予期しない結果、その他のエラー
Semgrepの速度が遅い、偽陽性や偽陰性のレポーターが多い、クラッシュする、失敗する、その他のエラーが発生する場合は、GitLab SASTのトラブルシューティングのSemgrepのドキュメントを参照してください。