ビルド タスクを計画する
- 7 分
Mara には、Space Game コードのコピーがある状態です。 彼女は、既存の Ubuntu 22.04 ビルド サーバーではなく Microsoft Azure Pipelines を使ってビルドするつもりです。 これを行うには、その前に、既存のビルド スクリプトについて考える必要があります。 彼女が既存のスクリプトを Azure Pipelines タスクにマッピングする様子を一緒に見ていきましょう。 独自のビルド プロセスで同じことを行う方法について考えてください。
Mara が開発リーダーの Andy と話したときに書きためたメモを次に示します。
- ビルド マシンでは Ubuntu 22.04 が実行されています。
- ビルド マシンには、次のようなビルド ツールが組み込まれている。
- npm。Node.js 向けのパッケージ マネージャー
- NuGet (.NET のパッケージ マネージャー)
- .NET SDK
- このプロジェクトでは、Syntactically Awesome Style Sheets (Sass) を使用して、カスケード スタイル シート (CSS) ファイルを簡単に作成できるようにします。
- このプロジェクトでは、gulp ツールキットを使用して、JavaScript と CSS ファイルを縮小します。
縮小されたアセットは、より速くダウンロードできるように、(空白などの) 不要なデータを除外し、変数名を短くします。
ビルド処理中に発生するステップを次に示します。
package.json
で定義されている Node.js パッケージをインストールするには、npm install
を実行します。- Sass (.scss) ファイルを CSS (.css) ファイルに変換するには、
node-sass
を実行します。 - JavaScript および CSS ファイルを縮小するには、
gulp
を実行します。 - QA チームがビルド番号と日付を特定できるように、ビルド情報を
wwwroot
ディレクトリに出力します。 - プロジェクトの依存関係をインストールするには、
dotnet restore
を実行します。 - デバッグとリリースの両方の構成でアプリをビルドするには、
dotnet build
を実行します。 - アプリケーションを .zip ファイルとしてパッケージ化し、その結果を QA チームが取得できるようにネットワーク共有にコピーするには、
dotnet publish
を実行します。
Mara は、自分が特定したタスクを実行するシェル スクリプトを構築します。 彼女は、自分のラップトップでそれを実行します。
注意
このスクリプトを実行したり、その動作を完全に理解したりする必要はありません。 ここでは、一般的なビルド スクリプトの動作を示します。
#!/bin/bash
# Install Node.js modules as defined in package.json.
npm install --quiet
# Compile Sass (.scss) files to standard CSS (.css).
node-sass Tailspin.SpaceGame.Web/wwwroot
# Minify JavaScript and CSS files.
gulp
# Print the date to wwwroot/buildinfo.txt.
echo `date` > Tailspin.SpaceGame.Web/wwwroot/buildinfo.txt
# Install the latest .NET packages the app depends on.
dotnet restore
# Build the app under the Debug configuration.
dotnet build --configuration Debug
# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Debug --output /tmp/Debug
# Build the app under the Release configuration.
dotnet build --configuration Release
# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Release --output /tmp/Release
/tmp
ディレクトリは、チームのネットワーク共有を模倣します。
スクリプトを実行した後、Mara はこれが不完全であることに気付きます。 たとえば、エラーを処理しません。 ビルド エラーが発生しても、だれにも通知されません。 エラーが発生しても、実行は継続されます。 また、各ステップに必要なツールもインストールされません。
Azure Pipelines タスクとは
Azure Pipelines では、"タスク" は、一連の入力で抽象化された、パッケージ化されたスクリプトまたはプロシージャです。
Azure Pipelines タスクでは、基になる詳細が抽象化されます。 この抽象化により、ビルド ツールやアプリが依存するパッケージのダウンロードのような一般的なビルド機能の実行や、Visual Studio または Xcode を実行するプロジェクトのビルドが簡単になります。
.NET を対象とする C# プロジェクトをビルドするために、DotNetCoreCLI@2
タスクを使用する例を次に示します。
task: DotNetCoreCLI@2
displayName: 'Build the project'
inputs:
command: 'build'
arguments: '--no-restore --configuration Release'
projects: '**/*.csproj'
パイプラインは、このタスクを次のコマンドに変換する場合があります。
dotnet build MyProject.csproj --no-restore --configuration Release
このタスクをもう少し詳しく見ていきましょう。
DotNetCoreCLI@2
タスクは、dotnet
コマンドにマップされます。displayName
は、ユーザー インターフェイスに表示されるタスク名を定義します。 すぐにこれが実際に動作するのがわかります。inputs
は、コマンドに渡される引数を定義します。command
はdotnet build
サブコマンドを実行するように指定します。arguments
はコマンドに渡す追加の引数を指定します。projects
はビルドするプロジェクトを指定します。 この例では、ワイルドカード パターン**/*.csproj
を使用します。**
と*.csproj
はどちらも、glob パターン と呼ばれるものの例です。**
の部分は、現在のディレクトリとすべての子ディレクトリを検索する指定です。*.csproj
部分では、.csproj ファイルを指定します。 ワイルドカードを使用すると、1 つずつ指定しなくても複数のファイルを操作できます。 特定のファイルのみを操作する必要がある場合は、ワイルドカードを使用する代わりにそのファイルを指定できます。
タスク名の "@"(例:DotNetCoreCLI@2
)は、タスクのバージョンを示しています。 新しいタスク バージョンが利用可能になると、徐々に最新バージョンに移行して新しい機能を利用することができます。
パイプラインでのタスクの使用方法
次に、Mara は、既存のスクリプト コマンドを Azure Pipelines タスクにマップします。 パイプラインが YAML ファイルで作成されます。このファイルはコンパクトな形式であり、構成ファイル内のデータの種類を簡単に構造化できます。 パイプライン YAML ファイルは通常、アプリのソース コードで直接、保守管理されます。
以前の Mara は、YAML を使って同様のビルド タスクと構成を定義していました。 また彼女は、プロジェクトの他の部分と同じように、ビルド定義をコードとして保持するというアイデアが気に入っています。
ビルドを定義するために、Mara は、Visual Studio Code を使用して YAML ファイルを作成することを選びます。 それに、既存のスクリプト コマンドを置き換えるために使用するすべての Azure Pipelines タスクを入力します。
スクリプト コマンドを Azure Pipelines タスクにマップする
次に、Mara は自分のスクリプトから Azure Pipelines タスクにコマンドをマップします。
各コマンドをマップするために、Mara はリファレンス ドキュメントを参照します。 このドキュメントでは、タスクがビルドやデプロイなどの機能別に分類されています。
たとえば、.Net Core CLI タスクDotNetCoreCLI@2
では、dotnet
コマンドを実行できます。
次の表では、スクリプト コマンドと新しい Azure Pipelines タスクを関連付けています。
[スクリプト] コマンド | Azure Pipelines タスク |
---|---|
npm install |
Npm@1 |
node-sass |
CmdLine@2 (または script ) |
gulp |
gulp@1 |
echo `date` |
CmdLine@2 (または script ) |
dotnet restore |
DotNetCoreCLI@2 |
dotnet build |
DotNetCoreCLI@2 |
dotnet publish |
DotNetCoreCLI@2 |
組み込みのタスクタイプとして、node-sass
を実行したり、ファイルに日付を書き出したりするものはありません。 それらのために、Mara は CmdLine@2
タスクを使用します。これにより、彼女が希望するどのコマンドでも実行できるようになります。 一般的に、script
タスクが表示されますが、これは CmdLine@2
のショートカットです。 その他の一般的なタスク ショートカットの詳細については、「Azure Pipelines の YAML スキーム リファレンス - 手順」を参照してください。
すぐに、これらのタスクを使用する独自の YAML ファイルを作成します。