Klocwork Jenkins CI プラグイン

Klocwork Plugin for Jenkins には、継続的インテグレーション環境または継続的展開環境の一部として、業界有数の静的コード解析を自動化する簡単な方法が用意されています。

Restriction: 2023 年 1 月現在、このプラグインには Klocwork 2022.1 以前のバージョンとの互換性はありません。

スピードが要求される DevOps や継続的デリバリ (CD) の活動を静的解析ツールでサポートする手段として、当社のプラグインには「Diff」メカニズムなどの付加的な機能が付属しています。Diff メカニズムはユーザーのバージョンコントロールシステムに基づいたもので、直近の変更セットで変更されたファイルのみを解析します。このメカニズムは、定期的な完全解析実行を生成するためにも使用できます。このプラグインは追加設定なしに Git をサポートし、他の SCM もすべて最小限のセットアップでサポートします。このプラグインにより、Klocwork ではクライアントツールを利用して差分解析を実行できます。

前提条件
  • 最小限の Jenkins コアバージョン: 1.614
  • Jenkins サーバーは、Java 1.8 JRE で実行する必要があります
  • Klocwork の CI ツールとビルドツールをビルドマシンにインストールまたは展開する必要があります (これらのパッケージの両方に同じインストールディレクトリを使用することをお勧めします)
  • 差分解析を使用するには、kwciagent ライセンスが必要です。Reprise (RLM) ライセンスが必要です。

Klocwork CI プラグインのインストール

  1. Jenkins サーバーにアクセスし、[Jenkins の管理] > [プラグインの管理] の順にクリックします。
  2. [使用可能] タブをクリックし、フィルターボックスに「Klocwork」と入力します。検索結果「Klocwork プラグイン」が表示されます。別の方法として、Klocwork サポートポータルから Klocwork Jenkins CI プラグインパッケージをダウンロードすることもできます。
  3. チェックボックスを選択し、[すぐにダウンロードして再起動後にインストールする] をクリックします。Jenkins が再起動すると、[インストール済み] タブにプラグインが表示されます。

プラグインの設定

  1. サイドバーの [Jenkins の管理] をクリックし、[システムの構成] を選択します。
  2. [Klocwork] セクションで、定義する Klocwork サーバーごとにサーバー URL を入力し、名前を指定します。ライセンスサーバーの設定は空のままにしてください。Klocwork ツールがポータルから自動的にライセンスサーバーの場所を取得するからです。
  3. オプション: 下部にある [詳細] ボタンをクリックし、<server_install>/bin/ ディレクトリの PATH を指定します。これにより、Klocwork CI ツールと、後で Jenkins ジョブを作成するときに必要となるビルドツールにアクセスできるようになります。

    Klocwork bin ディレクトリが PATH に設定されている場合、この操作は必要ありません。

  4. [保存] をクリックします。

ソースコード管理システムへの接続

希望する SCM を使用して Jenkins にソースコードをインポートするには、次の手順でリポジトリの場所を Jenkins に指示する必要があります。
  1. [構成] で、[ソースコード管理] を選択します。
  2. [Git] または [Subversion] のオプションを選択します。
  3. リポジトリの URL と必要な資格情報を入力します。
  4. オプション: CI ビルドが引き出す特定のブランチを指定することもできます。

ビルド環境を構成する

以下に示すように、プラグインが接続して値 (Klocwork サーバーの URL、プロジェクト名、ライセンス設定など) を取得できるように、環境を構成する必要があります。

  1. [ビルド環境] で、[Klocwork - ビルド環境設定] チェックボックスを選択します。
  2. [Klocwork サーバー構成] ドロップダウンメニューから、以前に構成した Klocwork サーバーの名前を選択します。
  3. 解析する Klocwork プロジェクトの名前を入力します。この名前は、指定した Klocwork サーバー上のプロジェクト名と一致する必要があります。
  4. PATH に Klocwork bin ディレクトリが指定されていない場合は、[Klocwork インストール構成] 用のドロップダウンメニューをクリックし、以前に構成した Klocwork サーバーインストールディレクトリのパスを表している名前を選択します。
    PATH に Klocwork bin を以前に設定していた場合、このステップは自動的に完了します。
  5. オプション: ltoken のパスがデフォルトの場所でない場合、ltoken のパスを入力します。これを入力しないと、プラグインは Klocwork サーバーに対する認証を行うことができません。

    Important: kwauth が実行される場合、ltoken ファイルは Klocwork ディレクトリ内にのみ存在します。Jenkins ジョブで Klocwork ディレクトリ内でそれを見つけるには、Jenkins を実行しているのと同じアカウントを使用して kwauth が実行されている必要があります。

完全解析を実行してベースラインを作成する

