mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[Veracode] JenkinsのパイプラインでVeracodeのアプリケーション診断を実行する

はじめに

JAVAアプリをビルドし、JenkinsのパイプラインでVeracodeのアプリケーション診断を実行してみます。
なお、フリースタイルプロジェクトではなく、パイプラインで実装します。



環境


事前準備

  • Veracode Platformで実施すること
    • API IDとSecretKeyを作成する
    • JARファイルのアップロード先となるアプリケーション(ガワみたいなもの)を追加する
      • アプリケーションの検査ポリシーのレベルや、Sandboxの使用可否を設定する
  • Jenkinsで実施すること
    • Veracode Scanプラグインを導入する
    • Jenkinsの認証情報にAPI IDとSecretKeyを登録する
      • 認証情報の種類はユーザ名とパスワードとする


Jenkinsパイプラインの設定

  • なるべく少ないオプションで実現しています
    • Jenkinsパイプライン内で、 Veracode Platformにアプリケーション(ガワみたいなもの)を追加したり、Sandboxを設定する事もできます
stage('VeracodePipelineスキャン') {
    steps {
        withCredentials([
            usernamePassword (
                // 認証情報をIDとSecretKeyに分割します
                credentialsId: '【認証情報のID】',
                usernameVariable: 'VERACODE_API_ID',
                passwordVariable: 'VERACODE_API_KEY'
            )
        ]) {
            veracode applicationName: '【アプリケーション名】',
            // コンソールにデバッグ情報を表示します
            debug: true,
            sandboxName: '【サンドボックス名】',
            // scanNameがスキャン結果の名前になります。毎回変わる値が含まれていると良いです
            scanName: "${BUILD_TAG}",
            // Scanの待ち時間(分) 
            timeout: 60, 
            // ワークスペースのルートディレクトリが基準のようです
            uploadIncludesPattern: '**/【ファイル名】.jar',
            vid: "${VERACODE_API_ID}",
            vkey: "${VERACODE_API_KEY}",
            // スキャンが終わるまで待ちます。また、スキャン結果がJenkinsパイプラインの結果に表示されます
            // trueを指定しない場合、Veracodeにアプリケーションのアップロードとスキャン指示を出して、次の処理に進みます。スキャン結果は、Veracode Plaformでの確認になります
            waitForScan: true
        }
    }
}


パイプラインの実行結果

  • スキャン結果
    • 6段階のSeverityで表示されます。


  • ログ
[Pipeline] withCredentials
Masking supported pattern matches of $VERACODE_API_ID or $VERACODE_API_KEY
[Pipeline] {
[Pipeline] veracode
Warning: A secret was passed to "veracode" using Groovy String interpolation, which is insecure.
         Affected argument(s) used the following variable(s): [VERACODE_API_KEY, VERACODE_API_ID]
         See https://jenkins.io/redirect/groovy-string-interpolation for details.
------------------------------------------------------------------------
Upload and Scan with Veracode Pipeline
------------------------------------------------------------------------

[Debug mode is on]

Can Fail Job: false

Timeout: 60

Version information:
VeracodeJavaAPI v22.1.9.3 cUnknown

HPI location: 
var/lib/jenkins/plugins/veracode-scan/WEB-INF/lib/veracode-scan.jar

Processing files in [remote] workspace: 
/var/jenkins/workspace/xxx

Performing scan from [remote] workspace?
true

Invoking the following command in remote workspace:
[xxx] $ java -jar /var/jenkins/veracode-scan/VeracodeJavaAPI.jar -action UploadAndScan -vid **** -vkey ******** -scantimeout 60 -appname 【アプリケーション名】 -createprofile false -sandboxname "Development Sandbox" -createsandbox false -version jenkins-xxx-22 -autoscan true -maxretrycount 5 -debug -filepath /var/jenkins/workspace/xxx.jar -useragent "VeracodeScanJenkins/22.5.17.2 (Jenkins/2.332.2; Java/Unknown)"
[2022.06.08 07:21:17.069] VeracodeJavaAPI v22.1.9.3 c17.0.3
[2022.06.08 07:21:17.070] Wrapper action: UploadAndScan
()
[2022.06.08 07:41:55.212] Requesting analysis info again in 60 seconds.
[2022.06.08 07:43:55.214] 
[2022.06.08 07:43:55.214] The status of the new analysis is "Results Ready".
[2022.06.08 07:43:55.216] Invoking API https://analysiscenter.veracode.com/api/4.0/summaryreport.do
[2022.06.08 07:43:55.216] Query string: build_id=xxx
[2022.06.08 07:43:55.216] Connecting to host: analysiscenter.veracode.com
[2022.06.08 07:43:55.322] Writing to request output stream
[2022.06.08 07:43:55.322] Close request output stream
[2022.06.08 07:43:55.322] Getting response status code from HTTP response message
[2022.06.08 07:44:08.371] Server returned HTTP response code: 200
[2022.06.08 07:44:08.371] Retry is not required
[2022.06.08 07:44:08.371] Connecting to response input stream
[2022.06.08 07:44:08.371] Reading response input stream
[2022.06.08 07:44:08.391] Close response input stream
[2022.06.08 07:44:08.604] 
[2022.06.08 07:44:08.604] The scan finished with policy status 'Pass'.
[2022.06.08 07:44:08.609] Wrapper return code 0 = Success
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }


参考

診断時間は早いのか遅いのか他と比較してないから分からないけど、JARファイル80MBで平均20分(試行回数10回)くらいでした。