LoginSignup
1
3

More than 5 years have passed since last update.

TravisとCoverity ScanでJavaScriptコードの静的解析

Last updated at Posted at 2017-10-27

まとめ

ポイントは2つ.

  • .travis.ymlのbuild_command"--no-command --fs-capture-search $TRAVIS_BUILD_DIR"を指定
  • Coverity ScanのAnalysis Settingsからnode_modulesフォルダー以下を解析対象外に設定1

Coverity Scan

オープンソースプロジェクトなら無料で静的解析サービスを利用することができます.

アカウントの作り方やプロジェクトの登録方法などは以下のページに記載されています.

試しにmasnagam/wd-runjsで使ってみようと思い,以下のように.travis.ymlを記述しました.

addons:
  coverity_scan:
    project:
      name: "masnagam/wd-runjs"
      description: "Build submitted via Travis CI"
    notification_email: masayuki.nagamachi@gmail.com
    build_command_prepend: ""
    build_command: ""
    branch_pattern: "*"

JavaScriptコードでコンパイル不要なのでbuild_commandを空にしました.

しかし,Travisのログを見ると動作していないようでした.

ERROR: COVERITY_SCAN_BUILD_COMMAND must be set

build_commandは空ではいけないみたいです.

ツールの使い方を確認すると

cov-build --dir cov-int --no-command --fs-capture-search <path/to/source/code>

となっており,どうやら--no-command以降のオプションを指定する必要があるようです.

成功すると,以下のようなログが表示されます.

Running Coverity Scan Analysis Tool...
Coverity Build Capture (64-bit) version 2017.07 on Linux 4.4.0-93-generic x86_64
Internal version numbers: c7e331b562 p-milo-push-30112.651
[STATUS] Running filesystem capture search...
[WARNING] Path '/home/travis/build/masnagam/wd-runjs/cov-int' looks like an idir. Skipping filesystem capture on it.
[STATUS] Emitting non-source files from filesystem capture
[STATUS] Emitting 4037 source files from filesystem capture
|0----------25-----------50----------75---------100|
****************************************************
Emitted 3935 JavaScript compilation units (99%) successfully
...

後はCoverity Scanで解析順番待ち...

Last Build Status: In-queue. Your build is in the queue to be analyzed. There are 76 builds ahead of it.

Travisでの実行時間が長い..(未解決)

実行してみるとわかりますが,この2つのオプションだけだとすごく時間がかかります.恐らく,node_modulesもスキャン対象になっているものと思われます.

node_modulesを除外するための方法を探したのですが,コマンドのヘルプは使い物になりませんし,役に立つドキュメントもツールには含まれていなかったので,これ以上どうすることもできませんでした.

対象ファイルをnode_modulesを含まない特定フォルダー内に集めることができるなら,--fs-capture-search $TRAVIS_BUILD_DIR/path/to/folderとすることで実行時間を短縮できるかもしれません(試してはいません).ただし,binなどが含まれるプロジェクトでは,すべてのファイルを静的解析の対象にはできないかもしれません.

対象ファイルをどこかのフォルダーに一時的にコピーしてコマンド終了時に削除できればいいのですが,build_command_prependbuild_commandしかないので,一時フォルダー削除するのは無理,もしくは少しトリッキーなことをする必要があるかもしれません(試していません).

Coverity Scanでの解析時間が長い..(解決済?)

解析順番がまわってくるまで数時間.その後,解析が始まって一日経っても終わらない..

設定の問題かと考え,一度解析を中断し,Analysis Settingsを変更してみました.

coverity_scan_analysis_settings.png

Travisで"Restart build"を実行し,待つこと一晩.無事解析完了しました(たまたま早く解析が完了したのかもしれませんが,因果関係を検証する予定はありません).

"View Defects"を見るには,更に1,2営業日待てとのこと.プロジェクト一覧への反映も解析完了時ではないみたいです.



  1. 因果関係は検証していません.設定変更後に再実行すると,早く解析が終わったというだけです. 

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3