このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
継続的インテグレーション システム ワークフローにおけるメトリクスのしきい値違反の修正
この例では、メトリクス ダッシュボードをオープンソース ツールである GitLab® および Jenkins® と連携させ、継続的インテグレーション システム ワークフローでモデルのテストおよび調整を行う方法を説明します。継続的インテグレーションとは、開発者が作業中のすべてのプロジェクト ファイルのコピーを共有メインラインにマージさせる手法です。このワークフローによって時間が節約され、バージョン コントロールの維持、およびテストの自動化および標準化を通して品質が向上されます。
この例では、Airframe サンプル プロジェクト openExample('simulink/AirframeProjectExample')、および提供しなければならない以下のファイルを参照します。
メトリクスのしきい値を指定し、メトリクス ダッシュボードをカスタマイズする MATLAB® スクリプト。
メトリクス データを収集し、メトリクスのしきい値違反がないかをチェックする MATLAB ユニット テスト。
この例では、MATLAB ユニット テストを実行してメトリクスのしきい値違反があるかを判別するために、Jenkins の継続的インテグレーション サーバーを使用します。Jenkins ではテスト結果がアーカイブされ、これをダウンロードしてローカルで調査できます。GitLab はオンラインの Git™ リポジトリ マネージャーで、Jenkins と連携するよう設定できます。次の図は、Simulink® Check™、GitLab、および Jenkins が継続的インテグレーション ワークフローにおいてどのように連携するかを示します。

