メインコンテンツ

ロカールおよび CI パイプラインでのモデルの自動マージ

MATLAB® Git™ 統合を有効にすると、mlAutoMerge Git プラグインを使用して Git リポジトリでブランチを自動的にマージできます。プラグインでは、同じ SLX ファイルまたは MDL ファイル内の異なるサブシステム、Stateflow® チャート、およびコンフィギュレーション セットに変更があるブランチを自動的にマージできます。

ヒント

mlAutoMerge Git プラグインでは、ユーザーが異なるサブシステムで作業している場合にモデル ファイルを自動的にマージして競合を解決します。

異なるサブシステムで作業している場合以外は、手動でマージして競合を解決する必要があります。詳細については、Resolve Conflicts in Models Using Three-Way Mergeを参照してください。

Model open in the Simulink Editor on the right and illustration of the merge conflict that corresponds to different blocks in the model on the left

mlAutoMerge Git プラグインでは、変更されたサブシステムの子サブシステムにある変更が自動的にマージされます。端子数に変更がない場合、子サブシステムは親サブシステムから独立しています。プラグインでは、ウィンドウの位置、開いているエディターのタブ、その他のグラフィカルな詳細など、機能以外の変更についての競合はレポートされません。

Git リポジトリでモデルの自動マージを有効にするには、以下を行います。

  1. MATLAB で以下のコマンドを実行します。

    comparisons.ExternalSCMLink.setupGitConfig();

    このコマンドにより、グローバル .gitconfig ファイルが事前設定されます。次に例を示します。

    [difftool "mlDiff"]
       cmd = \"C:/Program Files/MATLAB/R2024b/bin/win64/mlDiff.bat\" $LOCAL $REMOTE
    [mergetool "mlMerge"]
       cmd = \"C:/Program Files/MATLAB/R2024b/bin/win64/mlMerge.bat\" $BASE $LOCAL $REMOTE $MERGED
    [merge "mlAutoMerge"]
       driver = \"C:/Program Files/MATLAB/R2024b/bin/win64/mlAutoMerge.bat\" %O %A %B %A

    メモ

    Windows® システムで mlAutoMerge.bat を実行するには、シェルがインストールされている必要があります。Git のコマンドラインでのインストールには、シェル ユーティリティを備えた Git bash が既定で含まれています。ソース管理の設定にある [シェルへのパス] が正しく設定されていることを確認してください。詳細については、Git 設定の構成を参照してください。

  2. ブランチのマージで競合する SLX ファイルおよび MDL ファイルの解決に実行可能ファイル mlAutoMerge を使用するように Git リポジトリを構成します。リポジトリで .gitattributes ファイルを開いて、次を追加します。

    *.slx binary merge=mlAutoMerge
    *.mdl binary merge=mlAutoMerge
    他のファイルの種類についても自動マージを有効にできます。

     自動マージがサポートされるファイルの種類

これで、同じ SLX ファイルまたは MDL ファイルのオーバーラップしない部分に変更があるブランチをマージするときに、mlAutoMerge でマージが自動的に処理されるようになります。

MATLAB 比較ツールと自動マージ機能を使用するように外部ソース管理ツールをカスタマイズすることもできます。詳細については、MATLAB を比較とマージに使用するための外部ソース管理のカスタマイズを参照してください。

GitLab CI/CD パイプラインでの Simulink 自動マージの設定

この例では、GitLab® CI/CD を使用して Simulink® モデルの自動マージを有効にする方法を示します。

前提条件

  1. 例を開いて attemptAutomerge.sh スクリプトと YAML ファイル .gitlab-ci.yml をダウンロードします。

  2. mlAutomerge を使用するようにリポジトリを構成する必要があります。次の行を含む .gitattributes ファイルがリポジトリになければなりません。*.slx binary merge=mlAutoMerge

  3. .gitlab-ci.yml で定義されているジョブでは、シェル実行プログラムを使用するように構成された Windows® のセルフホスト ランナーを使用します。セルフホスト ランナーを使用することで、ハードウェアのカスタマイズが可能になります。セルフホスト ランナーをリポジトリに追加するには、https://docs.gitlab.com/ee/tutorials/create_register_first_runner/#create-and-register-a-project-runner の手順に従います。

  4. 使用しているセルフホスト ランナーに MATLAB と Simulink がインストールされていることを確認します。

あるいは、GitLab でホストされるランナーを使用する場合は、提供されている .gitlab-ci.yml ファイルの .matlab_defaults ブロックを更新します。GitLab でホストされるランナーは、MATLAB R2020b 以降のリリースを使用してビルドを実行するための MATLAB Container on Docker Hub を実装しています。詳細については、https://github.com/mathworks/matlab-gitlab-ci-template?tab=readme-ov-file#use-matlab-with-gitlab-cicd を参照してください。

ランナーで使用するプラットフォームやシェルに応じて、独自の設定で動作するようにスクリプト例を変更できます。

GitLab CI/CD を使用した Simulink モデルの自動マージ

GitLab CI/CD を使用して、YAML ファイルで定義されているワークフローを自動化できます。この例の .gitlab-ci.yml では、GitLab の main ブランチへのすべてのマージ要求について、Simulink モデルの自動マージを試みます。

GitLab でパイプラインを設定するには、[+][Upload file] を選択して、attemptAutomerge.sh ファイルと .gitlab-ci.yml ファイルをリポジトリに追加します。その後、リポジトリをクローンして新しいコピーを作成します。あるいは、MATLAB でリポジトリにファイルを追加し、変更をリモート リポジトリにプッシュします。

これで、開発用ブランチを main とマージするマージ要求の作成時に、設定されているパイプラインがトリガーされ、Simulink モデルの自動マージが試行されるようになります。

  • 自動マージが正常に完了すると、自動マージによる解決が attemptAutomerge.sh によって main ブランチにプッシュされ、GitLab で検出されたマージの競合がクリアされます。attemptAutomerge.sh によって追加された自動マージによるコミットは、「Automerged models in CI pipeline」というカスタム マージ メッセージで識別できます。ここで [マージ] をクリックすると、ブランチのマージを main にプッシュできます。

Gif showing merge request with conflicts getting cleared by automerge

  • 自動マージが正常に完了しない場合は、新しいマージ要求を作成する前に、3-way マージ ツールを使用してマシン上で競合を解決する必要があります。

自動マージの結果やステータスに関する情報はジョブのログで確認することもできます。

  • 自動マージが正常に完了した場合、ログ出力は次のようになります。

Auto-merging models/f14_airframe.slx
Merge made by the 'ort' strategy.
models/f14_airframe.slx | Bin 48551 -> 48588 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
  • マージする対象がない場合、ログ出力は「Already up to date.」のようになります。

  • 自動マージが正常に完了しなかった場合、ログ出力は次のようになります。

merge: models/f14_airframe.slx - automerge not supported
Unable to automerge models. Conflicts must be resolved locally using the Three-Way Merge tool.

Simulink モデルの比較レポートをマージ要求に添付するようにパイプラインを構成することもできます。.gitlab-ci.yml の例については、Attach Model Comparison Report to GitLab Merge Requestsを参照してください。

メモ

  • mlAutomerge では、異なる MATLAB リリースで作成された Simulink モデルはマージできません。

  • mlAutomerge では、同じ MATLAB リリースで作成されたモデルについて、自動的にマージされたモデルが同じリリースで保存されます。それよりも新しいリリースが CI パイプラインで使用されている場合も同様です。

参考

トピック