技術情報

Simulink Check 用の Docker コンテナー、GitLab Runner、CI/CD自動化を活用した継続的インテグレーション

著者 ダルトン・ルルー、 MathWorks


はじめに

システムがより複雑になり、相互接続されるようになるにつれて、ソフトウェアの信頼性と整合性の重要性は高まり続けます。確立されたエンジニアリングのベストプラクティスを順守しているにもかかわらず、高整合性システムの開発は、依然として技術的に要求が厳しく、費用もかかる取り組みです。レビュー、分析、テスト、回帰作業には多大な労力がかかることから、エンジニアは常に無駄を削減しながらソフトウェア全体の品質を向上させる方法を模索しています。最新のトレンドの 1 つは、継続的インテグレーションと継続的デプロイメント (CI/CD) ソリューションへの推進です。

CI/CD プラクティスによりソフトウェア開発が変革され、高品質のソフトウェアを迅速かつ一貫して提供できるようになりました。しかし、このテクノロジーの急速な進歩と利用可能なツールの数により、堅牢な CI/CD ソリューションを作成することが非常に困難になる可能性があります。本記事では、GitLab® Runner、Docker®、Simulink Check™ 用の CI/CD オートメーションを用いた CI/CD パイプラインの包括的な実装手法を紹介します。

セーフティ クリティカルなソフトウェア開発と認証における CI/CD の重要性

CI/CD は、現代のソフトウェア開発、特に医療、自動車、航空宇宙産業などで使用されるセーフティ クリティカルなシステムでは不可欠な手法です。効率的な CI/CD ソリューションを導入すると、品質と信頼性が向上し、問題の検出と解決が迅速化され、規制基準への継続的な準拠が保証されます。要件を 1 回変更するだけで、一連の回帰作業が発生する可能性があるため、セーフティ クリティカルなソフトウェア開発プログラムをコスト効率よく管理するには、強力な CI/CD プロセスを導入することが不可欠です。

本記事では、MATLAB® と Simulink® のツール群と統合するために、ネイティブなモデリング環境外でツールを構成する手順を紹介します。

  • Simulink Check のプロセス アドバイザー
  • GitLab と GitLab Runner
    • GitLab CI/CD パイプラインの設定
  • Docker
    • Docker イメージの作成
    • ビルド引数
    • イメージのビルドとコンテナーの起動
    • GitLab Runner を実行してジョブの実行待機状態にする
    • Docker イメージのテストと トラブルシューティング 

Simulink Check のプロセス アドバイザー

CI/CD Automation for Simulink Checkの一部として利用できるプロセス アドバイザー アプリは、MATLAB 環境内でモデルベースデザインのパイプラインを開発する際の強力なツールであり、提供されているテンプレート .yml ファイルを介して外部環境で使用できます。MATLAB 環境内でプロセスパイプラインを構成したいモデル開発者は、次のドキュメンテーションを参照してください。

  1. プロセスモデルの設定:プロセスモデルのカスタマイズ
  2. モデルの検証と妥当性確認の自動化:プロセスア ドバイザーによるタスクの自動化と実行
  3. プロセス アドバイザーの使用に関するベスト プラクティス:プロセスモデル作成のベストプラクティス

GitLab と GitLab Runner

この時点で、プロセス モデルを GitLab の CI/CD パイプラインに取り込む準備が整いました。Simulink プロセスモデルの更新が GitLab パイプラインに自動的に反映されるようにするために、独自のアプローチが使用されます。プロセスモデルを静的 .yml ファイルに再作成する代わりに、プロセスモデル内の現在のタスクを含む別の .yml ファイルを生成する .yml ファイルを使用します。付録 A にあるパイプライン設定ファイル (.gitlab-ci.yml) の例をご参照ください。2 つの段階があります。

stages: 
 - SimulinkPipelineGeneration 
 - SimulinkPipelineExecution

最初のステージでは、2 番目のステージのパイプラインを生成します。

この時点で、パイプラインで使用されるモデリングツールと検証ツールのライセンスをどのように付与するかを検討することが重要です。1 つは、バッチトークンを使用する方法です。バッチトークンを使用するには、Batch Licensing Pilot からトークンを申請し、それを .yml ファイルの変数セクションに含める必要があります。

variables: 
 MLM_LICENSE_TOKEN: "<MATLAB_BATCH_TOKEN>"

