次の方法で共有


Microsoft ホステッド エージェントと Azure Pipelines を使用するビルドの自動化

Microsoft Azure DevOps で実行される任意のビルド エージェントで、Windows のビルドと配置可能なパッケージの作成プロセスを自動化できます。 これらのエージェントには、Microsoft-ホステッド エージェントが含まれています。 この方法は、ビルド バーチャル マシン (VM) の配置の設定、保守、およびコストを回避するのに役立ちます。 また、ビルド エージェントの既存の設定を再利用して、他の .NET ビルド自動化を実行することもできます。

注意

この機能は、コンパイルとパッケージングに限定されています。 このランタイムを必要とする X++ 単体テスト (SysTest)、データベースの同期、またはその他の機能 (Application Object Server [AOS] ) やそのコンポーネントはサポートされていません。

X++ コードをビルドするための前提条件

プロジェクトのビルド

Azure DevOps での X++ のビルドに .NET ツールを使用するには、Microsoft Build Engine (MSBuild) とカスタム X++ のターゲットが使用されます。 X++ ソース コード レポジトリには、ビルドする各パッケージの X++ プロジェクトが含まれている必要があります。

オプションで、ソリューション ファイルを使用して、C# プロジェクトの依存関係を含むプロジェクトをグループ化したり、明示的なビルド順序を指定したりできます。 リポジトリにプロジェクトがまだ含まれていない場合は、Visual Studio にプロジェクトを作成できます。

フォルダが存在することを確認し、モデルごとに使用している Azure DevOps のモデル メタデータ フォルダ内のファイルがチェックインされます。

メモ

既存の X++ プロジェクト (rnrproj) を使用する場合は、Visual Studio ツールを使用して、それを作成するか、または開いて保存しておく必要があります。

1 つのパッケージには複数のモデルを含めることができますが、常に完全にビルドする必要があります。 したがって、パッケージ全体をビルドするために必要なプロジェクトは 1 つだけです。 また、プロジェクトにはオブジェクトを含める必要はありませんが、プロジェクトに含めることができます。

NuGet パッケージ

NuGet パッケージは、Azure DevOps ビルド パイプラインに使用されます。 このプログラムには、X++ コンパイラ (xppc.exe)、アプリケーション プラットフォームおよび Application Suite のモジュールなど、X++ コードの作成に必要なツールが含まれています。

次の NuGet パッケージは、Microsoft Dynamics 365 Lifecycle Services (LCS) の共有アセット ライブラリで使用できます。

  • Microsoft.Dynamics.AX.Platform.CompilerPackage

    • このパッケージには、ビルドを実行するために必要な X++コンパイラおよび関連ツールが含まれています。
    • 通常、パッケージの名前は、 PUXX/10.X.XX – コンパイラ ツール です。 
  • Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp

    • このパッケージには、アプリケーション プラットフォーム モジュールおよび関連モジュールのコンパイル済み X++ コードが含まれています。 このコードは、ビルドに対して最適化されています。
    • 通常、パッケージの名前は、PUXX/10.X.XX – プラットフォーム ビルド リファレンス です。 
  • Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp

    • このパッケージには、アプリケーション モジュールおよび関連モジュールのコンパイル済み X++ コードが含まれています。 このコードは、ビルドに対して最適化されています。
    • 通常、パッケージの名前は、PUXX/10.X.XX – アプリケーション 1 ビルド リファレンス です。 
  • Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp

    • このパッケージには、アプリケーション モジュールおよび関連モジュールのコンパイル済み X++ コードが含まれています。 このコードは、ビルドに対して最適化されています。
    • 通常、パッケージの名前は、PUXX/10.X.XX – アプリケーション 2 ビルド リファレンス です。 
  • Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp

    • このパッケージには、アプリケーション スイート モジュールのコンパイル済み X++ コードが含まれています。 このコードは、ビルドに対して最適化されています。
    • 通常、パッケージの名前は、PUXX/10.X.XX – アプリケーション スイート ビルド リファレンス です。 

メモ

Lifecycle Services にはリリースあたり 6 個 NuGet パッケージが含まれます。 名前が付いたパッケージ XX/10.X.XX : アプリケーションは、参照を構築します 、APPLICATION XX/10.X.XX - アプリケーション1ビルド リファレンス および XX/10.X.XX – アプリケーション2ビルド リファレンス。 これは不要です。 分割梱包はより小さく、単一梱包の代わりに使用できます。

