Jenkins とコンテナーを使用したスキャンの自動化の構成

HCL Harbor および HCL FlexNet Operations ポータル (FNO) から使用可能な HCL®AppScan® ソース コマンド行インターフェース (CLI) コンテナーを使用すると、AppScan® ソース の完全なインスタンスをインストールせずに、Jenkins での静的分析スキャンを自動化することができます。

コンテナーを使用したスキャンの主なステップは、以下のとおりです。
  1. アプリケーションの準備
  2. ランタイム環境の準備
  3. コンテナー・イメージからのスキャンの開始

前提条件

始める前に、ご使用の環境が以下の要件を満たしていることを確認してください。
  • Jenkins 環境 (Docker を備えた 1 つ以上の Linux エージェント/ホストを含む) がインストールされている。

    これが、CLI コンテナーを使用して静的分析スキャンを実行する対象となるシステムです。

  • AppScan® Source for Automation の有効なライセンスと、関連するライセンス・サーバー情報。

  • AppScan® ソース CLI コンテナー・イメージ

    HCL Harbor または HCL FNO から AppScan® ソース CLI コンテナー・イメージをダウンロードします。有効なライセンスがあると、使用している HCL ID にこれらの場所へのアクセス権限が付与されます。

  • AppScan® ソース CLI スクリプト

    Jenkins パイプライン内のコンテナーを使用してスキャンするには、スクリプトが必要です。

  • コンテナーからの Jenkins ホスト/エージェント上のコンテンツへのアクセス:

    スキャン対象のアプリケーションは、スキャンを実行している Jenkins ホストからアクセス可能である必要があります。

    注: ボリューム・マッピング (コンテナー・ホスト上のパスからコンテナー内のパスへのマッピング) は、スキャンのインスタンス化時にこの目的で使用されます。

スキャン対象のアプリケーションの準備

以下のいずれかを使用して、スキャン用のアプリケーションを準備します。
  • paf/ppf ファイル
  • フォルダー・スキャン
paf/ppf ファイルを使用したスキャン対象のアプリケーションの準備
  1. AppScan® ソース がインストールされている Linux システム上で、HCL®AppScan® Source for Analysis クライアントを使用して paf/ppf ファイルを生成します。

    paf および ppf ファイルが、スキャン対象のアプリケーションのルートにあることを確認します。

  2. アプリケーション・ファイルと paf/ppf ファイルが、Jenkins ホスト/エージェントからアクセス可能であることを確認します。

    例えば、アプリケーションが Jenkins ホスト/エージェント上のルート・パス /usr/user1/SampleApp でアクセス可能である場合、paf/ppf ファイルは /usr/user1/SampleApp/SampleApp.paf/usr/user1/SampleApp/SampleApp.ppf にあります。

  3. コンテナーから確認されるボリュームの名前を決定します。
    例えば、ホスト上の /usr/user1 をコンテナー内の cvol にマップします。
    注: ボリューム・マッピングは、コンテナーで CLI を実行するときに指定されます。
  4. CLI スクリプトを作成します。例えば、/usr/user1/SampleAppSampleApp.script があります。
    この例では、スクリプトは cvol パスを使用してアプリケーション・コンテンツにアクセスするようにコンテナーに指示します。リストされているコマンドは、AppScan® ソース CLI で使用されるコマンドです (「手動による介入のないスキャン」)。
    login …
    oa /cvol/SampleApp/SampleAll.ppf
    scan
    …
    logout
フォルダー・スキャン用のアプリケーションの準備:
  1. アプリケーション・ファイルが、Jenkins ホスト/エージェントからアクセス可能であることを確認します。

    例えば、アプリケーションが Jenkins ホスト/エージェント上のパス /usr/user1/SampleApp でアクセス可能です。

  2. コンテナーから確認されるボリュームの名前を決定します。
    例えば、ホスト上の /usr/user1 をコンテナー内の cvol にマップします。
    注: ボリューム・マッピングは、コンテナーで CLI を実行するときに指定されます。
  3. CLI スクリプトを作成します。例えば、/usr/user1/SampleAppSampleApp.script があります。
    login …
    oa /cvol/SampleApp/SampleAll.ppf
    scan
    …
    logout

Jenkins ホスト/エージェントでのランタイム環境の準備