Jenkins の [ビルド] タブで、[Add build step] ボタンをクリックし、以下のビルドステップを追加します。

  1. ステップ 1 (CI/完全) - ビルド情報のキャプチャ: Klocwork build specification (ビルドスペック) 生成ツールを実行して、プロジェクトについてのコンパイル情報をキャプチャします。Klocwork build specification (ビルドスペック) 生成ツールと共に、プロジェクトのビルドコマンドが指定されていることを確認する必要があります。
    Build Spec (ビルドスペック) 生成コマンドが実行される場所から作業ディレクトリを指定できます。これは、ワークスペースに複数のプロジェクトがあり、ワークスペース内に存在する特定のプロジェクトの build specification (ビルドスペック) をキャプチャする場合に役立ちます。
  2. ステップ 2 (完全) - 解析の実行: ビルドに対して kwbuildproject を実行し、完全統合解析を実施します。このステップでは、Klocwork build specification (ビルドスペック) の場所 (上記のステップ 1 でビルドスペックの出力場所を指定した場合は必須) と、テーブルディレクトリの場所を指定できます。
  3. ステップ 3 (完全) - 解析結果のロード: 完全統合解析の結果を Klocwork サーバー上のデータベースにロードします。テーブルディレクトリの場所を指定します。[Klocwork トレンドチャートの表示] オプションを有効にすることもできます。Klocwork トレンドチャートは、プロジェクトの健全性の追跡に役立つ CI ビルドのトレンドチャートを生成します。
    Klocwork トレンドチャートを表示すると、トレンドチャートクエリで指定された欠陥のないものを含むすべての重大度ラベルが表示されます。
  4. 解析 (完全) 後 - クロスプロジェクト指摘の同期 (オプション): プロジェクトフィルター (これは同期中に処理する必要があるプロジェクトを決定する) と直近の同期日に基づいて、さまざまなプロジェクトにわたって指摘の同期をとります。
  5. 解析 (完全/CI) 後 - ビルド失敗条件 (オプション): 優先するビルド失敗条件を設定します。ビルド後アクションによって、プラグインは特定のしきい値に基づいてビルドを失敗、不安定、または合格とマークできます。

    Tip: [レポート結果] を選択して、Klocwork ダッシュボードのためのリンクを Jenkins に追加します。このダッシュボードでは、プロジェクトの統合解析指摘を確認できます。

  6. ジョブを保存します。
  7. Klocwork サーバー上に関連するプロジェクトが存在することを確認します。
  8. [すぐに構築] をクリックします。
差分解析の実行

Important: 増分差分解析を実行するには、kwciagent ツールがインストールされ、使用可能な kwciagent ライセンスが存在している必要があります。適切なライセンスがない場合は、担当のアカウントマネージャーまたは Klocwork カスタマーサポートにお問い合わせください。

Jenkins の [ビルド] タブで、[Add build step] ボタンをクリックし、以下のビルドステップを追加します。

  1. ステップ 1 (CI/完全) - ビルド情報のキャプチャ: Klocwork build specification (ビルドスペック) 生成ツールを実行して、プロジェクトについてのコンパイル情報をキャプチャします。
  2. Klocwork - ステップ 2 (CI) - 差分解析の実行: 最近変更されたコードを解析するために、CI ビルドに対して kwciagent が実行されます。
    最初の CI ビルドで、[変更されたファイルのみを解析] オプションが選択されている場合、「Gitコミット変数 <your git message> が設定されていません」という警告が表示され、完全な CI ビルドが実行されます。後続のビルドごとに、このオプションは、前回のコミットと比べて変更されているすべてのファイルの名前が含まれるファイル (デフォルトの名前は 'diff_file_list') を生成します。
  3. 解析 (完全/CI) 後 - ビルド失敗条件 (オプション): 優先するビルド失敗条件を設定します。ビルド後アクションによって、プラグインはビルドを失敗 (デフォルト) または不安定 ([不安定として失敗] オプションが選択されている場合) としてマークできます。[変更されたファイルのみをチェック] オプションを選択して、指定した差分ファイル内でビルドがファイルのみをチェックするように指定することもできます。デフォルトでは、diff_file_list.txt ファイルが使用されますが、必要に応じて、[Diff File List] フィールドで代替ファイルを指定できます。

    Tip: [レポート結果] を選択して、Klocwork 解析結果のためのリンクを Jenkins に追加します。このオプションを使用すると、Jenkins で特定のビルドをクリックし、各ビルドの指摘の詳細トレースを表示できます。

  4. ジョブを保存します。
  5. Klocwork サーバー上に関連するプロジェクトが存在することを確認します。

    データはサーバーにアップロードされませんが、プロジェクトの構成情報を使用して解析が実行されます。

  6. [すぐに構築] をクリックします。

指摘の引用 (CI)

[レポート結果] を選択してビルド失敗条件を設定した場合、Jenkins でサイドバーから [Klocwork 解析結果] を選択すると、指摘のリストが見つかります。指摘ごとに、[編集] ボタンをクリックして引用し、ステータスを追加します。