重要

NuGet パッケージには、含まれているプラットフォームやアプリケーション コードに関するバージョンの詳細が含まれます。 Dynamics 365 財務と運用環境の以下のバージョンを必ずダウンロードしてください。 品質更新プログラムに対応する修正プログラム パッケージがリリースされます。

NuGet パッケージのインストール

次の手順に従って、NuGet パッケージのインストールを完了させます。

  1. フィードを作成します。 詳しい情報については、フィードを作成する を参照してください。

  2. フィードに接続します。 プロジェクトの設定 セクションで、コピー ボタンを選択して、nuget.config XML をクリップボードにコピーします。 詳細については、フィードに接続する を参照してください。

  3. メモ帳で、新しいファイルを作成し、前のレポートでコピーした XML を貼り付けて、ファイルを nuget.config として保存します。

  4. Azure DevOps プロジェクトで、Dynamics 365 財務と運用アプリ のコード リポジトリに移動します。

  5. 前のステップで作成した nuget.config ファイルを自分のリポジトリにアップロードします。 パスはビルド パイプラインの変数で定義されるので、nuget.configファイルはソース管理の任意の場所に格納できます。 ただし、Trunk/Main/Projects などの単純な 場所をお勧めします。

  6. NuGet をダウンロードします。 これを、Lifecycle Services から以前ダウンロードした NuGet パッケージのあるフォルダーに保存します。

  7. パッケージの公開 でプロジェクト スコープのフィードのコマンドを使用して各 Dynamics 365 NuGet パッケージを公開します。 たとえば、コンパイラ パッケージのコマンドは、このコードと似ています。

    nuget.exe push -Source https://pkgs.dev.azure.com/<orgname>/<projectname>/_packaging/<feedname>/nuget/v3/index.json -ApiKey AZ Microsoft.Dynamics.AX.Platform.CompilerPackage.nupkg
    
  8. 5 つの NuGet パッケージが Azure DevOps プロジェクト アーティファクトにあることを確認することでそのパッケージが公開されていることを確認します。

メモ

無料の Azure DevOps 組織には、Azure コンポーネントの限られたストレージしかありません。 ストレージ容量を解放するために、古いバージョンと使用していないバージョンを削除することを検討してください。 詳細については、Azure Artifacts のサインアップ を参照してください。

ビルド パイプラインで NuGet パッケージを使用する

ビルド パイプラインでは、パッケージを識別し、パッケージが見つかる場所を指定するために 2 つのファイルが使用されます。 ファイルの 1 つが nuget.configget.config ファイル、もう一方のファイルが packages.config ファイルです。 これらのファイルのパスは NuGet コマンドの明示的な入力であり、ビルド パイプラインの様々なセクションで定義することができます。

nuget.config file ファイルは、NuGet にパッケージがあるソース フィードを与えます。 これは、この記事の NuGet パッケージのインストール セクションで作成しました。

packages.config ファイルでは、パッケージとそのバージョンが指定されています。 より新しいバージョンに対してビルドする場合は、packages.config ファイルのバージョンを更新します。 package.config ファイルは手動で作成します。

次の例は、一般的な X++ ビルドに必要な 3 つの主要なパッケージを含む、packages.config ファイルを示しています。

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp" version="7.0.7279.40" targetFramework="net40" />
    <package id="Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp" version="10.0.1935.21" targetFramework="net40" />
    <package id="Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp" version="10.0.1935.21" targetFramework="net40" />
    <package id="Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp" version="10.0.1935.21" targetFramework="net40" />
    <package id="Microsoft.Dynamics.AX.Platform.CompilerPackage" version="7.0.7279.40" targetFramework="net40" />
</packages>

追従するをビルド パイプラインで使用 NuGet packages.config を作成するには、次の手順を実行します。

  1. 前の XML をコピーします。
  2. メモ帳で、新しいファイルを作成し、前のレポートでコピーした XML を貼り付けます。 例のバージョン番号を実際の NuGet パッケージに置き換えます。
  3. ファイルを packages.config として保存します。
  4. Azure DevOps プロジェクトで、財務と運用アプリ のコード リポジトリに移動します。
  5. packages.config ファイルを自分の Azure DevOps リポジトリにアップロードします。 パスはビルド パイプラインの変数で定義されるので、.packages.config ファイルはソース管理の任意の場所に格納できます。 ただし、機能を変更するために、nuget.config ファイル (Trunk/Main/Projects など) に使用した場所と同じ場所を使用することをお勧めします。