すべての製品がバッチトークンをサポートしているわけではありません。このような場合は、従来のライセンス ファイル (.lic) を使用する必要がある場合があります。バッチトークンの詳細については、以下を参照してください。MATLAB のバッチライセンス トークン。トークン (あれば別の種類の資格情報) を .yml または Dockerfile にハードコーディングしないことが最善策であることにご留意ください。より安全なアプローチとして、環境変数を使用して Docker イメージを構築することを検討してください。

GitLab CI/CD パイプラインの設定

ジョブを管理するために GitLab プロジェクトを構成するのは簡単です。まず、GitLab が .yml ファイルの場所を認識していることを確認する必要があります。[設定] > [CI/CD] > [一般パイプライン] > [CI/CD設定ファイル] で、プロジェクトの .yml ファイルへのパス (理想的なファイル名は「.gitlab-ic.yml」) を指定します (図 1)。

GitLab CI/CD パイプラインの構成設定画面のスクリーンショット。ユーザーが .yml ファイルへのパスを指定することで、自動ビルドを正しく構成できます。

図 1.GitLab CI/CD パイプラインの構成設定。

次に、GitLab で新しいランナーを作成する必要があります。この操作により、後で Docker コンテナーを GitLab Runner インスタンスに登録する際に使用する gitlab-runner-token が発行されます (図 2)。

GitLab Runner 設定ページのスクリーンショット。CI/CD ジョブ実行のランナーを管理する方法を示しています。

図 2.GitLab Runner の設定。

[設定] > [CI/CD] > [ランナー] > [新しいプロジェクトランナー] で、タグを入力し、[ランナーの作成] をクリックします (図 3)。

プロジェクト ランナーを新規作成する GitLab インターフェースのスクリーンショット。タグ入力用のフィールドとパイプライン ジョブのランナー作成を開始するボタンを示しています。

図 3.GitLab で新しいランナーを作成します。

ランナーが作成されたら、ランナーの認証トークンをコピーして保存します (図 4)。

GitLab Runner の認証トークンのスクリーンショット。今後のランナー登録のために、トークンを安全に保存することが重要です。

図 4.ランナーの認証トークン。無くさないようにしてください。

Docker

Docker イメージの作成

これはおそらくプロセスの中で最も難しい部分です。Docker イメージにすべてのツール依存関係がインストールされているだけでなく、それらのツールを使用するライセンスも付与されていることを確認する必要があります。Docker イメージは、OS ディストリビューションのいずれかにできる点に注意することも重要ですこの例では、Ubuntu 22.04 を使用します。

まず、Simulink のプロセスモデルと GitLab Runner を実行するために必要なすべてのツールをインストールします。Dockerfile で、ベースとなる MATLAB イメージをプルします。

FROM mathworks/matlab-deps:${MATLAB_DOCKER_RELEASE}

その後、必要な基本依存関係のいくつかのインストールにすぐに取り掛かります。ビルド変数については後ほど説明します。インストール手順の詳細については、付録 B の Dockerfile の例をご参照ください。Dockerfile は MPM の依存関係のインストールから開始します。後で必要な MATLAB と Simulink の製品 (Simulink Code Inspector™ を除く) のインストールに使用されます。次に、matlab-proxy の依存関係をインストールします。これらをインストールしたら、MPM を使用して必要なツールをインストールし、ライセンスの認証方法を設定します。また、Docker イメージ上に gitlab-runner をインストールし、先ほど保存した gitlab-runner-token を使って登録する必要があることにご注意ください。以下の抜粋は、希望の構成オプションを使用してインストールと登録の方法を示しています。

RUN curl -L 
 "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash && \ 
 sudo apt-get install --no-install-recommends --yes \ 
 gitlab-runner && \ 
 sudo apt-get clean && sudo apt-get autoremove && \ 
 gitlab-runner start && \ 
 sudo gitlab-runner register --non-interactive \ 
 --url &quot;< gitlab-url> 「\ 
 --token "${GITLAB_TOKEN}" \ 
 --docker-image ${IMAGE_NAME} \ 
 --executor "shell"

Dockerfile に示されているように、MPM はSimulink Code Inspector を除く、必要なすべての MATLAB と Simulink のツールをインストールできます。Simulink Code Inspector を使用する場合は、MathWorks のウェブサイトから .iso ファイルをダウンロードし、そのファイルからインストールする必要があります。詳細については、mpm install のドキュメンテーションをご参照ください。