指摘を引用するには、Klocwork サーバーで認証される必要があります。[編集] を初めてクリックすると、Klocwork ポータルのユーザー認証情報を入力するように求められます。認証は、ブラウザーを閉じるまで、または手動でログアウトするまで、保持されます。

例: zlib を使用したセットアップ (Freestyle プロジェクト)

小さなオープンソース圧縮ライブラリである 'zlib' に対して解析を実行し、Jenkins 構成をテストしてみましょう。
  1. Jenkins の Git プラグインをダウンロードします。[プラグインの管理] ページで「Git プラグイン」を検索し、それをインストールして Jenkins を再起動します。
  2. Jenkins でプロジェクトを作成します。左側のサイドバーで [新規アイテム] をクリックし、[Freestyle プロジェクト] を選択します。ジョブに名前を指定し、[OK] をクリックします。
    このプラグインは、パイプラインジョブもサポートします。
  3. [ソースコード管理] までスクロールし、[Git] を選択します。
  4. [リポジトリ URL] に、「https://github.com/madler/zlib」と入力します。
  5. [構築するブランチ] に、「*/master」と入力します。
  6. [ビルド環境] をクリックし、[Klocwork - ビルド環境設定] を選択し、システムに適した設定を追加します。
  7. [ビルド][Add build step] をクリックし、以下のステップを追加します。
    • Linux の場合: シェルを実行する
    • Windows の場合: Windows バッチコマンドを実行する
    • ステップ 1 (CI/完全) - ビルド情報のキャプチャ: デフォルトで、kwinject が使用されます。'make' などのビルドコマンドも指定する必要があります。
    • ステップ 2 (完全) - 解析の実行
    • ステップ 3 (完全) - 解析結果のロード
  8. Execute shell:./configure にコマンドを追加します (これは zlib 用の make ファイルを構成します。)
  9. [保存] をクリックします。
  10. kwadmin create-project –-url http://<kw server host>:<port number>/zlib を実行し、プロジェクトを作成します。
  11. [すぐに構築] をクリックしてジョブを実行します。ジョブの実行が完了するのを待ちます。ジョブの進捗を監視するには、ビルド番号にマウスを合わせ、表示される小さな矢印をクリックし、[コンソール出力] をクリックします。
  12. Jenkins ジョブが完了したら、Klocwork ポータルにログインして解析結果を確認できます。

例: パイプラインジョブの設定

パイプラインジョブは、Jenkins ファイルを使用して構成されます。特定のステップを生成するには、さまざまな Klocwork ステップ用のスクリプトブロックが事前定義されているスニペットジェネレーターツールを使用できます。
  1. Jenkins で、新しいパイプラインジョブを作成し、プロジェクトから [パイプライン構文] を選択します。
  2. ステップ (「ビルド情報のキャプチャ」など) を選択し、[パイプラインスクリプトの生成] をクリックします。
  3. パイプラインジョブに加えるステップごとに、ステップ 2 を繰り返します。どのステップも、最終的な Jenkins ファイルに加える必要があります。例:
    pipeline {
       agent any
        
       environment {
            KLOCWORK_URL = "http://localhost:8080"
            KLOCWORK_PROJECT = "zlib-pipeline"
            KLOCWORK_LICENSE_HOST = "repriselm-server"
            KLOCWORK_LICENSE_PORT = "27000"
            KLOCWORK_LTOKEN = ""       
        }
        
       stages {
           stage('Get src from git') {
                 steps {
                    git 'https://github.com/madler/zlib.git'
                 }
            }
             
            stage('Klocwork Build') {
                 steps {
                      
                        klocworkBuildSpecGeneration([additionalOpts: '', buildCommand: 'c:\\dev\\zlib-git.bat', ignoreErrors: true, output: 'kwinject.out', tool: 'kwinject'])
                     
                 }
            }
               
            stage('Klocwork Analysis') {
                steps {             
                         klocworkIntegrationStep1([additionalOpts: '', buildSpec: 'kwinject.out', disableKwdeploy: true, duplicateFrom: '', enabledCreateProject: true, ignoreCompileErrors: true, importConfig: '', incrementalAnalysis:       false, tablesDir: 'kwtables'])
                                     
                 }
              }
               
              stage('Klocwork Db-load') {
                 steps {                
                         klocworkIntegrationStep2 reportConfig: [displayChart: true, query: 'status:Analyze'], serverConfig: [additionalOpts: '', buildName: '', tablesDir: 'kwtables']             
                 }
              }
               
              stage('Build Failure Conditions') {
                 steps {                
                         klocworkFailureCondition([enableCiFailureCondition: true, failureConditionCiConfigs: [[withDiffList: true, diffFileList: 'my_list.txt', enableHTMLReporting: true, name: 'one', reportFile: '', threshold: '1',]]])
                      
                 }
              }            
       }           
    }
  4. スクリプトテキストを追加し、[保存] をクリックしてパイプラインジョブを終了します。
  5. パイプラインビルドを実行した後に、ジョブに含まれるすべてのステージを表すビューが表示されます。