使用 Azure Pipelines 发布 NuGet 包(YAML/经典)
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
在 Azure Pipelines 中,可以使用经典编辑器或 YAML 任务,将管道中的 NuGet 包发布到 Azure 项目源或公共注册表(例如 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:在其中创建包的目录
包版本控制
NuGet 包按名称和版本号进行区分。 建议采用语义版本控制来有效管理包版本。 语义版本由三个数字部分组成:主要版本、次要版本和修补程序版本。
修复 bug 后,补丁会递增。 发布新的向后兼容功能时,将次要版本递增,并将补丁版本重置为 0。 执行向后不兼容的更改时,将主要版本递增,并将次要版本和补丁版本重置为 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)'
注意
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 任务支持使用基本身份验证的服务连接。 该任务不支持 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 源时可以使用任意值。
发布到 NuGet.org
导航到 Azure DevOps 项目,然后选择 项目设置。
选择“服务连接”,然后选择“新建服务连接”。
依次选择 NuGet 和下一步。
选择 ApiKey 作为身份验证方法。 将以下 URL 用于源 URL:https://api.nuget.org/v3/index.json。
输入前面生成的 ApiKey,然后输入服务连接名称。
选择授予对所有管道的访问权限,完成后选择保存。 若要选择此选项,则需要服务连接管理员角色。
将以下 YAML 代码片段添加到管道定义:
steps:
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: nuget.org
相关文章
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