使用 Azure Pipelines 發佈 NuGet 套件 (YAML/傳統)
Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019 |TFS 2018
在 Azure Pipelines 中,您可以使用傳統編輯器或 YAML 工作,將管線內的 NuGet 套件發佈至 Azure Artifacts 摘要,或發布至公用登錄,例如 nuget.org。
建立 NuGet 套件
有各種方式可以建立 NuGet 套件,例如使用 Visual Studio 來封裝 NuGet 套件。 如果您已經使用 MSBuild 或其他工作來建立套件,請略過本節並跳至 [發佈 NuGet 套件 ] 區段。
若要建立 NuGet 套件,請將下列代碼段新增至管線 YAML 檔案。 如需詳細資訊,請參閱 NuGet 工作。
- task: NuGetCommand@2
inputs:
command: pack
packagesToPack: '**/*.csproj'
packDestination: '$(Build.ArtifactStagingDirectory)'
- packagesToPack:搜尋要封裝的 csproj 目錄模式
- packDestination:建立套件的目錄
TFS 不支援YAML。
套件版本控制
NuGet 套件的名稱和版本號碼會加以區別。 採用語意版本控制是有效管理套件版本的建議策略。 語意版本包含三個數值元件:主要、次要和修補程式。
修正 Bug 之後, 修補程式 會遞增。 當您發行新的回溯相容功能時,您會將次要版本遞增,並將 Patch 版本重設為 0。 當您進行回溯不相容的變更時,您會將主要版本遞增,並將 Minor 和 Patch 版本重設為 0。
使用語意版本設定,您也可以使用發行前版本標籤您的套件。 若要這樣做,請輸入連字元,後面接著您的發行前版本標籤:例如 1.0.0-beta。 Azure Pipelines 支持語意版本控制,而且可在 NuGet 工作中設定,如下所示:
使用日期和時間 (傳統): byPrereleaseNumber (YAML)。 您的套件版本格式為: Major.Minor.Patch-ci-datetime ,您可以在其中彈性地選擇 Major、Minor 和 Patch 的值。
使用環境變數 (傳統): byEnvVar (YAML)。 您的套件版本會設定為您指定的環境變數值。
使用組建編號 (傳統): byBuildNumber (YAML)。 您的套件版本會設定為組建編號。 請確定您在管線 選項 底下將組建編號格式設定為
$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
。 若要在 YAML 中設定格式,請在管線根目錄新增 屬性name:
,並新增您的格式。
下列範例示範如何使用日期和時間版本控制選項來產生格式化為的 SemVer 相容版本: Major.Minor.Patch-ci-datetime
。
variables:
Major: '1'
Minor: '0'
Patch: '0'
steps:
- task: NuGetCommand@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
TFS 不支援YAML。
注意
DotNetCore
和 DotNetStandard
套件應該與工作一起 DotNetCoreCLI@2
封裝,以避免 System.InvalidCastExceptions。 如需詳細資訊,請參閱 .NET Core CLI 工作。
task: DotNetCoreCLI@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
發佈 NuGet 套件
若要從管線將套件發佈至 Azure Artifacts 摘要,管線身分識別必須在摘要上具有 摘要發行者(參與者) 角色。 如需詳細資訊,請參閱 管線許可權。
steps:
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
publishVstsFeed: '<projectName>/<feed>'
allowPackageConflicts: true
若要將套件發佈至外部 NuGet 摘要,您必須先建立服務連線以連線到該摘要。 若要建立服務連線:
- 移至 [項目設定>服務連線>] [新增服務連線]。
- 選取 [NuGet],然後選取 [ 下一步]。
- 填寫表單,然後在完成時選取 [ 儲存 ]。
如需詳細資訊,請參閱 管理服務連線。
注意
NuGetAuthenticate@1工作支援使用基本 authenication 的服務連線。 此工作不支援 NuGet API 金鑰驗證。 如果您的服務連線使用 ApiKey,您必須使用 NuGetCommand@2 工作,並在 [自變數] 欄位中指定 NuGet API 金鑰。 如需詳細資訊,請參閱 NuGet 工作。
若要將套件發佈至外部 NuGet 摘要,請將下列代碼段新增至您的 YAML 管線。
使用命令列工作 (搭配 NuGet.exe):
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
- script: |
nuget push <PACKAGE_PATH> -src https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>
displayName: "Push"
使用命令列工作 (搭配 dotnet):
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
- script: |
dotnet build <CSPROJ_PATH> --configuration <CONFIGURATION>
dotnet pack <CSPROJ_PATH> -p:PackageVersion=<YOUR_PACKAGE_VERSION> --output <OUTPUT_DIRECTORY> --configuration <CONFIGURATION>
dotnet nuget push <PACKAGE_PATH> --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING>
displayName: "Build, pack and push"
注意
ApiKey
是必要的,但您可以在推送至 Azure Artifacts 摘要時使用任何任意值。
TFS 不支援YAML。
發行到 NuGet.org
流覽至您的 Azure DevOps 專案,然後選取 [項目設定]。
選取 [服務 連線],然後選取 [新增服務連線]。
選取 [NuGet],然後選取 [ 下一步]。
選取 [ApiKey ] 作為驗證方法。 針對您的 摘要 URL 使用下列 URL: https://api.nuget.org/v3/index.json。
輸入您稍早產生的 ApiKey,然後輸入服務連線名稱。
選取 [ 授與所有管線的訪問許可權],然後在完成時選取 [ 儲存 ]。 若要選取此選項,您需要服務連線 管理員 istrator 角色。
將下列 YAML 代碼段新增至您的管線定義:
steps:
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: nuget.org
相關文章
意見反應
https://aka.ms/ContentUserFeedback。
即將推出:在 2024 年,我們將隨著內容的意見反應機制逐步淘汰 GitHub 問題,並以新的意見反應系統來取代。 如需詳細資訊,請參閱提交並檢視相關的意見反應