近年、多くのソフトウェア開発で採用されるようになったオープンソースソフトウェアの「Docker」ですが、組み込みソフトウェア開発ではビルド環境が Windows の場合も多いため、必ずしも Docker を採用できるとは限りません。
一方で、組み込みソフトウェア開発のプラットフォームとして Linux が採用されることも多くなってきており、 Docker コンテナ上で開発しているという開発者も少しずつですが増えてきています。 Linux を採用した組み込みソフトウェア開発に、 Docker をうまく活用することで、さまざまな効果が見込めます。容易に CI にコンテナを活用できる点もその一つです。コンテナ化によるメリットについては過去のブログでも紹介していますので、ご興味のある方はぜひご覧ください。
組み込みソフトウェア開発における CI でのコンテナ活用
組み込みソフトウェア開発の場合、デプロイの自動化までは簡単に実現できないケースもありますが、ビルドの自動化は簡単に実現でき、それだけでも CI を導入することで大きな効果が見込めます。さらにコンテナを活用すると、複数のプロジェクトでビルド環境が違う場合であっても、コンテナ自体が独立しているためビルド環境の要件や依存パッケージが競合することはありません。 1 つの CI サーバーで複数プロジェクトの CI を実現できるということです。また、複数のビルド環境をより少ないリソースで実行できるため、リソースの効率的な活用が可能になります。
[ Jenkinsジョブの例 ]
- チェックアウト
- 構成管理ツール( Git や Subversion など)から最新のソースコードをチェックアウト
- Docker image 取得
- Docker Hub やプライベートレジストリからイメージを取得
- Docker コンテナ起動
- チェックアウトした最新のソースコードをマウントしてコンテナ起動
- ビルド
- コンテナ内のビルドツールチェインを使用してビルド確認
- Docker コンテナ破棄
- 終了処理としてコンテナを破棄
このようにコンテナ化された組み込みソフトウェア開発環境に対し、CIでビルドを自動化することができます。さらに、Jenkins を利用した CI 環境と Parasoft 社の製品である Parasoft C++test を併せて利用することで、静的解析や単体テストも自動化することができます。
コンテナ上で静的解析・単体テスト実行
まず、コンテナ上の組み込みソフトウェア開発環境を利用して、最も簡単にテストを行う方法は、テストツールもコンテナ上にインストールしておくことです。開発者によるテストツールの インストールや初期セットアップなどの環境構築の作業を減らすことができます。
テストツールがコンテナ上で動作可能か、ライセンス使用許諾に違反していないかはテストツールに依存しますが、 Parasoft C++test はどちらも問題ありません。さらに、C++test はコンテナ上での利用だけでなく、コンテナ外の C++test を用いて、コンテナ上にある開発対象の静的解析や単体テストを実行できます。
この方法では Jenkins などの CI サーバーに C++test を 1 つインストールしておくだけで、複数のプロジェクトに対してテストを実行できます。また、コンテナ側に対するセットアップを行わないため、既に作成済みのビルドを行うジョブにテストのステップを加えるだけで簡単に C++test によるテスト実行を組み込むことができます。
まとめ
今回のブログでは開発で Docker コンテナを活用するメリットや、 CI にテスト実行を追加するための 1 つの方法をご説明しました。
参考資料では、Docker の基本的な説明や、組み込みソフトウェア開発で Docker コンテナ活用イメージ、 Jenkins および Docker と親和性の高い C++test を利用した運用など、今回のブログの内容をより細かく丁寧に説明していますので、ご興味のある方はぜひご覧ください。
【資料ダウンロード】組み込みソフトウェア開発/テストでのDockerコンテナ活用とそのメリット
Parasoft C++testについて
C/C++言語対応静的解析・単体テストツール Parasoft C++test
C++testは、静的解析(コーディング規約チェック/フロー解析)、単体テスト、カバレッジの計測、実行時メモリエラー検出、 効率的な運用や規格順守を補助する機能などを搭載したC言語/C++言語対応のオールインワンテストツールです。
MISRA C/C++、AUTOSAR C++14コーディングガイドライン、CERT C/C++コーディングスタンダードなどで定められた規約に基づくコーディングの支援や、単体テストやアプリケーション実行時に自動的にカバレッジを計測するなど、さまざまな要件に対応し、ソフトウェアの品質向上とテスト工数の大幅削減をサポートします。