継続的インテグレーションを使用したソフトウェアの開発と統合
継続的インテグレーション (CI) とは、コード変更を共有リポジトリに頻繁に統合する手法です。コードのビルド、テスト、パッケージ化などのアクティビティを自動化および標準化することにより、チームのスループットとソフトウェアの品質を向上します。たとえば、開発者が新しくコミットされた変更をリモート リポジトリにプッシュするたびに、継続的インテグレーション プラットフォームはテスト スイートを自動的に実行し、リモート リポジトリのターゲット ブランチで変更による競合が発生しないことを確認することができます。
継続的インテグレーションには次のようなメリットがあります。
ソフトウェアの問題を発生後すぐに検出し、修正。
コードのデバッグに必要なリソースを削減しながら機能を追加。
統合を継続的に行うことにより、統合と展開のオーバーヘッドを最小化。
ソフトウェアの状態および行われた変更を明確に伝達。
継続的インテグレーション ワークフロー
継続的インテグレーションを使用したソフトウェア開発の典型的なワークフローにはいくつかの手順が含まれます。
リモート リポジトリのクローンと機能ブランチの作成
ファイルの編集とローカル リポジトリへの変更のコミット
コミットされた変更のリモート リポジトリへのプッシュ (これにより、MEX ファイルのコンパイル、テストの実行、ツールボックスのパッケージ化など、自動化されたタスクのパイプラインが CI プラットフォーム上でトリガーされる)
CI プラットフォームによって生成されたレポートの解析とパイプライン内のエラーの修正
プル要求を使用したリモート機能ブランチのメイン ブランチへのマージ (これにより、もう 1 つの自動化されたタスクのパイプラインが CI プラットフォーム上でトリガーされる)
CI プラットフォームによって生成されたレポートの解析とマージエラーの解決
次の図は、Jenkins® CI サーバーとオープンソースのソース コード管理ツール (Git™ や GitHub® など) を使用した開発サイクルの例を示しています。MATLAB® と Jenkins の間のインターフェイスの設定方法については、Run MATLAB Tests on Jenkins Server を参照してください。
段階 1: ローカル リポジトリでの機能の開発と検定
機能を開発し、ローカル リポジトリに対して変更をコミットします。
GitHub リポジトリをクローンして新しい機能ブランチを作成します。
適宜、既存のファイルを変更するか、新しいファイルを追加します。
MATLAB と Simulink® のテストを実行して変更を検定し、ローカル リポジトリにコミットします。
段階 2: 継続的インテグレーション プラットフォーム上での自動化されたパイプラインの実行
変更をリモート リポジトリにプッシュするとき、またはプル要求を行うときに、自動化されたタスクのパイプライン (テストを含む) を実行します。
コミット済みの変更を GitHub にプッシュするか、リモート機能ブランチをメイン ブランチにマージするプル要求を行うことにより、Jenkins 上で自動化されたタスクのパイプラインをトリガーします。
Jenkins は自動化されたパイプライン (MATLAB と Simulink のテストを含む) を実行し、プロジェクト コンフィギュレーションで指定されているアーティファクトを生成します。
段階 3: 失敗の調査と解決
変更のプッシュまたはプル要求に失敗した場合は、次の手順に従います。
自動化されたパイプラインの結果および生成されたアーティファクトを調査します。コードに適切な変更を行います。
変更を GitHub にプッシュするか、プル要求を行うことにより、Jenkins 上で新しいパイプラインをトリガーします。
統合担当のエンジニアは、Jenkins のアーティファクトを使用して、機能ブランチをメイン ブランチにマージするタイミングを判断できます。
MathWorks 製品を使用した継続的インテグレーション
さまざまな継続的インテグレーション プラットフォームで、MATLAB との継続的インテグレーションを実行できます。MATLAB コードおよび Simulink モデルの実行とテスト、アーティファクトの生成、およびプラットフォームへの結果のパブリッシュができます。詳細については、CI プラットフォーム上での MATLAB との継続的インテグレーションを参照してください。
MATLAB に加えて、さまざまなツールボックスが継続的インテグレーション ワークフローをサポートしています。次の表に、モデルやコードに対する継続的インテグレーションの一般的な使用例を示します。
ツールボックス | 使用例 | 詳細 |
---|---|---|
Simulink |
| プロジェクトを使用したソース管理について (Simulink) Git でのプロジェクトの使用 (Simulink) シミュレーションを高速化するための Simulink キャッシュ ファイルの共有 (Simulink) Attach Model Comparison Report to GitHub Pull Requests (Simulink) |
Simulink Test™ | CI プラットフォーム上でテスト ファイルを実行し、Simulink Coverage™ を使用して CI 互換のカバレッジを収集 | 継続的インテグレーション (Simulink Test) |
Simulink Check™ | 自動化されたプロセスをチームに展開して開発作業や検証作業の特定、自動化、完了を支援 | Continuous Integration (Simulink Check) |
Requirements Toolbox™ | CI プラットフォーム上で実行されたテストに関する要件検証結果をまとめる | 外部ソースからの結果を検証ステータスに含める (Requirements Toolbox) |
Polyspace® Bug Finder™ Server™, Polyspace Code Prover™ Server |
| 継続的インテグレーションにおけるサーバーでの Bug Finder 解析の設定 (Polyspace Bug Finder) 継続的インテグレーションにおけるサーバーでの Code Prover 解析の設定 (Polyspace Code Prover) |