製品がインストールされたので、ライセンスの認証方法を設定する必要があります。現在、ライセンス認証には 3 つの方法があります。

  • バッチトークンの使用: MATLAB のバッチライセンス トークンを使用できるようにするため、matlab-batch をインストールしてください。Polyspace Code Prover Server™ とPolyspace Bug Finder Server™ はバッチトークン ライセンスをサポートしていないため、CI/CD 環境でデスクトップ用のPolyspace Code Prover™ と Polyspace Bug Finder™ を使用するとソフトウェア ライセンス契約に違反することに注意してください。matlab-batch をインストールするには、以下の内容を Dockerfile に追加してください。
    • RUN wget -q https://ssd.mathworks.com/supportfiles/ci/matlab-batch/v1/glnxa64/matlab-batch \ 
          && sudo mv matlab-batch /usr/local/bin \ 
          && sudo chmod +x /usr/local/bin/matlab-batch
      
  • ライセンス サーバーの使用: ライセンス情報を環境変数としてバインドする場合は、ネットワーク ライセンスを提供するマシンのホストとポートを指定します。これはライセンスの推奨オプションです。以下を使用してビルドすることが可能です。
    • --build-arg LICENSE_SERVER=27000@MyServerName
      
    • あるいは、以下のコマンドを使用して、Dockerfile でライセンス サーバーを直接指定することもできます。
    • ENV MLM_LICENSE_FILE=27000@flexlm-server-name
      
  • ライセンス (.lic) ファイルの使用: ライセンス ファイルをコンテナーに直接配置することは推奨されません。ただし、代わりに必要なライセンスファイルを含むドライブをコンテナーにマウントすることはできます。ライセンスファイルにマウントされたドライブを使用する場合は、サンプル Dockerfile に次のいずれかの行を含めます。
    • COPY ${PATH_TO_LICENSE} /opt/matlab/licenses/
      
    • ADD ${PATH_TO_LICENSE} /opt/matlab/licenses/
      

最後にインストールされた依存関係について: 一部のレポートでは、モデルのスクリーンショットをキャプチャするためにディスプレイが必要になります。Xvfbは、 padv.builtin.task.GenerateSDDReport padv.builtin.task.GenerateSimulinkWebViewpadv.builtin.task.GenerateModelComparison などのタスク用に仮想ディスプレイを提供します。これは、MPM 依存関係の一部としてインストールする必要があります。ユーザーがパイプラインを実行する際に、MPM がインストールされていることを確認してください。

ビルド引数

この例では、Dockerfile は複数のビルド引数を受け入れるように構成されています。ビルド引数は、複数のイメージをビルドするために使用できる 1 つの Dockerfile を維持する場合や、時間の経過とともに変化する可能性のあるビルド情報や Dockerfile 自体にハードコードすることが望ましくないビルド情報をユーザーが渡せるようにする場合に役立ちます。

この Dockerfile には以下のビルド引数が含まれています ( --build-arg)。

# docker build      --build-arg MATLAB_DOCKER_RELEASE=<matlab-docker-release> 
#      --build-arg MATLAB_VERSION=<matlab-release> 
# --build-arg GITLAB_TOKEN=<gitlab-token> 
# --build-arg MATLAB_BATCH_TOKEN=<matlab-token> 
# --build-arg IMAGE_NAME=<image-image> 
# --build-arg PATH_TO_LICENSE=<path-to-license>

Dockerfile の先頭で、ビルド コマンドに値が指定されていない場合に備えて、各引数のデフォルト値を指定できます。

ARG MATLAB_DOCKER_RELEASE=r2023b-ubuntu22.04 
ARG MATLAB_VERSION=r2023b 
ARG MATLAB_BATCH_TOKEN="<USER>|TOKEN_ML|<TOKEN>" 
ARG GITLAB_TOKEN=<TOKEN> 
ARG IMAGE_NAME=matlab_image 
ARG PATH_TO_LICENSE=<PATH_TO_LICENSE>

Dockerfile の FROM 文の後に、使用する変数を宣言する必要があります。

FROM mathworks/matlab-deps:${MATLAB_DOCKER_RELEASE}
 
ARG MATLAB_VERSION
ARG MATLAB_BATCH_TOKEN
ARG GITLAB_TOKEN
ARG IMAGE_NAME
ARG PATH_TO_LICENSE

上記の抜粋では、MATLAB_DOCKER_RELEASE の値には ${<var>} という構文を用いてアクセスしていることにご注意ください。

