規劃您的建置工作

已完成

Mara 現在有一份 Space Game 程式碼的副本。 她將使用 Microsoft Azure Pipelines 來建置,而不是使用現有的 Ubuntu 22.04 組建伺服器。 在那麼做之前,她必須先考慮現有的組建指令碼。 接下來,她會將現有的指令碼對應至 Azure Pipelines 工作。 請思考您如何運用自己的建置程序來執行相同操作。

以下是一些 Mara 在與開發主管 Andy 談話時獲得的注意事項:

  • 組建機器正在執行 Ubuntu 22.04。
  • 建置機器包含的建置工具有:
    • npm,適用於 Node.js 的套件管理員
    • NuGet,適用於 .NET 的套件管理員
    • .NET SDK
  • 專案使用 Syntactically Awesome Style Sheets (Sass),以便輕鬆撰寫階層式樣式表 (CSS) 檔案。
  • 專案使用 gulp 工具組來縮短 JavaScript 和 CSS 檔案。

縮短的資產會排除不必要資料 (例如空白字元),並縮短變數名稱以加快下載速度。

以下是建置流程期間的步驟:

  1. 執行 npm install 來安裝 package.json 中定義的 Node.js 套件。
  2. 執行 node-sass 將 Sass (.scss) 檔案轉換成 CSS (.css) 檔案。
  3. 執行 gulp 來縮短 JavaScript 和 CSS 檔案。
  4. wwwroot 目錄中顯示組建資訊,協助 QA 小組識別組建編號和日期。
  5. 執行 dotnet restore 來安裝專案的相依性。
  6. 若要同時在偵錯和發行組態下組建應用程式,請執行 dotnet build
  7. 執行 dotnet publish 將應用程式封裝為 .zip 檔案,並將結果複製到網路共用,以便 QA 小組取用。

Mara 建置了 Shell 指令碼,用於執行她所識別的任務。 她在膝上型電腦上執行。

注意

您無須執行此指令碼,或完全了解其用途。 此處的用意是說明一般建置指令碼可能的作用。

#!/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 檔案。 萬用字元可讓您處理多個檔案,而無須分別指定。 如果您需要處理唯一的特定檔案,您可以指定該檔案,而不是使用萬用字元。

工作名稱 (例如 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 檔案以使用這些工作。

檢定您的知識

1.

「建置工作」