コンテナーによる Klocwork の設定 (Linux)
Klocwork 解析を実行するためのコンテナーの設定
前提条件:
- サーバーが実行中の場合はポートを開きます
- 実行するアンダーライニングシステムに応じて、以下のいずれかの docker ファイルを選択してビルドします。
RUN wget
URL の場所をkwbuildtools
パッケージの有効な場所に置き換えます。示された行に、プロジェクトをビルドするために必要な追加の依存関係を追加できます。
例: Debian ベースの Linux (Ubuntu 20.04 など) で Klocwork 解析を実行する:
FROM ubuntu:20.04 # Install Klocwork Dependencies RUN dpkg --add-architecture i386 RUN apt update RUN apt install -y lib32ncurses6 lib32ncurses6 libncursesw5:i386 numactl libaio1 lsb-core libc6:i386 libgcc1:i386 # Install compiler dependencies. This will depend on the source being built # This example installs gcc/g++ 8 RUN apt install -y build-essential gcc-8 g++-8 gcc-8-multilib g++-8-multilib # Get Klocwork build tools package and unzip to a location # This example uses 'wget' to get the installer from an internally hosted Klocwork Portal RUN apt install -y wget unzip RUN mkdir /klocwork WORKDIR /klocwork RUN wget http://klocwork.<yourURL.com>:8080/portal/downloads/kwbuildtools.20.2.0.89.linux64.zip && unzip kwbuildtools.20.2.0.89.linux64.zip && rm kwbuildtools.20.2.0.89.linux64.zip
例 2: yum ベースの Linux (Fedora 32 など) で Klocwork 解析を実行する:
FROM fedora:32 # Install Klocwork Dependencies RUN yum update -y RUN yum install -y redhat-lsb-core.i686 libaio numactl-libs libnsl libnsl.i686 glibc.i686 libgcc.i686 # Install compiler dependencies. This will depend on the source being built # This example installs gcc/g++ RUN yum install -y gcc-c++ # Get Klocwork build tools package and unzip to a location # This example uses 'wget' to get the installer from an internally hosted Klocwork Portal RUN yum install -y wget unzip RUN mkdir /klocwork WORKDIR /klocwork RUN wget http://klocwork.<yourURL.com>:8080/portal/downloads/kwbuildtools.20.2.0.89.linux64.zip && unzip kwbuildtools.20.2.0.89.linux64.zip && rm kwbuildtools.20.2.0.89.linux64.zip
上記のいずれかの例を完了した後、イメージをビルドします。
docker build --tag klocwork-buildtools:20.2 .
これにより、ベースイメージ klocwork-buildtools:20.2
がビルドされます。
データの永続性
Klocwork 解析を実行する際に、Klocwork ビルドスペックと解析データ (buildspec、tracefiles、tables、.kwlp/.kwps、projects_root など) をコンテナーの外部に保存することをお勧めします。kwbuildproject コマンドで --increment
パラメーターを使用する場合は、今後はどの解析でも --tables-directory
を維持する必要があります。同様に、ネイティブビルドが増分である場合、今後はどのビルドでもビルドスペックを維持する必要があります。次の例では、これらのファイルをホストマシン上の /project/klocwork_data
フォルダーに出力します。イメージがビルドされたら、次のものでコンテナーを実行できます。
docker run --rm -v /project/src:/project/src -v /project/klocwork_data:/klocwork_data klocwork-buildtools:20.2 sh -c "cd /project/src && /klocwork/kwbuildtools/bin/kwinject -w -o /klocwork_data/kwinject.out make && /klocwork/kwbuildtools/bin/kwbuildproject --url http://klocwork.<yourURL.com>:8080/<project> -o /klocwork_data/tables kwinject.out -f && kwadmin load --url http://klocwork.<yourURL.com>:8080 load <project> /klocwork_data/tables"
これにより、解析するプロジェクトと Klocwork 出力データがコンテナーの外部マウントにマウントされます。分かりやすくするために、保守を目的として sh -c "..."
セクションをスクリプトファイルに抽出できます。たとえば、次の build.sh
ファイルを作成します。
#!/bin/sh cd /project/src /klocwork/kwbuildtools/bin/kwinject -w -o /klocwork_data/kwinject.out make /klocwork/kwbuildtools/bin/kwbuildproject --url http://klocwork.<yourURL.com>:8080/<project> -o /klocwork_data/tables -f /klocwork_data/kwinject.out /klocwork/kwbuildtools/bin/kwadmin --url http://klocwork.<yourURL.com>:8080 load <project> /klocwork_data/tables
続いて、次を実行します。
docker run --rm -v /project/src:/project/src -v /project/klocwork_data:/klocwork_data klocwork-buildtools:20.2 --entrypoint build.sh
Klocwork サーバーを実行するためのコンテナーの設定
以下は、必要な Klocwork とコンパイラの依存関係をインストールするために実行が必要なコマンドの例と、Klocwork ビルドツールパッケージをインストールする方法です。
FROM ubuntu:20.04 # Install Klocwork Dependencies RUN dpkg --add-architecture i386 RUN apt update RUN apt install -y lib32ncurses6 lib32ncurses6 libncursesw5:i386 numactl libaio1 lsb-core libc6:i386 libgcc1:i386 # Install compiler dependencies. This will depend on the source being built RUN apt install -y build-essential gcc-8 g++-8 gcc-8-multilib g++-8-multilib # Get Klocwork build tools package and unzip to a location # This example uses 'wget' to get the installer from an internally hosted Klocwork Portal # Note: server install cannot be done as the root user. This will create a user 'klocwork' RUN apt install -y wget unzip RUN useradd -u 10066 -d /home -s /bin/bash klocwork && groupmod -g 1005 klocwork RUN mkdir /klocwork RUN chown -R klocwork:klocwork /klocwork USER klocwork WORKDIR /klocwork RUN wget <download_server>/kw-server-installer.20.2.0.89.linux64.sh RUN sh kw-server-installer.20.2.0.89.linux64.sh -a server KlocworkServer RUN rm kw-server-installer.20.2.0.89.linux64.sh
ここで、<download_server>
は Klocwork サーバーのインストールファイルの場所です。
次に、イメージを作成する必要があります。
docker build --tag klocwork-server:20.2 .
サーバーデータを維持するには、ホストマシン上に Klocwork サーバーの projects_root
フォルダーを保持するフォルダーを設定します。例: /data/klocwork/server_data
。フォルダーが設定されたら、上記の Dockerfile で設定されたグループ ID で作成込むためのパーミッションが付与される必要があります。この例では、グループ ID は 1005
です。
chown -R 1005:1005 /data/klocwork/server_data
サーバーは、対話型または非対話型の 2 つの方法で設定できます。以下の例では、Klocwork Web ポート 8086 と Klocwork データベースポート 3386 を使用していることに注意してください。
対話型
ドッカーにより、コンテナーを対話型モードで実行できます。これは、コンテナーの実行中にコンテナー内でコマンドを実行できることを意味します。これを行うには、次を実行します。
docker run -d -i -t -p 8086:8086 -v /data/klocwork/server_data:/klocwork/server_data --name klocwork_server klocwork-server:20.2
サーバーが実行されたら、次を使用してコンテナーに接続できます。
docker exec -t -i klocwork_server /bin/bash
コンテナーに接続されたら、サーバーを設定できます。
/klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root setup /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root set-service-property license host <license_host> /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root set-service-property klocwork port 8086 /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root set-service-property database port 3386 /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root start exit
非対話型
コンテナーを非対話型モードで実行する場合は、次を実行します。
docker run -d -p 8086:8086 -v /data/klocwork/server_data:/klocwork/server_data --name klocwork_server klocwork-server:20.2 --entrypoint server.sh
ここで、server.sh
は次のとおりです。
/klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root setup /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root set-service-property license host <license_host> /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root set-service-property klocwork port 8086 /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root set-service-property database port 3386 /klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root start tail -f /dev/null
サーバーが設定されたら、あとは kwservice start
コマンドを実行するだけです。
docker run -d -p 8086:8086 -v /data/klocwork/server_data:/klocwork/server_data --name klocwork_server klocwork-server:20.2 sh -c "/klocwork/server/bin/kwservice -r /klocwork/server_data/projects_root start && tail -f /dev/null"
Perforce はここでも役に立ちます。Klocwork によるコンテナーの設定または使用について支援が必要な場合は、静的コード解析プロフェッショナルサービスに問い合わせて、サービス契約による支援について相談してください。