パイプラインの作成

Azure DevOps は、ビルドを自動化するために使用できるパイプラインを提供します。 パイプラインには、YML と Classic の 2 つのタイプがあります。 YML パイプラインは、Git ソース管理リポジトリを使用している場合にのみ使用できます。 Classic パイプラインを使用して、Team Foundation バージョン管理 (TFVC) リポジトリをビルドする必要があります。 詳細は、YAML と Classic パイプラインの比較 を参照してください。

このセクションでは、パイプラインで X++ コードを作成するために必要な手順について説明します。

テンプレートからの基本的なビルド パイプラインの作成 (推奨される方法)

ビルド パイプラインを作成するには、次の手順に従います。

  1. xpp-classic-ci.json ファイルを Dynamics365-Xpp-Samples-Tools GitHub リポジトリからダウンロードします。

  2. Azure DevOps で、パイプライン を選択します。

  3. 選択を構成し、次にメニューで パイプラインをインポート を選択します。 前の手順でダウンロードした .json ファイルを検索して、インポートします。

    メモ

    クラシック パイプラインを使用するには、Azure DevOps で、組織設定>パイプライン>設定 に移動し、次の両方の設定が無効 (オフ) を確認します。

    • クラシック ビルド パイプラインの作成の無効化
    • クラシック リリース パイプラインの作成の無効化
  4. インポートされたパイプラインは自動的に開きます。 パイプライン設定で、パイプラインに名前を付け、エージェント プールを設定し、最新のウィンドウ に設定します。

  5. ソースの取得 を選択して、ソースを TFVC に設定します。 ワークスペース マッピング セクションが開きます。

  6. サーバー パス フィールドの横の省略記号 (...) ボタンをクリックし、メタデータとプロジェクト フォルダーを含むフォルダーを選択します。 例えば、フォルダーは $/<RepoName>/Trunk/Main になります。

  7. 変数 タブで、NugetConfigPath ポイントが nuget.congig が自分の Dynamics 365 財務と運用レポジトリに保存されている場所にあることを確認します。 例えば、この場所は $(Build.SourcesDirectory)\プロジェクト にあります。

  8. ビルド ソリューション タスクで、Visual Studio ソリューションを Visual Studio 2022 またはそれ以降のバージョンに設定します。

  9. パイプラインを保存します。

基本的なビルド パイプラインを手動で設定する

X++ をコンパイルし、配置可能なパッケージを作成するための基本的なパイプラインを実行するには、いくつかの手順が必要です。 パイプラインにはバージョン管理手順とパッケージ手順が含まれている必要があります。

これらのステップをパイプラインに追加する前に、Azure DevOps 用 Dynamics 365 Finance and Operations Tools 拡張機能が有効になっていて、Azure DevOps 組織にインストールされている必要があります。 組織に拡張機能をインストールする方法の詳細については、Azure DevOps のドキュメント を参照してください。

次の 6 つのタスクをパイプライン エージェントする必要があります。

  1. NuGet パッケージをインストールします
  2. モデルバージョンを更新します。
  3. ソリューションまたはプロジェクトをビルドする
  4. エージェントに NuGet 3.3.0 またはそれ以前のバージョンをインストールする
  5. 配置可能パッケージを作成する
  6. 配置可能パッケージを公開する

タスク 1。 NuGet パッケージをインストールする

NuGet パッケージをインストールするには、NuGet タスクを使用して、タスク プロパティのカスタム コマンドに変更できます。 カスタム コマンドは、このコードのようになります。

install -Noninteractive $(NugetConfigsPath)\packages.config -ConfigFile $(NugetConfigsPath)\nuget.config -Verbosity Detailed -ExcludeVersion -OutputDirectory "$(NugetsPath)" 

メモ

抽出された NuGet パッケージの使用を容易にするために、NuGet インストール オプションを使用して、-ExcludeVersionNuGet コマンドライン オプション を指定することを検討してください。 抽出したパッケージのバージョンに関係なく、抽出されたパッケージ パスをビルドで使用できます。

タスクの NuGetInstaller@0 バージョンは廃止されたため、Microsoft では代わりに NuGetCommand@2 バージョンの使用をお勧めします。

タスク 2。 モデルバージョンを更新する

モデル バージョンの更新 の手順に タスク従って、モデル バージョンの更新 を実行します。

