2019年7月22日月曜日

CIツールとの連携① - MSBuildその1

DevOpsという開発と運用を一体となって改善するための活動を支えるポイントの1つとしてビルドとデプロイの自動化があります。

実はGeneXusではバージョンXの頃からバッチでビルドするための仕組みが提供されていました。

GeneXusでビルドしている時にWindowsのタスクマネージャーを起動してプロセスの様子を見るとGeneXus.exe以外にMSBuild.exeが動作している事が確認できます。



実はGeneXus自体がビルドを行っているのでは無く、ビルドのプロセスはMSBuildが担っていてGeneXusはそれを呼び出しているだけなのです。

この仕組みにより、MSBuildの呼び出しをGeneXusからではなく、バッチファイル等から行う事でIDEがない状態、つまりバッチ処理としてビルドを行う事も可能になっているのです。


それではMSBuildとは何ものでしょうか?





その名前からだいたい想像はつくと思いますが、以下wikipediaからの引用です。
MSBuildはマイクロソフトのビルド環境であり、通常Visual Studioと一緒に使われている。

MSBuildバージョン2.0は.NET Framework 2.0の一部であり、Visual Studio 2005とともに動作する。バージョン3.5は.NET 3.5(およびVisual Studio 2008)にバンドルされており、.NETプロジェクトのターゲットバージョンとして2.0、3.0、3.5をサポートしている。これは「マルチターゲット」と呼ばれる。

Visual StudioのプロジェクトおよびソリューションはMSBuildに基づいており、コンパイラやリンカ、SDKなどのツールがセットアップされていれば、Visual StudioのIDE無しでもビルドすることができる。MSBuild自体は無償で利用可能である。

書いてある内容が先に私がGeneXusのビルドに関する内容とほぼ同じですね。

それでは実際のMSBuildを見ていきましょう。まずはGeneXusビルドの前にMSBuild自体の使い方です。

MSBuildを使うためにはXML形式のプロジェクトファイルが必要です。ビルドプロジェクトとしてどういった処理を行うのかを定義します。プロジェクトファイル名はVisual Studioだと「〜.csproj」などが一般的ですが、GeneXusでは「〜.msbuild」を使っています。

以下はコンソールに「Hello world!!」と表示する簡単なサンプルです。


プロジェクトファイルに最低限必要な定義としては

  • Projectタグ
    • XMLファイルのルートノードになります。必須です。
    • ディフォルト実行するターゲットが指定可能です。
  • Targetタグ
    • ビルドを実行する単位をターゲットと呼びます。プロジェクトファイルには複数のターゲットを定義する事ができ、実行時に任意のターゲットを指定する事が可能です。
    • Targetタグの中にはTaskタグを指定します。1つのターゲット実行で複数のタスクを順次に実行する事が可能です。
  • Taskタグ
    • Taskという名前のタグが存在する訳ではなく、MSBuildとして実行する処理自体をTaskと呼んでいます。サンプルではMessageがTaskになります。


<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="HelloWorld">
    <Message Text="Hello World!!"/>
  </Target>

  <Target Name="GoodbyWorld">
    <Message Text="Good by World!!"/>
  </Target>

</Troject>

※サンプルの記述が間違っていました。プロジェクトファイルの記述では先頭が大文字となります。訂正してお詫びします。


プロジェクトファイルを実行するには.NET Frameworkに含まれるMSBuild.exeを使用します。以下、コマンドプロンプトでの実行のサンプルです。
ターゲットを未指定の場合は、先頭のターゲットか、Projectタグで指定された
ディフォルトターゲットを実行します。



MSBuild.exeの文法は以下の通りです。
>MSBuild.exe プロジェクトファイル(〜.msbuild)




ターゲットを明示的に指定する場合の文法は以下の通りです。「/t」オプションでターゲット名が指定可能です。
>MSBuild.exe プロジェクトファイル(〜.msbuild) /t:ターゲット名


ターゲット名はセミコロン「;」 で区切る事で複数指定可能です。この場合は、記述順にターゲットを実行します。



まずはMSBuildの使い方に慣れましょう。




0 件のコメント:

コメントを投稿