イメージのビルドとコンテナーの起動

Dockerfile が準備できたので、Docker ターミナルから最初のコンテナーを構築できます。

  • Docker ターミナルから、Dockerfile の場所に cd と入力して確認します。
> cd <path-to-dockerfile> 
> ls
  • Docker イメージをビルドします。
> docker build -t <image-name> -f <dockerfile-name>

Docker ファイルでビルド引数が使用されている場合、ビルド コマンドは次のようになります。

> docker build --build-arg PATH_TO_LICENSE=<path-to-license> --build-arg GITLAB_TOKEN=<gitlab-runner-token> --build-arg MATLAB_BATCH_TOKEN="<USER>|TOKEN_ML|<TOKEN>" -t <image-name> -f <dockerfile-name>

コンテナーがビルドされると、UI を使用して Docker から実行することも、ターミナルから実行することもできます。

> docker run --name <container_name> -v <optional_volume> <image_name>:latest

Dockerfile は、既にイメージを gitlab-runner として登録しています。これを確認するには、Docker 内の /etc/gitlab-runner/config.toml ファイルを表示し、正しいランナーが登録されていることを確認してください (図 5)。

Docker コンテナー内の config.toml ファイルを示すスクリーンショット。GitLab Runner が Docker イメージに正常に登録されたことが確認できます。

図 5.GitLab Runner が Docker イメージに正常に登録されたことを確認します。

ランナーの登録が正しくない場合、または変更や再起動が必要な場合は、Docker イメージのターミナルで以下のコマンドを使用してランナーの登録を解除し、正しいランナーを復元します。

> sudo gitlab-runner unregister --token "<gitlab_token>" 
> sudo gitlab-runner register --non-interactive --url "<gitlab-url>" --token "<gitlab-runner-token>" --executor "shell"

GitLab Runner を実行してジョブの実行待機状態にする

コンテナーが起動し、GitLab Runner として登録されたら、gitlab-runner を開始してジョブの実行待機状態にできます (図 6)。コンテナーのターミナルから、次のコマンドを使用してランナーを起動します。

> sudo gitlab-runner run
GitLab パイプラインの実行ステータスを示すスクリーンショット。ユーザーはジョブの進行状況を監視し、パイプラインの実行が成功したことを確認できます。

図 6.GitLab パイプラインの実行とステータス。

パイプラインを開始する方法は多数あり、スケジュールされたビルド、手動またはオンデマンドのビルド、GitLab リポジトリへの新しいコミットに基づくビルドなどがあります (図 7)。

GitLab の詳細なパイプライン ステータス ページを示すスクリーンショット。ユーザーは、ジョブのステージと結果を追跡して、CI/CD プロセスの可視性を向上させることができます。

図 7.GitLab パイプラインの詳細なステータス ページ。

  • スケジュールされたビルド:GitLabでは、[ビルド] > [パイプラインスケジュール] を使用して、パイプラインの実行日時をスケジュールできます。
  • コミットビルドの場合:デフォルトでは、GitLab はリポジトリがプッシュされるたびにパイプラインを実行します。ビルドのトリガー方法を制御するには、.yml ファイルを変更するか、コミット メッセージに特定のタグを追加する必要があります。詳しくは、ジョブの実行方法の制御をご参照ください。
  • 手動ビルド:GitLabでは、[設定] > [CI/CD] > [パイプラインの実行] を使用して手動でビルドをトリガーできます。[設定] > [CI/CD] > [パイプライン・トリガー・トークン] に、curl を使ってターミナルからビルドをトリガーする方法が記載されています。

パイプラインの実行が完了すると、パイプライン内の最後のジョブ Collect_Artifacts から結果を確認してダウンロードできます (図 8)。

GitLab パイプライン出力ターミナルを示すスクリーンショット。ユーザーはここで、パイプラインの最終ジョブの結果を表示してダウンロードできます。

図 8.GitLab パイプラインの出力端子と結果。

Dockerイメージのテストとトラブルシューティング

Docker イメージをセットアップして構成するときには、途中でテストできることが重要です。期待どおりに動作していることを確認するために、Docker コンテナーのターミナルで実行できるいくつかの便利な手順を次に示します。

  1. コンテナーのターミナルからMATLAB のインストールを確認します。