タスク 3。 ソリューションまたはプロジェクトをビルドする

この Visual Studio ビルド タスクは、ソリューションとプロジェクトをビルドするために使用する Visual Studio バージョンを選択します。 このフィールドを使用タスク、フィールドに MSBuild のタスクする必要があります。

次の表では、MSBuild 引数で使用できる変数について説明します。

引数 内容
/p:BuildTasksDirectory 抽出されたコンパイラ ツール NuGet パッケージのパス (DevAlm フォルダー内のサブフォルダを含む)。
/p:MetadataDirectory X++ ソース コードのパス。
/p:FrameworkDirectory 抽出されたコンパイラ ツール NuGet パッケージのパス。
/p:ReferenceFolder コンパイルで参照され、必須である X++ パッケージのバイナリを含むパスのセミコロン区切りのリスト (アプリケーション プラットフォームやアプリケーション スイートなど)。 コンパイルするコードに互いを参照する複数のパッケージがある場合は、出力ディレクトリもここに含める必要があります。
/p:ReferencePath コンパイル時に参照され、必須である X++ 以外のすべてのバイナリを含むパスのセミコロン区切りのリスト。 必要な参照が含まれている場合があるため、抽出したコンパイラ ツール NuGet パッケージの場所を含める必要があります。
/p:OutputDirectory コンパイラがフォルダーとバイナリを作成するパス。

次の例では、MSBuild 引数に使用できる値を示します。

/p:BuildTasksDirectory="$(Pipeline.Workspace)\NuGets\Microsoft.Dynamics.AX.Platform.CompilerPackage\DevAlm"
/p:MetadataDirectory="$(Build.SourcesDirectory)\Metadata"
/p:FrameworkDirectory="$(Pipeline.Workspace)\NuGets\Microsoft.Dynamics.AX.Platform.CompilerPackage"
/p:ReferenceFolder="$(Pipeline.Workspace)\NuGets\Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp\ref\net40;$(Pipeline.Workspace)\NuGets\Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp\ref\net40;$(Pipeline.Workspace)\NuGets\Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp\ref\net40;$(Pipeline.Workspace)\NuGets\Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp\ref\net40;$(Build.SourcesDirectory)\Metadata;$(Build.BinariesDirectory)"
/p:ReferencePath="$(Pipeline.Workspace)\NuGets\Microsoft.Dynamics.AX.Platform.CompilerPackage" /p:OutputDirectory="$(Build.BinariesDirectory)"

次の MSBuild 引数の前の例では、NuGet パッケージが $(Pipeline.Workspace)\NuGets にインストールされており、X++ のソース コードが $(Build.SourcesDirectory)\Metadata 内にあり、コンパイラの出力を $(Build.BinariesDirectory) にする必要があることを前提としています。

パイプライン サンプルでは、NuGet パッケージ名とパスの変数を使用して、これらのコマンドを簡略化しています。

タスク 4。 エージェントに NuGet 3.3.0 またはそれ以前のバージョンをインストールする

配置可能なパッケージを作成するステップでは、この手順が必要です。 配置可能パッケージは、ビルド エージェントですぐに NuGet が使用できる場合のみ作成できます。 したがって、配置可能なパッケージを作成するステップの前に、Azure DevOps の NuGetツール インストーラー タスクを実行する必要があります。

メモ

NuGet バージョン 3.4 以降のセマンティック バージョニング機能のために、タスクによってバージョン 3.3.0 またはそれ以前のバージョンがインストールされることを確認してください。 現在、配置可能パッケージの生成はセマンティック バージョニングをサポートしていません。

タスク 5。 配置可能パッケージを作成する

方法については、Azure Pipelines での配置可能パッケージの作成 を参照してください。

メモ

ソース コード リポジトリに独立系ソフトウェア ベンダー (ISV) のようなサード パーティのバイナリ パッケージが含まれる場合は、パッケージ ステップに明示的に追加する必要があります。 詳細については、Azure Pipelines での配置可能パッケージの作成 を参照してください。

タスク 6。 配置可能パッケージを公開する

ビルド アーティファクトを公開 タスクをビルド パイプラインに追加します。

X++ 開発者のためのサンプル パイプライン

Dynamics365-Xpp-Samples-Tools GitHub リポジトリでは、既存の Azure DevOps プロジェクトにインポートできるサンプル パイプラインを見つけることができます。