Jenkins ホスト/エージェントでランタイム環境を準備するには、以下のようにします。
  1. AppScan® ソース CLI コンテナーを HCL FNO から Jenkins ホストにダウンロードするか、HCL Harbor から直接アクセスします。

    HCL FNO からダウンロードした場合は、docker load コマンドを使用して CLI コンテナー・イメージをロードします。

  2. スキャン中に CLI コンテナーで使用可能にする必要がある環境変数のリストを含むファイル (例えば、env.list) を作成します。必要な情報の一部を以下に示します。
    AS_INSTALL_MODE=standalone
    AS_LICENSE_TYPE=CLS
    AS_LICENSE_SERVER_ID=<specify the license server ID>
    パラメーターの完全なリストは、こちらから見つけることができます。

コンテナー・イメージを使用した静的分析スキャンの開始

以下の 2 つの方法のいずれかでスキャンを開始します。
  • HCL Harbor からのコンテナー・イメージの使用
  • FlexNet Operations (FNO) からのコンテナー・イメージの使用

HCL Harbor からのコンテナー・イメージを使用したスキャンの開始

Linux シェル・コマンドまたは Docker Linux プラグインを使用してスキャンを実行します。
  • Linux
    以下のシェル・コマンドを Jenkins パイプラインに組み込んで、SampleApp をスキャンします。Jenkins ホスト/エージェント上の /usr/user1 は、コンテナー内の cvol にマップされることに注意してください。CLI コンテナーの目的のバージョンに基づいて、バージョン・ストリングを調整します。
    sh "docker run --rm --volume /usr/user1:/cvol --env-file /cvol/SampleApp/ env.list hclcr.io/appscan/appscan-src-cli:10.1.0 script /cvol/SampleApp/SampleApp.script
  • Docker Jenkins プラグイン
    以下の Docker Jenkins プラグイン API を Jenkins パイプラインに組み込んで、SampleApp をスキャンします。Jenkins ホスト/エージェント上の /usr/user1 は、コンテナー内の cvol にマップされることに注意してください。CLI コンテナーの目的のバージョンに基づいて、バージョン・ストリングを調整します。
    docker.image('hclcr.io/appscan/appscan-src-cli:10.1.0').run('--name container-SampleApp --rm –-volume /usr/user1:/cvol --env-file /cvol/SampleApp/env.list script /cvol/SampleApp/SampleApp.script')
    
    sh "docker logs --follow container-SampleApp"

HCL FNO からのコンテナー・イメージを使用したスキャンの開始

AppScan® ソース CLI コンテナー・イメージは、HCL FNO でアーカイブ形式 (tar.gz) で使用できます。スキャンのために使用する前に、コンテナー・イメージをロードする必要があります。
  1. コンテナー・イメージを Jenkins ホスト/エージェントにダウンロードします。例えば、/appscansrc/appscan-src-cli-10.1.0.tar.gz です。

    使用する前に、コンテナー・イメージをロードする必要があります

  2. Linux シェル・コマンドまたは Docker Linux プラグインを使用してスキャンを実行します。
    • Linux
      以下のシェル・コマンドを Jenkins パイプラインに組み込んで、SampleApp をスキャンします。Jenkins ホスト/エージェント上の /usr/user1 は、コンテナー内の cvol にマップされることに注意してください。CLI コンテナーの目的のバージョンに基づいて、バージョン・ストリングを調整します。
      docker load -i /appscansrc/appscan-src-cli-10.1.0.tar.gz
      
      sh "docker run --rm --env-file /cvol/SampleApp/env.list --volume /usr/user1:/cvol appscansrc/appscan-src-cli:10.1.0 script /cvol/SampleApp/cli.script"
    • Docker Jenkins プラグイン
      以下の Docker Jenkins プラグイン API を Jenkins パイプラインに組み込んで、SampleApp をスキャンします。Jenkins ホスト/エージェント上の /usr/user1 は、コンテナー内の cvol にマップされることに注意してください。CLI コンテナーの目的のバージョンに基づいて、バージョン・ストリングを調整します。
      docker.image(‘appscan-src-cli:10.1.0').run('--name container-SampleApp --rm –-volume /usr/user1:/cvol --env-file /cvol/SampleApp/env.list script /cvol/SampleApp/SampleApp.script')
      
      sh "docker logs --follow container-SampleApp"