$ matlab-batch &quot;disp('Hello, World.')&quot;
  1. 特定のレポート (SDD) を生成するには、 MATLAB にディスプレイが必要です。これには、Xvfb を使用できます。Xvfb をテストするには、以下を実行します。
$ sudo xvfb-run -e /dev/stdout -a matlab-batch &quot;disp('Hello, World.')&quot;
  1. MATLAB パイプラインを手動で実行します。
    1. リポジトリをクローンします (資格情報の入力を求められる場合があります。2FA にはアクセス トークンが必要です。これは、GitLab の左側のサイドバーに移動してアバターを選択すると見つかります)。[プロフィールの編集] > [アクセストークン] > [新しいトークンを追加] を選択します。)
      $ sudo git clone <gitlab-repo-url> <local-repo>
      $ sudo git clone https://<user>:<access_token>@<gitlab-repo-url> <local-repo>
      
    2. ディレクトリを MATLAB プロジェクトに変更します。
      $ cd <local-repo>/<project-path>
      
    3. パイプラインの最初のステージを実行します。
      $ sudo -E matlab-batch -logfile "MATLAB_LOG_FILE" -nodesktop "cp = openProject(pwd); padv.pipeline.generatePipeline( padv.pipeline.GitLabOptions(PipelineArchitecture = padv.pipeline.Architecture.SerialStagesGroupPerTask, Tags = 'docker-matlab', GeneratedYMLFileName = 'simulink_pipeline.yml', GeneratedPipelineDirectory = fullfile('derived','pipeline'), MatlabLaunchCmd = 'xvfb -a matlab-batch', AddBatchStartupOption = false, EnableArtifactCollection = 'always'));"
      
    4. simulink_pipeline.yml ファイルが生成されていることを確認します。
      $ cd derived 
      $ ls
      

まとめ

高い品質、信頼性、コンプライアンス基準を維持するためには、CI/CD の統合が非常に重要です。CI/CD プラクティスにより開発プロセスが合理化され、すべての変更が厳格な認証要件を満たすことを保証しながら、更新を迅速かつ一貫して配信できるようになります。このアプローチは生産性を向上させるだけでなく、認定環境で重大なエラーや非準拠のリスクも大幅に軽減します。

この記事で説明したツールと手法を適用することで、組織は Docker と GitLab Runner を使用して堅牢な環境を構築し、効率的でコストを節約できる CI/CD パイプラインを作成できるようになります。このパイプラインは、開発ライフサイクルをより効率的かつ信頼性の高いものにし、各種規格への準拠も支援します。最終的には、高品質で認証基準を満たすシステムを自信を持って効率的に提供できるようになります。

著者について

Dalton L'Heureux は MathWorks のシニア コンサルタントで、セーフティ クリティカルで整合性の高いシステムに取り組むエンジニアをサポートしています。DO-178C 認証などの用途向けに、システムズエンジニアリング、検証や妥当性確認、コード生成などの各ツールをチームが適用できるようにすることに注力しています。

MathWorks に入社する前、Dalton は Rockwell Collins でシステムエンジニアとして勤務し、仕様モデリングとテストケース生成の専門家になりました。同氏の取り組みは、ボーイング 777X やボンバルディア C シリーズなどの航空機の飛行ソフトウェアのコスト効率の高いテストに貢献しました。

エンブリー・リドル航空大学で航空宇宙工学の学士号と無人・自律システム工学の修士号を取得しています。これまでの役職を通じて、モデルベースデザインと MATLAB は、複雑なシステムの開発と検証に対するアプローチにおいて一貫したテーマでした。

# Copyright 2023 - 2025 The MathWorks, Inc.

variables:
 MATLAB_LOG_FILE:"MATLAB_Log_Output.txt"
 GIT_SUBMODULE_STRATEGY: recursive
 MLM_LICENSE_TOKEN: "<USER>|TOKEN_ML|<BATCHTOKEN>"

stages:
 - SimulinkPipelineGeneration
 - SimulinkPipelineExecution

