将你的第一个包发布到 Azure Artifacts 源中

Azure Artifacts 使开发人员能够从单个源有效地管理其所有依赖项。 Azure Artifacts 中的源可用作组织级存储库,用于存储、管理和共享包,无论是在团队内部、跨组织之间,还是在互联网上公开共享。 Azure Artifacts 支持各种包类型,包括 NuGet、npm、Python、Maven、Cargo 和通用包。

本文介绍如何将第一个 NuGet 包发布到 Azure Artifacts 源。 (可选)可以按照说明使用 GitHub Copilot 来帮助设置项目并准备包以供发布。

先决条件

产品 要求
Azure DevOps - 一个 Azure DevOps 组织
- Azure DevOps 项目
- 下载并安装 .NET SDK 版本 9.0.200 或更高版本。
GitHub Copilot (可选) - 设置 GitHub Copilot 和 Visual Studio Code。 如果尚未注册,可以使用 30 天 GitHub Copilot 免费试用版。

创建订阅源

如果您已经有了订阅源,可以跳过本节。 否则,请按照以下步骤在 Azure Artifacts 中创建新的源:

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择工件,然后选择创建源

  3. 为源提供描述性 名称 ,并设置其 可见性 ,以定义谁可以查看源中的包。 定义你的源的 范围;如果要包含来自公共源的软件包,请选中 上游源 复选框。

  4. 完成操作后,选择“创建”

    显示如何在 Azure DevOps Services 中创建新源的屏幕截图。

  1. 登录到 Azure DevOps 集合,然后导航到项目。

  2. 选择工件,然后选择创建源

  3. 为源提供描述性 名称 ,并设置其 可见性 ,以定义谁可以查看源中的包。 定义源的 范围,如果要包含来自公共源的包,请选中 上游源 复选框。

  1. 完成操作后,选择“创建”

    显示如何在 Azure DevOps Server 2022 中创建新源的屏幕截图。

准备您的包裹

在此示例中,你将使用一个示例 .NET Core 类库,并在生成项目以及创建可发布到你的软件包源的 NuGet 包之前,先配置包元数据。 如果还没有项目,请按照本指南中的说明 使用 Visual Studio Code 创建 .NET 类库

  1. 在 Visual Studio Code 中打开项目,然后选择 csproj 文件。 在 <PropertyGroup> 标记中添加包元数据。 文件应如下所示:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <RootNamespace>demo_class_library</RootNamespace>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    
        <PackageId>YOUR_PACKAGE_NAME</PackageId>
        <Version>YOUR_PACKAGE_VERSION</Version>
        <Authors>YOUR_NAME</Authors>
        <Company>YOUR_COMPANY</Company>
    
      </PropertyGroup>
    
    </Project>
    
  2. 在项目目录中运行以下命令,生成项目并创建 .nupkg 包。 你的包将位于 bin\release 文件夹中。

    dotnet pack
    

配置 Azure Artifacts 凭据提供程序

若要对你的源进行身份验证,必须先安装 Azure Artifacts Credential Provider。 使用 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

第一个用法

首次执行需要身份验证的操作时,请使用以下方法之一:

  1. 运行命令 --interactive ,以便 dotnet 提示你登录。 这是大多数本地开发方案的建议方法。

运行交互式命令之前,请确保项目已设置,并将源添加到 nuget.config。有关设置详细信息,请参阅 项目设置

完成项目设置并将其连接到数据馈送后,前往项目目录,然后运行:

dotnet restore --interactive

此命令会使您登录并获取一个会话令牌。 登录成功后,在缓存的会话令牌仍然有效期间,您无需使用 --interactive 即可运行需身份验证的命令。 有关详细信息,请参阅 Session 令牌缓存位置

  1. 对于非交互式方案(如 Docker 容器和自定义自动化),请通过 environment 变量提供凭据。

对于 Azure Pipelines,请在运行 dotnet restoredotnet nuget push 等命令之前,使用 NuGetAuthenticate@1 任务向你的源进行身份验证。 有关更多详细信息,请参阅使用 Azure Pipelines 还原 NuGet 包

连接到源

按照以下步骤设置您的项目并连接到 Azure Artifacts 源。 确保已安装 Azure Artifacts 凭据提供程序和最新版本的 NuGet,如先决条件中所述。

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择 构件,然后从下拉菜单中选择你的源。

  3. 选择“连接到源”,然后在“NuGet”部分中选择 dotnet

  4. 按照 Project 设置中的说明设置 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>
      
  1. 登录到 Azure DevOps 集合,然后导航到项目。

  2. 选择“Artifacts”,然后从下拉菜单中选择你的源。

  3. 选择“ 连接到源”,然后从左侧导航窗格中选择 dotnet

  4. 按照 “项目设置 ”部分中的说明设置 nuget.config 文件。

    显示如何在 Azure DevOps Server 2020 和 2022 中连接到源的屏幕截图。

发布您的软件包

在项目目录中运行以下命令,将包发布到 Azure Artifacts 源。 参数 --api-key 是必需的,但在发布到 Azure Artifacts 时可以使用任何字符串值。

dotnet nuget push --source <FEED_NAME> --api-key <ANY_STRING> <PACKAGE_PATH>

后续步骤