Blue OceanとPipelineを使った継続的インテグレーションのご紹介(デモ動画付き)


今回はJenkins 2.xのバージョンで登場した新機能とParasoft製品を使った継続的インテグレーションをご紹介します。

変更をコミットしたらすぐにビルドやテストを実行することで、そのコミットに問題がないことを自動的に確認することができます。たとえコミットしたコードに問題があったとしても、すぐに自分の変更だけを修正することができるので、手戻りを減らすことが可能です。

今回は、Blue OceanプラグインとPipelineプラグインを使って実装した Jenkins のCIパイプラインをデモ動画にてご紹介します。このデモでは、JenkinsのCIパイプラインをJenkinsfileに記述し、ソースコードと一緒にGitのリポジトリに保存しています。

以下のような構成です。

パイプラインの内容はJenkinsfileにコードとして記述しているので、プロジェクトのコードと一緒にバージョン管理できます。また、JenkinsからGitのリポジトリを指定するだけで、パイプラインを構築できるのでジョブの設定がとても楽に行えます。

次の動画ではリポジトリを指定して、ビルド→静的コード解析→単体テスト(ユニットテスト)を実行するまでの流れです。Blue OceanのUIを使ってパイプラインの作成を行っています。

(※実行に時間のかかる部分はカットしています。)

(動画は字幕による解説付きです。字幕をONにしてご覧ください。音声はありません。)

次にプロジェクトへ単体テスト(ユニットテスト)を追加していきます。単体テスト作成にはC++testを使用します。作成したテストはソースコードと同じように、リポジトリへコミットします。リポジトリのフック機能を使ってコミット毎にジョブが実行されように設定しているため、変更の単位でビルド→静的コード解析→単体テストが実行されます。

このデモでは、checkTemperatureという温度センサーの値を元にIoT機器をコントロールする関数の単体テストを作成しています。

C++testを使ってテストケースを作成すると、テストランナー、スタブコードなどが自動で生成されるのでテストの実装にかかる負担を減らすことができます。次の動画では温度が69℃の場合、70℃の場合、100℃の場合のように判定の境界値をテストしています。生成された単体テストコードをコミットすると、先程と同じようにビルド、静的解析、単体テストが実行されます。

(動画は字幕による解説付きです。字幕をONにしてご覧ください。音声はありません。)

動画では単体テストが失敗(Test Failed)していました。C++testで行った静的解析と単体テストの結果はParasoft DTPへ送られます。DTPはプロジェクト情報を見える化するダッシュボードツールで、Jenkinsから実行した静的解析や単体テストの情報を集約して表示してくれます。次の動画では、失敗した単体テストをDTPで確認し原因を確認します。

テスト結果とソースコードを確認した結果、関数の温度判定処理に誤りが見つかりました。判定処理を修正してコミットを行います。同じようにJenkinsのジョブが実行され、CIのパイプラインが正常に戻ったことがわかります。

(動画は字幕による解説付きです。字幕をONにしてご覧ください。音声はありません。)

以上、JenkinsのBlueOcean/PipelineとC++test、DTPを使った、CIのご紹介でした。