Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022
利用 Azure Artifacts,开发人员能够无缝地将包发布到源,并以专用或公开方式共享包,具体取决于源的可见性设置。 本指南介绍如何设置项目并使用 Azure Artifacts 源进行身份验证。
先决条件
| 产品 | 要求 |
|---|---|
| Azure DevOps | - 一个 Azure DevOps 组织。 - Azure DevOps 项目。 - Azure Artifacts 源。 - 下载并安装 .NET SDK 版本 9.0.200 或更高版本。 |
配置 Azure Artifacts 凭据提供程序
若要向源进行身份验证,必须先安装 Azure 凭据提供程序。 使用 dotnet 附带的工具安装程序,可以使用以下命令从 CLI 安装凭据提供程序:
dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool
如果存储库级nuget.config配置为仅使用Azure Artifacts源,请从该目录外部运行 install 命令,或将 nuget.org 显式设置为源:
dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --source https://api.nuget.org/v3/index.json
(可选)将该工具固定为某个主版本(例如,在对可复现性要求较高的容器镜像中):
dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --version 2.* --source https://api.nuget.org/v3/index.json
首次执行需要身份验证的操作时,应通过以下方式进行身份验证:
- 使用
--interactive运行,以便 dotnet 可以提示你进行身份验证。 - 通过 环境变量提供凭据(例如,在无人值守场景中)。
如果交互式授权可用,请导航到项目目录并运行:
dotnet restore --interactive
此命令会让你登录并获取令牌。 登录成功后,在令牌过期之前,你可以在不使用 --interactive 的情况下运行需要身份验证的命令。 有关详细信息,请参阅 Session 令牌缓存位置。
连接到源
选择项目,然后从下拉菜单中选择源。
选择连接到源,然后从 NuGet 部分选择 dotnet。
将 nuget.config 文件添加到项目。 将其放在与 .csproj 或 .sln 文件相同的文件夹中,然后将“项目设置”部分中提供的代码段粘贴到其中。 nuget.config 文件应如下所示:
项目作用域的源:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="<FEED_NAME>" value="https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" /> </packageSources> </configuration>组织作用域的源:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="<FEED_NAME>" value="https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" /> </packageSources> </configuration>
登录到 Azure DevOps 集合,然后导航到项目。
选择“ 项目”,然后从下拉菜单中选择源。
选择“连接到源”,然后从左侧选择“dotnet”。
将 nuget.config 文件添加到项目。 将其放在与 .csproj 或 .sln 文件相同的文件夹中,然后将“项目设置”部分中提供的代码段粘贴到其中。
使用服务主体进行身份验证
可以使用服务主体和 Azure Artifacts 源进行身份验证。 为此,请设置 ARTIFACTS_CREDENTIALPROVIDER_FEED_ENDPOINTS 环境变量,具体如下所示。
此变量应定义源 URL、服务主体的应用程序(客户端)ID,以及证书使用者名称或证书文件路径(仅需要这两项中的一项)。
$env:ARTIFACTS_CREDENTIALPROVIDER_FEED_ENDPOINTS = @'{
"endpointCredentials": [
{
"endpoint": "<FEED_URL>",
"clientId": "<SERVICE_PRINCIPAL_APPLICATION_(CLIENT)_ID>",
"clientCertificateSubjectName": "<SERVICE_PRINCIPAL_CERTIFICATE_NAME>",
"clientCertificateFilePath": "<SERVICE_PRINCIPAL_CERTIFICATE_PATH>"
}
]
}
'@