# Do not change the name of the jobs in this pipeline
SimulinkPipelineGeneration:
 stage:SimulinkPipelineGeneration
 tags:
 - docker-matlab
 script:
 # Open the project and generate the pipeline using appropriate options 
 sudo -E matlab-batch 
 -logfile "MATLAB_LOG_FILE" 
 -nodesktop 
 "cp = openProject(pwd); 
 padv.pipeline.generatePipeline( 
 padv.pipeline.GitLabOptions( 
 PipelineArchitecture = padv.pipeline.Architecture.SerialStagesGroupPerTask, 
 Tags = 'docker-matlab', 
 GeneratedYMLFileName = 'simulink_pipeline.yml', 
 GeneratedPipelineDirectory = fullfile('derived','pipeline'), 
 MatlabLaunchCmd = 'xvfb-run -a matlab-batch', 
 AddBatchStartupOption = false, 
 EnableArtifactCollection = 'always'));" 
 artifacts:
 paths:
 # This file is generated automatically by 
 # padv.pipeline.generatePipeline.Update this field if the 
 # name or location of the generated pipeline file is changed 
 - derived/pipeline

SimulinkPipelineExecution:
 stage:SimulinkPipelineExecution
 trigger:
 include: 
 - artifact: derived/pipeline/simulink_pipeline.yml
 job:SimulinkPipelineGeneration
 strategy: depend

 # Do not change the name of this variable
 variables:
 PADV_ROOT_PIPELINE_ID: $CI_PIPELINE_ID

# Copyright 2023 - 2025 The MathWorks, Inc. 

# docker build --build-arg MATLAB_DOCKER_RELEASE=<matlab-docker-release> 
# --build-arg MATLAB_VERSION=<matlab-release> 
# --build-arg GITLAB_TOKEN=<gitlab-token> 
# --build-arg MATLAB_BATCH_TOKEN=<matlab-token> 
# --build-arg IMAGE_NAME=<image-image> 
# -t <image-image> 
# -f <dockerfile-name> . 

# Example: $ docker build --build-arg PATH_TO_LICENSE=<path-to-license> --build-arg GITLAB_TOKEN=<gitlab-token> --build-arg MATLAB_BATCH_TOKEN="<USER>|TOKEN_ML|<TOKEN>" -t matlab_image -f matlab.Dockerfile . 

# Note:It is best practice to pass the MATLAB Batch Token during execution 
# time rather than at build time as shown here.The token was passed at 
# build time here for simplicity purposes.

# To specify which MATLAB release to install in the container, edit the value of the MATLAB_RELEASE argument. 
# Use lower case to specify the release, for example:ARG MATLAB_RELEASE=r2023b 

ARG MATLAB_DOCKER_RELEASE=r2023b-ubuntu22.04 
ARG MATLAB_VERSION=r2023b 
ARG MATLAB_BATCH_TOKEN="<USER>|TOKEN_ML|<TOKEN>" 
ARG GITLAB_TOKEN=<TOKEN> 
ARG IMAGE_NAME=matlab_image 
ARG PATH_TO_LICENSE=<PATH_TO_LICENSE>

# When you start the build stage, this Dockerfile by default uses the Ubuntu-based matlab-deps image. 
# To check the available matlab-deps images, see: https://hub.docker.com/r/mathworks/matlab-deps 
FROM mathworks/matlab-deps:${MATLAB_DOCKER_RELEASE}

# Declare the global argument to use at the current build stage 
ARG MATLAB_VERSION 
ARG MATLAB_BATCH_TOKEN 
ARG GITLAB_TOKEN 
ARG IMAGE_NAME 
ARG PATH_TO_LICENSE 

RUN sudo apt-get update && \ 
 sudo apt-get install --no-install-recommends --yes \ 
 curl && \ 
 sudo apt-get clean && sudo apt-get autoremove 

RUN curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash && \ 
 sudo apt-get install --no-install-recommends --yes \ 
 gitlab-runner && \ 
 sudo apt-get clean && sudo apt-get autoremove && \ 
 gitlab-runner start && \ 
 sudo gitlab-runner register --non-interactive \ 
 --url "https://external-git.mathworks.com/" \ 
 --token "${GITLAB_TOKEN}" \ 
 --docker-image ${IMAGE_NAME} \ 
 --executor "shell" 

# Install mpm dependencies 
RUN export DEBIAN_FRONTEND=noninteractive && \ 
 sudo apt-get update && \ 
 sudo apt-get install --no-install-recommends --yes \ 
 wget \ 
 ca-certificates \ 
 xvfb \ 
 build-essential \ 
 clang \ 
 libopenblas-dev \ 
 liblapacke-dev \ 
 liblapack-dev \ 
 libomp-dev \ 
 unzip \ 
 iproute2 \ 
 git \ 
 libeigen3-dev \ 
 cmake \ 
 psmisc && \ 
 sudo apt-get clean && sudo apt-get autoremove 

