在持續整合 (CI) 環境中使用 .NET SDK

本文概述如何在組建伺服器上使用 .NET SDK 及其工具。 .NET 工具組會以互動方式運作,其中開發人員會在命令提示字元中輸入命令,並自動執行持續整合 (CI) 伺服器執行組建腳本。 命令、選項、輸入和輸出都是相同的,您只需要提供取得工具的方式和建置應用程式的系統。 本文著重于 CI 的工具取得案例,並提供如何設計和建構組建腳本的建議。

CI 組建伺服器的安裝選項

如果您使用 GitHub,安裝非常簡單。 您可以依賴GitHub Actions在工作流程中安裝 .NET SDK。 在工作流程中安裝 .NET SDK 的建議方式是使用 actions/setup-net-core-sdk 。 如需詳細資訊,請參閱 GitHub Marketplace 中的 設定 .NET Core SDK 動作。 如需運作方式的範例,請參閱 快速入門:建立組建驗證 GitHub 工作流程

原生安裝程式

有針對 macOS、Linux 及 Windows 提供原生安裝程式。 安裝程式需要組建伺服器的管理員 (sudo) 存取權。 使用原生安裝程式的優點在於它會安裝工具執行時所需的所有原生相依性。 原生安裝程式也提供 SDK 的全系統安裝。

macOS 使用者應使用 PKG 安裝程式。 在 Linux 上,您可以選擇使用摘要套件管理員 (例如適用於 Ubuntu 的 apt-get 或適用於 CentOS 的 yum),或使用套件本身 (DEB 或 RPM)。 在 Windows 上請使用 MSI 安裝程式。

您可以在 .NET Core 下載 \(英文\) 找到最新的穩定二進位檔。 如果您想要使用最新的 (,且可能不穩定) 發行前工具,請使用 dotnet/installer GitHub 存放庫提供的連結。 針對 Linux 發行版本, tar.gz 封存 (也稱為 tarballs) 可用;請使用封存內的安裝腳本來安裝 .NET。

安裝程式腳本

使用安裝程式指令碼可以在您的組建伺服器上進行非系統管理安裝,以及輕鬆地將取得工具的作業自動化。 指令碼會負責下載工具,然後將工具解壓縮至預設或指定位置以供使用。 您也可以指定要安裝的工具版本,以及指定要安裝整個 SDK 或只安裝共用執行階段。

在建置開始時,安裝程式指令碼會自動執行,以擷取和安裝所需的 SDK 版本。 「所需版本」是您專案所需建置的任何 SDK 版本。 指令碼可讓您將 SDK 安裝在伺服器上的本機目錄中,從安裝位置執行工具,然後在建置之後清除 (或讓 CI 服務清除)。 這可以為整個建置程序提供封裝和隔離。 您可以在 dotnet-install 一文中找到安裝指令碼參考。

注意

Azure DevOps Services

使用安裝程式指令碼時,不會自動安裝原生相依性。 如果作業系統沒有原生相依性,您必須加以安裝。 如需詳細資訊,請參閱 .NET 相依性和需求

CI 設定範例

本節說明使用 PowerShell 或 bash 腳本進行手動設定,以及軟體即服務的描述, (SaaS) CI 解決方案。 涵蓋的 SaaS CI 解決方案包括 Travis CIAppVeyorAzure Pipelines。 如需 GitHub Actions,請參閱GitHub Actions 和 .NET

手動設定

每個 SaaS 服務都有其建立和設定建置程式的方法。 如果您使用不同于列出的 SaaS 解決方案,或需要預先封裝的支援以外的自訂,您至少必須執行一些手動設定。

在一般情況下,手動設定需要您取得某一版本的工具 (或該工具的最新每晚組建),然後執行您的建置指令碼。 您可以使用 PowerShell 或 bash 腳本來協調 .NET 命令,或使用概述建置程式的專案檔。 協調流程小節能提供這些選項的更多詳細資料。

在您建立執行手動 CI 組建伺服器設定的指令碼之後,請在您的開發電腦上使用該指令碼,以在本機針對測試目的建置程式碼。 一旦您確認指令碼可在本機正常執行之後,請將它部署到 CI 組建伺服器。 相對簡單的 PowerShell 腳本示範如何取得 .NET SDK,並將其安裝在 Windows 組建伺服器上:

您可以在指令碼結尾處提供建置程序的實作。 指令碼會取得工具,然後執行您的建置程序。

$ErrorActionPreference="Stop"
$ProgressPreference="SilentlyContinue"

# $LocalDotnet is the path to the locally-installed SDK to ensure the
#   correct version of the tools are executed.
$LocalDotnet=""
# $InstallDir and $CliVersion variables can come from options to the
#   script.
$InstallDir = "./cli-tools"
$CliVersion = "6.0.7"

# Test the path provided by $InstallDir to confirm it exists. If it
#   does, it's removed. This is not strictly required, but it's a
#   good way to reset the environment.
if (Test-Path $InstallDir)
{
    rm -Recurse $InstallDir
}
New-Item -Type "directory" -Path $InstallDir

