使用来自 Crates.io 的 Cargo 程序包

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

Azure Artifacts 上游源使开发人员能够使用公共注册表中的包,例如 Crates.io 和 nuget.org。本文将指导你设置项目并使用命令行从 Crates.io 使用箱。

先决条件

产品 要求
Azure DevOps - 一个 Azure DevOps 组织
- Azure DevOps 项目
- 下载并安装 rustup。 需要 Cargo 版本 1.74.0 或更高版本。

创建源

Azure Artifacts 建议为从 crates.io 使用 crate 设置一个专用源,并为发布内部 crate 设置一个单独的源。 如果已有 Azure Artifacts 源,请跳到下一部分。 否则,请创建如下所示的新项:

  1. 登录到 Azure DevOps 组织,然后导航到项目。

  2. 选择“项目”,然后选择“创建源”

  3. 为源提供 名称 ,选择 可见性 以定义谁可以查看包,然后选择源 范围。 选中包括公共源中的包复选框,以在您的订阅源上启用上游源。

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

    显示如何创建源以从 Crates.io 上游使用包的屏幕截图。

连接到源

有了订阅源后,您需要设置 config.toml 文件,配置凭据提供者,然后登录注册表以便通过订阅源进行身份验证。

项目设置

  1. 登录到 Azure DevOps 组织,然后导航到项目。

  2. 选择项目,然后从下拉菜单中选择源。

  3. 选择连接到数据源,然后从左侧导航窗格中选择货物

  4. “项目设置 ”部分复制代码片段,并将其粘贴到源存储库中的 .cargo/config.toml 文件中。 它应如下所示:

    • 项目范围的源

      [registries]
      <FEED_NAME> = { index = "sparse+https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/Cargo/index/" }
      
      [source.crates-io]
      replace-with = "<FEED_NAME>"
      
    • 组织范围的源

      [registries]
      <FEED_NAME> = { index = "sparse+https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/Cargo/index/" }
      
      [source.crates-io]
      replace-with = "<FEED_NAME>"
      
  1. 登录到 Azure DevOps 集合,然后导航到项目。

  2. 选择项目,然后从下拉菜单中选择源。

  3. 选择连接到数据源,然后从左侧导航窗格中选择货物

  4. “项目设置 ”部分复制代码片段,并将其粘贴到源存储库中的 .cargo/config.toml 文件中。 它应类似于:

    • 项目范围的源

      [registries]
      <FEED_NAME> = { index = "sparse+https://pkgs.dev.azure.com/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/Cargo/index/" }
      
      [source.crates-io]
      replace-with = "<FEED_NAME>"
      
    • 集合范围的源

      [registries]
      <FEED_NAME> = { index = "sparse+https://pkgs.dev.azure.com/<COLLECTION_NAME>/_packaging/<FEED_NAME>/Cargo/index/" }
      
      [source.crates-io]
      replace-with = "<FEED_NAME>"
      

配置凭据提供程序

若要将 Cargo 与 Azure Artifacts 配合使用,需要设置 凭据提供程序。 以下设置将为用户设置默认凭据帮助程序:

将以下代码片段粘贴到 %USERPROFILE%.cargo\config.toml 中:

[registry]
global-credential-providers = ["cargo:token", "cargo:wincred"]

登录到注册表

  1. 使用“打包”“读取和写入”>范围创建个人访问令牌,以便对源进行身份验证。

  2. 运行以下命令以登录到注册表。 将FEED_NAME<替换为>源名称,并在升级后粘贴之前创建的个人访问令牌。

    "Basic " + [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("PAT:" + (Read-Host -MaskInput "Enter PAT"))) | cargo login --registry <FEED_NAME>
    

从 Crates.io 保存包

现在您的项目已设置好,凭据提供程序已配置,并已使用提要进行身份验证,您可以开始从上游源获取包。 Azure Artifacts 会自动将从上游安装的任何包的副本保存到包源中。

以下示例演示了如何使用 reqwest 库,这是一种用于发出 HTTP 请求的 HTTP 客户端库:

  1. 通过在项目目录中运行以下命令,将箱添加到 Cargo.toml

    cargo add reqwest
    
  2. 运行以下命令以生成项目并使用箱:

    cargo build
    

安装完包后,副本将保存到您的订阅。 可以通过导航到 Azure DevOps 的信息流中来验证这一点。 您应该可以在您的信息流中看到该包,如下所示:

显示从 Crates.io 保存后 Azure Artifacts 源中列出的 reqwest 箱的屏幕截图。

注意

若要从上游保存包,必须具有 源和上游读取者(协作者) 角色或更高版本。 有关更多详细信息,请参阅 源角色和权限