プロジェクトの設定
Airframe サンプル プロジェクト openExample('simulink/AirframeProjectExample') のファイルに加えて、以下の追加ファイルを提供しなければなりません。
プロジェクトのメトリクス データを収集し、モデル ファイルにメトリクスのしきい値違反が含まれていないことをチェックする MATLAB ユニット テスト。MATLAB ユニット テストの詳細については、スクリプト ベースのユニット テストを参照してください。
メトリクスのしきい値を指定し、メトリクス ダッシュボードをカスタマイズする MATLAB スクリプト。メトリクス ダッシュボードのカスタマイズ方法の詳細については、メトリクス ダッシュボードのレイアウトおよび機能のカスタマイズを参照してください。
メトリクスのしきい値の定義、カスタム メトリクス ファミリの設定、メトリクス ダッシュボードのレイアウトのカスタマイズを行う構成 XML ファイルをアクティブにする
setup.mファイル。この例では、setup.mスクリプトには以下のコードが含まれています。[プロジェクト] タブで、[起動とシャットダウン] をクリックします。[起動ファイル] フィールドで、function setup % refresh Model Advisor customizations Advisor.Manager.refresh_customizations(); % set metric configuration with thresholds configFile = fullfile(pwd, 'config', 'MyConfiguration.xml'); slmetric.config.setActiveConfiguration(configFile); uiconf = fullfile(pwd, 'config', 'MyDashboardConfiguration.xml'); slmetric.dashboard.setActiveConfiguration(uiconf); endsetup.mファイルを指定します。モデル アドバイザー チェックをカスタマイズするためにモデル アドバイザー構成ファイルをアクティブにする
sl_customization.mファイル。独自のモデル アドバイザー構成の作成方法の詳細については、準拠メトリクスの設定を参照してください。Jenkins ビルド時に実行される
runスクリプト。この例では、次のコードがrun.mファイルに記述されています。% script executed during Jenkins build function run(IN_CI) if (IN_CI) jenkins_workspace = getenv('WORKSPACE'); cd(jenkins_workspace); end % open the sl project slproj = simulinkproject(pwd); % execute tests runUnitTest(); slproj.close(); if IN_CI exit end endアクティブなメトリクス構成を既定の構成にリセットする
cleanup.mファイル。この例では、次のコードがcleanup.mファイル スクリプトに記述されています。[プロジェクト] タブで、[起動とシャットダウン] をクリックします。[シャットダウン ファイル] フィールドで、function cleanup rmpath(fullfile(pwd, 'data')); Advisor.Manager.refresh_customizations(); % reset active metric configuration to default slmetric.config.setActiveConfiguration(''); slmetric.dashboard.setActiveConfiguration(''); endcleanup.mファイルを指定します。派生したアーティファクトが GitLab にチェックインされていないことを検証する
.gitignoreファイル。次のコードが.gitignoreファイルに記述されています。work/** reports/** *.asv *.autosave
GitLab の設定
プロジェクトのソース管理のための GitLab プロジェクトを作成します。詳細については、https://docs.gitlab.com/ee/index.htmlを参照してください。
Git クライアントをインストールします。
分岐ワークローを設定します。GitLab で、メイン ブランチから、モデル ファイルに変更を実装するための一時的なブランチを作成します。統合担当のエンジニアは Jenkins のテスト結果を使用して、一時的なブランチをメイン ブランチにマージすべきかを判断できます。詳細については、以下を参照してください。
https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows.
左側のサイド バーの [Settings]、[Repository] で、開発者がメイン ブランチに変更をマージする際にマージ要求の使用を強制することで、メイン ブランチを保護します。
[Integrations] ページの [Settings] で、Jenkins プロジェクトの URL に Web フックを追加します。この Web フックは、Jenkins サーバー上のビルド ジョブをトリガーします。
Jenkins の設定
GitLab および TAP プラグインをインストールします。MATLAB ユニット テストは TAP プラグインを使用して結果を .tap ファイルにストリーミングします。Jenkins は .tap ファイルをインポートすることで、MATLAB から Jenkins ジョブへのテスト状態の通信を可能にします。
Jenkins プロジェクトを作成します。次の設定を指定します。
Jenkins プロジェクトで [Configure] をクリックします。
[General] タブで、プロジェクト名を指定します。
[Source Code Management] タブの [Repository URL] フィールドで、GitLab リポジトリの URL を指定します。
[Build Triggers] タブで、[Build when a change is pushed to GitLab] を選択します。
[Build Environment] セクションで、[Use MATLAB Version] を選択し、[MATLAB root] を指定します (例:
C:\Program Files\MATLAB\R2022a)。[Build] セクションで MATLAB を実行し、
runスクリプトを呼び出します。runスクリプトによりプロジェクトが開き、すべてのユニット テストが実行されます。この例のプロジェクトでは、コードは次のとおりです。matlab -nodisplay -r... "cd /var/lib/jenkins/workspace/'18b Metrics CI Demo'; run(true)"
詳細については、CI サーバーにおけるテストのランタイムの削減を参照してください。
[Post-build Actions] タブで、TAP 形式の結果が Jenkins にパブリッシュされるよう TAP プラグインを設定します。[Test Results] フィールドで
reports/*.tapを指定します。[Files to archive] でreports/**,work/**を指定します。TAP プラグインは、ジョブの結果を拡張して MATLAB ユニット テストからの詳細を表示します。Jenkins のアーカイブ インフラストラクチャによって、Jenkins のビルド時に生成された派生アーティファクトが保存されます。
継続的インテグレーション ワークフロー
プロジェクト、Jenkins、および GitLab の設定後、継続的インテグレーション ワークフローに従います。
段階 1: 機能の開発
GitLab リポジトリのクローンをローカルに作成します。Work with Files Under SVN in MATLABを参照してください。
Simulink で、ローカルの GitLab リポジトリに移動します。
機能ブランチを作成し、ファイルをフェッチし、チェックアウトします。とを参照してください。
プロジェクト ファイルに必要な変更を加えます。
モデルをシミュレートし、シミュレーション データ インスペクターで出力を検証します。
MATLAB ユニット テストを実行します。詳細については、
runtestsを参照してください。変更したモデルを機能ブランチに追加およびコミットします。とを参照してください。
GitLab リポジトリに変更をプッシュします。とを参照してください。
GitLab で、マージ要求を作成します。ソース ブランチとして機能ブランチを、メイン ブランチとしてターゲット ブランチを選択します。[Compare branches and continue] をクリックします。
機能が完全に実装されていない場合、要求の先頭に WIP: という文字を追加して、マージ要求を作成中としてマークします。マージ要求が WIP: とマークされていない場合、作成後のビルドが直ちにトリガーされます。
[Create merge request] をクリックします。
段階 2: 継続的インテグレーションを使用した検定
WIP: という文字がマージ要求の先頭にない場合、プッシュ コマンドによって Jenkins ビルドがトリガーされます。この例の Jenkins の設定の部分で、GitLab に変更をプッシュしたときにビルドを実行するよう Jenkins の設定を行いました。文字を削除するには、[Resolve WIP status] をクリックします。
Jenkins プロジェクトに移動します。[Build History] でビルド ステータスを参照できます。
ビルドをクリックします。
[Tap Test Results] をクリックします。
この例では、
MetricThresholdGateway.mユニット テストは、3 つのメトリクスのしきい値を満たさなかったためにパスしませんでした。このデータを調査するには、データをローカルにダウンロードしなければなりません。
段階 3: 品質問題をローカルで調査
アーカイブされた結果をローカルの Git リポジトリのワークスペースにダウンロードします。
ダウンロードしたファイルを解凍します。
reports/およびwork/フォルダーをローカル リポジトリ内のそれぞれのフォルダーにコピーします。プロジェクトおよびメトリクス ダッシュボードを開き、結果を確認します。

モデルに対して必要な更新を行い、テスト エラーを解決します。GitLab の機能ブランチに変更をプッシュします。
統合担当のエンジニアは Jenkins のテスト結果を使用して、一時的なブランチをメイン ブランチにマージするのに適切なタイミングを判断できます。
参考
slmetric.config.setActiveConfiguration | slmetric.dashboard.setActiveConfiguration