RUN sudo apt-get update && sudo apt-get install libunwind-dev -y && \ 
 sudo apt-get clean && sudo apt-get autoremove 

# Install dependencies for matlab-proxy 
RUN DEBIAN_FRONTEND=noninteractive && \ 
 sudo apt-get update && sudo apt-get install --no-install-recommends -y \ 
 python3 \ 
 python3-pip \ 
 && sudo apt-get clean \ 
 && sudo rm -rf /var/lib/apt/lists/* 

RUN python3 -m pip install matlab-proxy 

# Add "matlab_user" user and grant sudo permission. 
RUN adduser --shell /bin/bash --disabled-password --gecos "" matlab_user && \ 
 echo "matlab_user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/matlab_user && \ 
 chmod 0440 /etc/sudoers.d/matlab_user 

# Set user and work directory 
USER matlab_user 
WORKDIR /home/matlab_user 

# Run mpm to install MATLAB in the target location and delete the mpm installation afterwards 
# Add toolboxes on --products line replacing spaces with _ aka Simulink_Test 
# Note:Simulink_Code_Inspector is only supported by mpm when installing from an iso file: 
RUN wget -q https://www.mathworks.com/mpm/glnxa64/mpm && \ 
 chmod +x mpm && \ 
 sudo ./mpm install \ 
 --release=${MATLAB_VERSION} \ 
 --destination=/opt/matlab \ 
 --products MATLAB Simulink Stateflow \ 
 Requirements_Toolbox \ 
 Simulink_Check CI/CD_Automation_for_Simulink_Check Simulink_Design_Verifier \ 
 Simulink_Test Simulink_Coverage \ 
 MATLAB_Coder MATLAB_Compiler Simulink_Coder Simulink_Compiler Embedded_Coder \ 
 Polyspace_Bug_Finder_Server Polyspace_Code_Prover_Server \ 
 MATLAB_Report_Generator Simulink_Report_Generator \ 
 DSP_System_Toolbox Simulink_3D_Animation Phased_Array_System_Toolbox \ 
 Computer_Vision_Toolbox Image_Processing_Toolbox \ 
 System_Identification_Toolbox Instrument_Control_Toolbox Aerospace_Toolbox \ 
 Aerospace_Blockset Signal_Processing_Toolbox Symbolic_Math_Toolbox \ 
 Automated_Driving_Toolbox DDS_Blockset Geoid_Data_for_Aerospace_Toolbox \ 
 || (echo "MPM Installation Failure.See below for more information:" && cat /tmp/mathworks_root.log && false) && \ 
 sudo rm -rf mpm /tmp/mathworks_root.log && \ 
 sudo ln -s /opt/matlab/bin/matlab /usr/local/bin/matlab 

# One of the following 3 ways of configuring the license server to use must be 
# uncommented. 

# 1) BATCH TOKEN 
# Install matlab-batch to enable the use of MATLAB batch licensing tokens. 
RUN wget -q https://ssd.mathworks.com/supportfiles/ci/matlab-batch/v1/glnxa64/matlab-batch \ 
 && sudo mv matlab-batch /usr/local/bin \ 
 && sudo chmod +x /usr/local/bin/matlab-batch 

# 2) LICENSE SERVER 
#ARG LICENSE_SERVER 
# Specify the host and port of the machine that serves the network licenses 
# if you want to bind in the license info as an environment variable.This 
# is the preferred option for licensing.It is either possible to build with 
# Something like --build-arg LICENSE_SERVER=27000@MyServerName, alternatively 
# you could specify the license server directly using 
# ENV MLM_LICENSE_FILE=27000@flexlm-server-name 
#ENV MLM_LICENSE_FILE=$LICENSE_SERVER 

# 3) LICENSE FILE 
# Alternatively, you can put a license file into the container. 
# You should fill this file out with the details of the license 
# server you want to use and uncomment the following line. 
#COPY ${PATH_TO_LICENSE} /opt/matlab/licenses/ 
ADD ${PATH_TO_LICENSE} /opt/matlab/licenses/ 

ENV ENV="/home/matlab_user/.profile" 
ENV BASH_ENV="/home/matlab_user/.profile" 
ENV MLM_LICENSE_TOKEN=${MATLAB_BATCH_TOKEN} 

ENTRYPOINT ["xvfb-run"] 
CMD ["/bin/bash"]

公開年 2025

関連する機能の記事を見る