Write-Host "Downloading the CLI installer..."

# Use the Invoke-WebRequest PowerShell cmdlet to obtain the
#   installation script and save it into the installation directory.
Invoke-WebRequest `
    -Uri "https://dot.net/v1/dotnet-install.ps1" `
    -OutFile "$InstallDir/dotnet-install.ps1"

Write-Host "Installing the CLI requested version ($CliVersion) ..."

# Install the SDK of the version specified in $CliVersion into the
#   specified location ($InstallDir).
& $InstallDir/dotnet-install.ps1 -Version $CliVersion `
    -InstallDir $InstallDir

Write-Host "Downloading and installation of the SDK is complete."

# $LocalDotnet holds the path to dotnet.exe for future use by the
#   script.
$LocalDotnet = "$InstallDir/dotnet"

# Run the build process now. Implement your build script here.

Travis CI

您可以設定 Travis CI 以使用 csharp 語言和 dotnet 金鑰來安裝 .NET SDK。 如需詳細資訊,請參閱有關建置 C#、F# 或 Visual Basic 專案 \(英文\) 的官方 Travis CI 文件。 在您存取 Travis CI 資訊時,請留意這個由社群維護的 language: csharp 語言識別碼可適用於所有 .NET 語言,包括 F# 和 Mono。

Travis CI 會在「建置矩陣」中執行 macOS 和 Linux 作業,您可以在該矩陣中指定執行階段、環境及排除項/包含項的組合,以涵蓋應用程式的組建組合。 如需詳細資訊,請參閱 Travis CI 文件中的 Customizing the Build (自訂組建) 一文。 MSBuild 型工具組含套件中的 LTS 和目前執行時間;因此,藉由安裝 SDK,您會收到建置所需的一切。

AppVeyor

AppVeyor 會安裝具有組建背景工作角色映射的 Visual Studio 2022 .NET 6.0.0 SDK。 其他具有不同 .NET SDK 版本的組建映射可供使用。 如需詳細資訊,請參閱 AppVeyor 文件中的 appveyor.yml 範例 \(英文\) 和 組建背景工作角色映像 \(英文\) 文章。

.NET SDK 二進位檔會使用安裝腳本在子目錄中下載和解壓縮,然後將它們新增至 PATH 環境變數。 新增組建矩陣,以使用多個 .NET SDK 版本執行整合測試:

environment:
  matrix:
    - CLI_VERSION: 6.0.7
    - CLI_VERSION: Latest

install:
  # See appveyor.yml example for install script

Azure DevOps Services

設定Azure DevOps Services使用下列其中一種方法來建置 .NET 專案:

  1. 使用您的命令從手動設定步驟執行指令碼。
  2. 建立由數個Azure DevOps Services內建建工作所組成的組建,這些工作設定為使用 .NET 工具。

這兩種解決方案都是可行的。 您可以使用手動設定指令碼來控制接收到的工具版本,因為那些工具是以組建之一部分的形式下載的。 組建會從您必須建立的指令碼執行。 本文僅涵蓋手動選項。 如需有關使用 Azure DevOps Services 建置工作來組成組建的詳細資訊,請參閱 Azure Pipelines\(英文\) 文件。

若要在 Azure DevOps Services 中使用手動設定指令碼,請建立新的組建定義,並指定要針對建置步驟執行的指令碼。 這可使用 Azure DevOps Services 使用者介面來完成:

  1. 從建立新的組建定義開始。 當您抵達會提供選項以定義要建立哪一種組建的畫面時,請選取 [空] 選項。

    選取空的組建定義

  2. 設定要建置的存放庫之後,系統就會將您導向至組建定義。 選取 [新增建置步驟]:

    加入建置步驟

  3. 系統會向您顯示 [工作目錄]。 目錄中包含您在組建中使用的工作。 因為您有指令碼,請選取 [PowerShell: 執行 PowerShell 指令碼] 的 [新增] 按鈕。

    新增 PowerShell 指令碼步驟

  4. 設定建置步驟。 從您正在建置的存放庫加入指令碼:

    指定要執行的 PowerShell 指令碼

協調組建

本檔大部分說明如何取得 .NET 工具及設定各種 CI 服務,而不需提供如何使用 .NET 協調或 實際建置程式碼的相關資訊。 建置程序的結構方式取決於許多因素,無法在這裡以一一涵蓋。 如需有關使用各項技術來協調組建的詳細資訊,請探索 Travis CIAppVeyorAzure Pipelines 文件集內所提供的資源與範例。

使用 .NET 工具建構 .NET 程式碼的兩種一般方法,是直接使用 MSBuild 或使用 .NET 命令列命令。 您可以視自己對特定方法的熟悉程度並權衡其複雜度,來選擇要使用的方法。 MSBuild 可讓您以工作和目標的形式表示建置程序,但使用此方法必須額外學習 MSBuild 專案檔語法。 使用 .NET 命令列工具可能更簡單,但您需要以或 PowerShell 之類的 bash 指令碼語言撰寫協調流程邏輯。

另請參閱