Simulink モデル検証のための継続的インテグレーション
著者 David Boissy、Paul Urban、Krishna Balasubramanian、Pablo Romero Cumbreras、Colin Branch、Jemima Pulipati、 MathWorks
R2022a 以降を使用中で Simulink Check™ ライセンスをお持ちの場合は、CI/CD Automation for Simulink Check サポート パッケージを利用することで、CI 統合を効率化できます。サポート パッケージを使用すると、チームのプロセス モデルを定義し、プロセス内のタスクを CI のパイプラインとして自動的に実行するように CI システムを設定できます。サポート パッケージには複数の CI プラットフォームのサポートが含まれているため、プロジェクトやプロセスに固有のパイプラインを自動的に生成でき、手動で更新する必要がなくなります。
主な特徴:
- 組み込みタスク: モデルアドバイザーによるモデリング標準のチェック、 Simulink Test™ によるテストの実行、 Embedded Coder® によるコードの生成などの作業に対して組み込みタスクを使用することで、モデルベース開発と検証のワークフローにおける一般的なタスクを自動化します。開発および検証アクティビティ用のさまざまなスクリプトを管理する代わりに、これらの組み込みタスクを再構成して使用することで、一貫した実行と整理されたタスク結果を実現できます。
- インクリメンタル ビルド: プロジェクトへの変更の影響を特定し、影響を受けるタスクのみを自動的に再実行して、ビルドの効率を向上させます。Process Advisor アプリとそのビルド システムは、古い結果を持つタスクを再実行し、最新のタスクを自動的にスキップできます。
- 自動パイプライン生成: サポート パッケージのテンプレート ファイルを使用してパイプラインを自動的に生成すると、プロジェクトまたはプロセスに変更を加えたときに CI/CD 構成ファイルを手動で更新する必要がなくなります。パイプライン ジェネレーターの設定を簡単にカスタマイズして、タスクを異なるジョブに分割したり、モデル タスクを並列実行したり、その他のパイプラインの動作を変更したりできます。
詳細については、継続的インテグレーションとJenkinsへの統合を参照してください。
これは2部構成のシリーズの最初の記事です。パート 1 では、バージョン管理向けの GitLab® と継続的インテグレーション (CI) 向けの Jenkins® の活用について見ていきます。パート 2 の GitLab を使用した Simulink モデルの検証のための継続的インテグレーションでは、バージョン管理と CI の両方に GitLab を使用する方法について説明します。
継続的インテグレーション (CI) は人気が高まり、モデルベースデザインの不可欠な部分になりつつあります。しかし、CIとは何でしょうか?その利点は何ですか? また、どのような問題を解決しようとしていますか?Simulink® はどのように CI エコシステムに適合しますか?プロジェクトで CI を最大限に活用するにはどうすればよいでしょうか?
モデルベースデザインには精通しているが、CI は初めてという場合は、次のような疑問が湧くかもしれません。この技術記事では、一般的な CI ワークフローを検討し、それをモデルベース デザインに適用します。次に、Jenkins、GitLab、 Simulink Test を使用してそのワークフローの例を見ていきます。
この例で使用されているプロジェクトはダウンロード可能です。
CI とは何ですか?
CI は、開発者がソース コードの変更を定期的に中央リポジトリに送信してマージするアジャイル手法のベスト プラクティスです。これらの「変更セット」は自動的に構築、認定され、リリースされます。図 1 は、この基本的な CI ワークフローと開発ワークフローを示しています。
ワークフローの開発部分では、モデルとテストが開発、検証、マージ、レビューされ、開発者のデスクトップ上のバージョン管理システムに送信されます。次に、バージョン管理システムはワークフローの自動化された CI 部分をトリガーします。CI ワークフローの重要な部分は次のとおりです。
ビルド: ソース コードやモデルがオブジェクトファイルや実行可能ファイルになります。
テスト: テストは品質ゲートとして実行されます。
パッケージ: 実行可能ファイル、ドキュメント、アーティファクト、その他の成果物は、エンドユーザーへの配布用にバンドルされます。
デプロイ: パッケージが実稼働環境にデプロイされます。
これら 4 つのステップをまとめて CI「パイプライン」と呼びます。パイプラインは通常自動化されており、システムに応じて完了するまでに数分から数日かかる場合があります。これらのステップ全体を通じて、部品表、テスト結果、レポートなど、多数のアーティファクトが作成されることに注意してください。
CI ワークフローは、バージョン管理システムに関連する開発者ワークフローと組み合わせられることがよくあります。これらのワークフローでは、開発者は多くの場合、変更をローカル リポジトリに保存し、デプロイ前にローカル CI パイプラインを使用して変更を検証します。
CI の利点は何ですか?
CI を実装したチームは通常、次のような利点を報告しています。
- 再現性。 CI パイプラインは、ビルド、テスト、パッケージ化、デプロイメント向けに繰り返し可能な一貫した自動化プロセスを提供します。繰り返し可能な自動化により、開発者は必要な作業に集中でき、プロジェクトの時間を節約できます。これはリスク低減の重要な側面でもあり、多くの場合、認証の要件となります。
- 品質保証。手動テストは効果的ですが、数日前のスナップショットに基づいていることが多く、再現性に欠けます。CI では、変更は常に最新のコード ベースに対してテストされます。
- 開発時間の短縮。品質保証が組み込まれた繰り返し可能なプロセスにより、高品質の製品をより早く提供できるようになりました。自動デプロイメントとは、コードが常に本番環境に対応できる状態であることを意味します。
- コラボレーションの向上。 CI を使用すると、開発者は変更セットを管理し、コードを生産ラインにマージするための定義されたプロセスを持つことができます。一貫したプロセスにより、大規模なチームの管理が可能になり、新しい開発者の増員にかかるコストが削減されます。
- 監査対応コード。 CI ワークフローは広範な監査証跡を提供します。CI パイプラインを通過するすべての変更について、変更を行ったユーザー、変更をレビューしたユーザー、変更の性質、依存関係、テストとその結果、および途中で生成された関連レポートとアーティファクトの数を識別できます。
モデルベースデザインは CI にどのように適合しますか?
設計上、CI ワークフローとツールは言語やドメインに依存しません。つまり、課題は CI ツール、システム、プロセスにモデルベースデザインを理解させることで、Simulink と関連ツールを CI ワークフローの共通言語にすることです。
これは、モデルベースデザインの 3 つの主要コンポーネント (検証、コード生成、テスト) を CI ワークフローに統合することによって実現できます (図 2)。モデルベースデザインでは、ビルド フェーズの前に検証フェーズを含む CI パイプラインにマッピングされる早期検証を重視します。コード生成はビルド フェーズで行われます。テスト フェーズでは、シミュレーションによる動的テストと生成されたコードの静的分析を実行できます。
以下は、私たちがどのように CI ワークフローにモデルベースデザインを理解させ、その言語を話せるようにしたかまとめたものです。
開発。MATLAB®、Simulink、コーダー、ツールボックスが、開発作業に使用されます。MATLABプロジェクトは、作業を整理し、共同作業を行い、バージョン管理システムと連携するために使用されます。
テスト。Simulink Check は、シミュレーションとコード生成の前にモデルの品質チェックを実行するために使用されます。Simulink Testは、シミュレーション ベースのテストの開発、管理、実行に使用されます。Simulink Coverage™ は、カバレッジを測定し、テストの有効性を評価するために使用されます。品質チェック、テスト結果、カバレッジ メトリックは、開発者が自分の作業を認定するための品質ゲートとして使用できます。
マージ。MATLAB のファイルとフォルダーの比較機能は、MATLABファイルを比較してマージするために使用されます。モデル比較ツールは、 Simulinkモデルを比較およびマージするために使用されます。
レビュー。レビューは、変更がバージョン管理システムに送信される前の品質プロセスの最終ステップです。ここでは、 MATLABスクリプトとSimulinkモデルへの変更を確認します。事前資格審査のテスト結果も、提出前の最終的な品質ゲートとして確認されます。
送信。MATLABプロジェクトは、バージョン管理システムへのインターフェースを提供します。
確認。ローカル検証に使用されるものと同じツールであるSimulink Check が、CI システム内での自動検証に使用されます。
ビルド。MATLAB Coder™、 Simulink Coder™、Embedder Coder は、ソフトウェアインザループ (SIL) テスト用のコードを生成するために使用されます。
テスト。ローカル テストに使用されるものと同じツールである Simulink Test が、CI システム内の自動テストに使用されます。
パッケージとデプロイ。パッケージ化とは、実行可能ファイル、ドキュメント、アーティファクト、その他のアーティファクトをエンド ユーザーに配布するためにまとめることです。デプロイメントは、パッケージ化されたソフトウェアのリリースです。モデルベースデザインのワークフローでは、これらのフェーズは組織やグループによって大きく異なり、多くの場合、さまざまなビルドと認証アーティファクトを 1 つの製品にバンドルして、他のチームに提供できるようにします。
最新の開発ツールとプラクティスにより、開発者はより堅牢なシステムを作成し、機能を早期かつ頻繁にテストできるようになります。CI システムをワークフローに統合すると、ユニットレベルのテストとシステムレベルのテストが自動化されます。つまり、開発者は機能が正しく統合されているかどうかの検証ではなく、新しい機能の開発に集中できることになります。
次のケーススタディでは、CI とモデルベースデザインを組み込んだワークフローについて説明します。
ケーススタディ: CI システム内で検証、構築、テストされたSimulinkモデル
この例では、CI を使用したモデルベースデザインを使用して、自動車の車線追従システムに対して要件ベースのテストを実行します (図 3)。
使用するパイプライン (図 4) は、Jenkins ビルドごとに実行されます。
図 4. 車線追従の例のパイプライン。
パイプラインのフェーズは次のとおりです。
- 標準への準拠を確認する:MATLABユニット スクリプトは、単純なモデル アドバイザー チェックを実行します。評価基準により、モデルに接続されていない線がないことが保証されます。
- ビルドモデル:MATLAB ユニット テスト ファイルは、モデル用の量産 SIL コードをビルドします。警告なしにビルドが成功した場合、評価基準はパスとなります。
- テストケースを実行します。Simulink Testのテスト スイートでは、いくつかの運転シナリオを使用して車線追従コントローラーをテストします。コントローラーの正常な動作を確認するために、次の 3 つの評価基準が使用されます。
- 衝突回避:運転シナリオ中のどの時点でも、自車は先頭車両と衝突しません。
- 安全な距離の維持:自車と先頭車とのタイムギャップは1.5秒以上です。2 台の車間の時間差は、計算された車間距離と自車の速度の比率として定義されます。
- 車線追従:車線の中心線からの横方向の偏差は0.2メートル以内です。
- パッケージ アーティファクト:前の各段階では、モデル アドバイザー レポート、生成された実行可能ファイル、将来の使用や参照のためにアーカイブできる一連のテスト結果などのアーティファクトが生成されます。
ワークフローの手順
ワークフローは次のステップで構成されます (図 5)。
- Jenkins でビルドをトリガーし、検証とビルドのステージをパスしたことを確認する。
- Jenkins でのテストケースの失敗を検出する。
- デスクトップ版の MATLAB 上で問題を再現する。
- 評価基準を緩和することでモデルの問題を修正する。
- テストケースが確実にパスするようにローカルでテストする。
- テストブランチでの変更をマージしてレビューする。
- Git™ への変更をコミットし、Jenkins でビルドをトリガーする。
- Jenkins で検証、ビルト、テストを行う。
CI ループの最初の失敗したパスが左上に示されています。CI テストの失敗、ローカルでの再現、基準の緩和、および CI ワークフローの正常な完了を示します。
ワークフローの詳細
- まず Build Now を選択して Jenkins でビルドをトリガーします。Simulink Check がチェックされ、コード生成がパスになります。
![Jenkins ダッシュボードのドロップダウン メニューのスクリーンショット。「Build Now」が選択されています。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1314375792.adapt.full.medium.jpg/1739512317244.jpg)
- 次に、 2 番目の検証フェーズでテストケースの失敗を検出します。テストスイート
LaneFollowingTestScenarios
の テストケースLaneFollowingTestScenarios
が評価基準を満たしていません。
![失敗の概要のスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1274891353.adapt.full.medium.jpg/1739512317260.jpg)
- 失敗をより理解するために、Simulink Test を使用してローカルで失敗を再現します。テストファイル
LaneFollowingTestScenarios.mldatx
を開き、テストケースLFACC_Curve_CutInOut_TooClose
を実行します。安全距離の評価基準を満たしていないことに注意してください。先頭車両と自車両間の時間差を確立するには、より柔軟性が必要です。
![パスした評価基準を示す Simulink Test ウィンドウのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_421698181.adapt.full.medium.jpg/1739512317270.jpg)
- 問題を理解した上で、次に問題を修正します。
LaneFollowingTestBenchExample.slx
モデルを開き、Collision Detection/Test Assessments Test Sequence ブロックに移動します。最初の評価では、自車と先頭車両との間の時間差が、一度に 2 秒以上 1.5 秒を下回ってはならないと主張しています。
GlobalAssessments % Ensure that the time gap between the ego vehicle and lead vehicle does not dip below % 1.5s for more than 2s at a time. verify(duration(time_gap < 1.5, sec) < 2); % Verify that no collision was detected verify(~collision); % Verify that the absolute value of lateral deviation from the lane centerline does not exceed 0.2m % for more than 5s at a time. verify(duration(abs(lateral_deviation) > 0.2, sec) < 5);
この評価は、テスト対象の攻撃的な運転操作には制限が厳しすぎます。この例では、時間差が一度に 5 秒以上 0.8 秒を下回らないように評価基準を緩和します。
GlobalAssessments % Ensure that the time gap between the ego vehicle and lead vehicle does not dip below % 0.8s for more than 5s at a time. verify(duration(time_gap < 0.8, sec) < 5); % Verify that no collision was detected verify(~collision); % Verify that the absolute value of lateral deviation from the lane centerline does not exceed 0.2m % for more than 5s at a time. verify(duration(abs(lateral_deviation) > 0.2, sec) < 5);
- この問題はシミュレーションでは修正されたようです。確認するには、ローカルでテストします。(モデルを保存して、テスト マネージャーでテストを再実行)新しい評価基準にパスしていることに注意してください。
![パスした評価基準を示す Simulink Test ウィンドウのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_915256185.adapt.full.medium.jpg/1739512317289.jpg)
- 問題は修正され、ローカルで検証されました。次にモデル比較ツールを使って、バージョン管理にコミットする前に変更をレビューします。
![モデル比較ツール内で古い変更と新しい変更の比較を示すスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_2114472669.adapt.full.medium.jpg/1739512317304.jpg)
モデル比較ツールのパブリッシュ機能を使用してコードをレビューすることもできます。
![モデル比較ツールのパブリッシュ機能を使用した場合の古い変更と新しい変更の比較を示すスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_1389600109.adapt.full.medium.jpg/1739512317324.jpg)
- バグが修正されたので、これらの変更をMATLABプロジェクトとともに GitLab にプッシュし、評価基準の変更を通知するコミット メッセージを追加します。
次に、GitLab の最新のコミットを記録します。
GitLab は Jenkins でビルドを自動的にトリガーします。Jenkins プロジェクト ダッシュボードには、ビルドのステータスと進行状況が表示されます。
![読み込みバーを介してビルドのステータスと進行状況を表示する Jenkins プロジェクト ダッシュボードのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1160520298.adapt.full.medium.jpg/1739512317361.jpg)
- Jenkins ビルドが実行されます。検証、構築、テストのパイプラインフェーズがパスしていることを確認します。
これで、マージ リクエストを開始して、テスト ブランチの変更をメイン ブランチにマージできるようになりました。GitLabのリポジトリで、ブランチを選択し、テスト ブランチ上の最新のコミットの横にあるマージリクエストをクリックします。
フォームに記入し、マージリクエストを送信します。
ブランチのオーナーとして、マージボタンクリックして、マージリクエストを承認します。すべての変更がメイン ブランチにキャプチャされました。
![マージリクエストが成功したときに表示されるメッセージを示すスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_2099516143.adapt.full.medium.jpg/1739512317394.jpg)
例の使用:ツール、リソース、要件
次のセクションでは、開始する際に役立つリソース、必要なツール、およびそれらの構成方法について説明します。
システムの構成
Jenkins は CI システムとして活用され、GitLab はバージョン管理システムとして活用されています。MATLAB、Jenkins、GitLab は連携して動作するように設定する必要があります。次のチュートリアルがセットアップに役立ちます。
チュートリアルは GitLab と Jenkins に固有のものですが、概念は他のバージョン管理システムや CI システムにも適用できます。
必要ツール
この例では次のツールが必要です。
- Jenkins インストールバージョン 2.7.3 以降。Jenkins は継続的インテグレーションに使用されます。
- Jenkins 用 MATLAB プラグインバージョン 1.0.3 以降。MATLAB、 Simulink、 Simulink Test はすべて、このプラグインを利用して Jenkins と通信します。GitHubで詳細を見る。
- 必要な追加プラグイン:
- GitLab アカウント。GitLab はソース管理に使用され、クラウド サービスとして利用できます。MATLABプロジェクトには、GitLab との通信用の Git インターフェイスが含まれています。
CI のライセンスに関する考慮事項
複数のホストまたはクラウド上で CI を実行する予定がある場合は、 Continuous-integration@mathworks.com に連絡してサポートを依頼してください。注: MATLAB、Simulink Coder 、コンパイラなどの変換用製品には、クライアント アクセス ライセンス (CAL) が必要になる場合があります。
付録MATLAB、GitLab、Jenkins の設定
手順 1. ソース管理を使用するようにMATLABプロジェクトを構成する
この例の最初のステップは、GitLab でソース管理を使用するようにプロジェクトを構成することです。
MBDExampleWithGitAndJenkins
という名前の新しいディレクトリを作成して、そこに例を読み込んで、MATLAB プロジェクトMBDExampleWithGitAndJenkins.prj
を開きます。- GitLab で、リモート リポジトリとなる新しいプロジェクトを作成します。
MBDExampleWithGitAndJenkins
という名前を付けて、ホスト先の URL を記録します。 - MATLABで、ソース管理を使用するようにプロジェクトを変換します。プロジェクトタブで、ソース管理の使用をクリックします。
![MATLABの [プロジェクト] タブで [ソース管理の使用] ボタンが選択された状態のスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1426591191.adapt.full.medium.jpg/1739512317414.jpg)
ソース管理にプロジェクトを追加をクリックします。
![ソース管理情報ポップアップのスクリーンショット。統合はなしに設定されており、リポジトリの場所は適用されません。プロジェクト ルートに対してソース コントロール システムが検出されなかったことが示され、プロジェクトをソース コントロールに追加するボタンが表示されます。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1616796560.adapt.full.medium.jpg/1739512317431.jpg)
- 変換をクリックします。
![ソース管理に追加のポップアップ。ソース管理ツールとして Git が選択され、プロジェクト ルートが指定されます。変換ボタンがあります。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_711112368.adapt.full.medium.jpg/1739512317449.jpg)
- 完了したら、プロジェクトを開くをクリックします。
![ソース管理に追加されるファイルを示すスクリーンショット。ファイルはすべてのチェックにパスしており、「プロジェクトを開く」ボタンが表示されます。いくつかのボタンとロジスティクスを含む Git メニューが表示されます。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1843929107.adapt.full.medium.jpg/1739512317473.jpg)
プロジェクトは現在、ローカル Git ソース管理下にあります。
手順 2. 変更をコミットし、ローカルリポジトリを GitLab にプッシュする
- プロジェクトタブのリモートをクリックします。
![「リモート」が強調表示された MATLAB プロジェクト タブのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1131172368.adapt.full.medium.jpg/1739512317494.jpg)
- GitLab のリモートオリジンの URL を指定します。
![「リモートの設定」ポップアップのスクリーンショット。オリジンリモートの URL を指定するためのフォームがあります。指定された URL はぼやけており、下部に [検証] ボタンと [OK] ボタンがあります。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1715246667.adapt.full.medium.jpg/1739512317511.jpg)
検証をクリックして、リモートリポジトリへの接続が成功していることを確認し、OK をクリックします。これで、プロジェクトは GitLab を使用して変更をプッシュおよびプルするように構成されました。
- コミットをクリックして、最初のコミットを実行します。
![コミット ボタンが強調表示された MATLAB プロジェクト タブのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_176678025.adapt.full.medium.jpg/1739512317532.jpg)
![「最初のコミット」というコミット メッセージが入力されたコメント ウィンドウのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_2080776722.adapt.full.medium.jpg/1739512317544.jpg)
- プッシュをクリックして、ローカル リポジトリからリモート GitLab リポジトリにすべての変更をプッシュします。
![プッシュ ボタンが選択された MATLAB プロジェクト タブのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1335693290.adapt.full.medium.jpg/1739512317560.jpg)
- GitLab ダッシュボードを更新し、 MATLABプロジェクトの内容を確認します。
手順 3: テストブランチを作成する
このステップでは、メイン ブランチとマージする前に変更をテストおよび検証するためのテスト ブランチを作成します。
- ブランチをクリックします。
![「ブランチ」ボタンが選択された MATLAB プロジェクト タブのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1687868341.adapt.full.medium.jpg/1739512317607.jpg)
- ブランチとタグの作成セクションを展開して、ブランチに「Test」という名前を付けて、作成をクリックします。
- ブランチ ブラウザでテストを確認します。テストブランチから、スイッチ、閉じると順にをクリックします。
- MATLABで、プッシュを選択して、これらの変更を GitLab にプッシュし、GitLab の Test ブランチを確認します。
手順 4: MATLAB を呼び出すように Jenkins を設定する
- 必要なプラグインを 2 つインストールします。
- GitLab プラグイン— このプラグインを使用すると、GitLab は Jenkins ビルドをトリガーし、その結果を GitLab UI に表示できるようになります。
- MATLAB プラグイン— このプラグインは MATLAB と Jenkins を統合し、MATLAB とSimulink を呼び出すための Jenkins インターフェイスを提供します。
- 新規アイテムを選択し、
MBDExampleUsingGitAndJenkins
という新しい FreeStyle プロジェクトを作成します。 - ソース コード管理で Git を有効にし、Jenkins を GitLab リポジトリにポイントして、ビルドするテスト ブランチに入ります。注: ログインまたはパスワードと GitLab API トークンが必要です。
- GitLab のテスト ブランチにプッシュ リクエストが行われたときにビルドを実行するようにビルド トリガーを構成します。Build Triggers で、Advanced > Secret token の順に選択します。このトークンは、GitLab がビルドをリクエストし、Jenkins で認証するために使用されます。シークレット トークンと GitLab Webhook をメモします。
- ビルド環境を構成します。Use MATLAB version を選択して、MATLAB ルートを入力します。
- ビルド ステップを構成します。
Add build step をクリックして、Run MATLAB Command を選びます。コマンド openProject('SltestLaneFollowingExample.prj');
LaneFollowingExecModelAdvisor
を入力して、プロジェクトを開き、モデル アドバイザー チェックを実行します。
もう一度 Add build step をクリックして、Run MATLAB Command を選びます。次のコマンドを入力します。openProject('SltestLaneFollowingExample.prj');
。
LaneFollowingExecControllerBuild
Add build ste をクリックして、MATLAB テストを実行を選びます。TAP test results と Cobertura code coverage を選択して、ビルド構成を完了させます。
このアクションは TAP テスト結果を解析して、TAP Extended Test Resultsが選択されているときに表示できるようにします。出力には、実行されたテスト ケースの概要、結果の概要、 MATLABコンソールからのログが含まれます。
![「TAP Extended Test Results」が強調表示されたダッシュボードのドロップダウン メニューのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_361369158.adapt.full.medium.jpg/1739512317808.jpg)
TAP プラグインは最新のテスト実行の結果も収集し、以下に示すようにヘルス ダイアグラムを表示します。図をクリックすると、以前のビルドにアクセスできます。
![TAP テスト結果のグラフ。x 軸に Jenkins ビルド番号、y 軸に TAP テスト数が表示されます。テストは、失敗、パス、スキップ、または要処理として色分けされます。ビルド番号が増えると、パスしたテストの数も増加します。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1468401417.adapt.full.medium.jpg/1739512317836.jpg)
手順 6: HTML レポートのパブリッシュ
Add post-build action >Publish HTML reports の順にクリックします。HTML レポートがパブリッシュされる相対ルート パスと、そのパスにあるインデックス ページのファイル名を入力します。
パブリッシュする HTML レポートの数だけエントリを追加します。このシナリオには、2 つの Web レポートがあります。モデル アドバイザーの概要とコード生成レポート。これらはMATLAB組み込み関数を使用して作成された標準レポートです。カスタム HTML レポートを追加できます。
メインの Jenkins ジョブ ページには、すべての HTML レポートの最後のビルドに対応するレポート リンクが表示されます。Publishing オプションで「Always link to last build」チェックボックスをオンにすると、プラグインはビルドのステータスに関係なく、最後のビルドのレポートを公開します。このチェックボックスがオンになっていない場合、プラグインは最後の「成功」ビルドにのみリンクします。
手順 7: Jenkins でビルドをトリガーするように GitLab を構成する
メイン ブランチで新しいプッシュが発生したときに Jenkins で自動ビルドをトリガーするように GitLab を構成します。これを行うには、Settings > Webhooks の順に移動します。Build Trigger の構成で Jenkins により提供された Webhook URL と Secret token を使用して、Push events を選択します。
注: GitLab が Jenkins のインストールを見つけられるように、URL セクションで localhost の代わりに完全修飾ドメイン名を使用します。。
![URL フォームが入力され、Secret Token フィールドが未入力で、トリガーを入力するためのフォームがある「Trigger」の下の「Push Events」がチェックされている Webhook ポップアップのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1428097271.adapt.full.medium.jpg/1739512317908.jpg)
Test のプルダウンから Push Events を選択して、統合をテストします。GitLab は「フックが正常に実行されました:「HTTP 200」と表示され、Jenkins はビルドを開始します。
![有効な Webhook の詳細が表示された Project Hooks ポップアップのスクリーンショット。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_2045155438.adapt.full.medium.jpg/1739512317923.jpg)
手順 8: Jenkins から GitLab への認証の設定
Jenkins ビルド ステータスを GitLab に自動的にパブリッシュするには、Jenkins から GitLab への認証を構成する必要があります。
- API スコープを選択して、GitLab で個人用アクセス トークンを作成します。
![GitLabToJenkins というトークンに名前、有効期限、スコープを追加するためのフォームを含む個人用アクセス トークンのポップアップのスクリーンショット。「Scopes」の下で「api」がチェックされており、API への完全な読み取り/書き込みアクセスが許可されます。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_1313549631.adapt.full.medium.jpg/1739512317939.jpg)
- トークンをコピーし、Jenkins のシステム構成で GitLab 接続を作成します。
注: 接続は複数の Jenkins ジョブで再利用でき、ユーザーに少なくとも「メンテナー」権限がある場合はグローバルに構成できます。
手順 9: Jenkins を GitLab パイプラインに統合する
Jenkins を GitLab パイプラインに統合するには、Jenkins で GitLab 接続を構成し、ジョブのステータスを GitLab にパブリッシュする必要があります。
- Jenkins ジョブの General セクションで GitLab Connection を選択します。
- ビルド後のアクションを追加して、ビルド ステータスを GitLab にパブリッシュします。
注: このアクションにはパラメーターがなく、既存の GitLab 接続を使用して GitLab にビルド ステータスをパブリッシュし、各コミットとマージ リクエストの双方向トレーサビリティを作成します。
![追加されたビルド後のアクション「Publish build status to GitLab」のスクリーンショット。詳細オプションのボタンがあります。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_702713251.adapt.full.medium.jpg/1739512317987.jpg)
手順 10: 要件ベースのテスト メトリックの視覚化 (R2020b)
要件ベースの テスト指標により、要件ベースのテスト作業の状態と品質を評価できます。メトリックの結果は、モデル テスト ダッシュボードを使用して視覚化できます。
- 以下の関数を基に、
collectModelTestingResults.m
というファイルを作成します。この関数は、メトリック エンジン インフラストラクチャを初期化し、利用可能なすべてのモデル メトリックを収集します。
function collectModelTestingResults() % metric capability added in R2020a if exist('metric') metricIDs = [... "ConditionCoverageBreakdown" "CoverageDataService"... "DecisionCoverageBreakdown" "ExecutionCoverageBreakdown"... "MCDCCoverageBreakdown" "OverallConditionCoverage"... "OverallDecisionCoverage" "OverallExecutionCoverage"... "OverallMCDCCoverage" "RequirementWithTestCase"... "RequirementWithTestCaseDistribution" "RequirementWithTestCasePercentage"... "RequirementsPerTestCase" "RequirementsPerTestCaseDistribution"... "TestCaseStatus" "TestCaseStatusDistribution"... "TestCaseStatusPercentage" "TestCaseTag"... "TestCaseTagDistribution" "TestCaseType"... "TestCaseTypeDistribution" "TestCaseWithRequirement"... "TestCaseWithRequirementDistribution" "TestCaseWithRequirementPercentage"... "TestCasesPerRequirement" "TestCasesPerRequirementDistribution"... ]; % collect all metrics for initial reconcile E = metric.Engine(); execute(E, metricIDs); end end
- このファイルをプロジェクトとパスに追加します。
new collectModelTestingResults function
を 2 度呼び出すことで、メトリクスの結果を収集できるように Jenkins を構成します。最初の呼び出しは、 Simulink Test Manager とのメトリック統合を初期化します。2 番目は、エクスポートされたSimulink Test Manager の結果を使用してメトリック結果を収集します。- もう一度 Add build step をクリックして、Run MATLAB Command を選びます。次のコマンドを入力します。
openProject('SltestLaneFollowingExample.prj'); collectModelTestingResults
このビルドステップは Run MATLAB Tests の前に配置します。 - もう一度 Add build stepをクリックして、MATLAB コマンドを実行を選びます。コマンドをもう一度入力してください:
openProject('SltestLaneFollowingExample.prj'); collectModelTestingResults
このビルドステップをMATLAB テストを実行するの後に配置します。
- もう一度 Add build step をクリックして、Run MATLAB Command を選びます。次のコマンドを入力します。
- Run MATLAB Tests ビルドステップで Simulink Test Manager results をチェックします。
![ビルド ステップのポップ ウィンドウのスクリーンショット。Simulink Test Manager の結果のフォームにファイル パスが入力されます。](https://jp.mathworks.com/company/technical-articles/continuous-integration-for-verification-of-simulink-models/_jcr_content/mainParsys/image_0_copy_copy_co_897862517.adapt.full.medium.jpg/1739512318053.jpg)
- メトリックの結果を派生ディレクトリにアーカイブします。エクスポートされたテスト マネージャーの結果もアーカイブする必要があります。これにより、 MATLABに再度ロードされたときにメトリック結果を完全にナビゲートできるようになります。
Add post-build action をクリックして、Archive the artifacts を選びます。パスを derived/**,matlabTestArtifacts/*.mldatx
と入力して、ディレクトリに保存されているすべてのファイルをアーカイブします。
注: テスト マシン以外のマシン上の MATLAB で、これらの結果を表示するには、次の手順を実行します。
- アーカイブされたアーティファクト (派生ディレクトリとテスト結果の MLDATX ファイル) をダウンロードします。
- CI ジョブの実行に使用されたプロジェクトと同じバージョンのローカル コピーを抽出してコピーします。
- MATLAB でプロジェクトを開き、モデル テスト ダッシュボードを起動します。
CI によって生成された結果は、ダッシュボードに表示されます。
Jenkins® は LF Charities Inc. の登録商標です。
公開年 2024