配置上游行为

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

借助 Azure Artifacts 上游源,开发人员可以方便地使用统一源从项目源和常用的公共注册表(如 NuGet.org 或 npmjs.com)发布和使用包。 以前,项目源合并了源本身和所有配置的上游源中的可用包版本列表。

显示源内容的插图。

上游行为是一项功能,使开发人员能够选择是否要使用外部源包版本。 它控制可从特定包的公共注册表访问哪些包。

启用上游行为后,将包发布到 Azure Artifacts 源时,将阻止来自公共注册表的任何版本,并且无法下载。

此方法通过防止可能渗透到公共注册表的恶意包中,增加了额外的安全层。

但是,用户仍可停用上游行为设置,允许他们使用公共注册表中的包(如果他们愿意这样做)。

注意

新行为不会影响当前正在使用的任何包版本,因为它们保留在源的 @local 视图中。

适用的场景

以下部分演示了触发上游行为以阻止外部源包版本的各种常见方案,以及不需要阻止对公共包的访问的其他方案。

公共版本被阻止

专用包版本公开

在此方案中,团队具有公开的专用包。 在这种情况下,将触发上游行为来阻止任何新的公共版本(不受信任的包)。

显示内部包版本公开的插图。

同时具有专用包和公共包

在此方案中,如果团队使用专用包和公共包的组合,则启用上游行为会阻止公共注册表中的任何新包版本。

显示可用专用包和公共包的插图。

不会阻止公共版本

所有包都是专用包*

如果所有现有包都是私有的,并且团队没有计划使用任何公共包,则新的上游行为不会影响此方案中团队的工作流。

显示仅包含专用包的源的插图。

所有包都是公共的

在此方案中,如果团队专门使用公共包(无论是来自公共注册表或其他开源存储库),则新的上游行为不会以任何方式影响其工作流。

显示仅包含公共包的源的插图。

公共包专用

在这种情况下,当公共包转换为专用包时,新的上游行为不会以任何方式影响团队的工作流。

显示从公共转换为专用的包的插图。

允许外部版本

注意

必须是 源所有者 才能允许外部源版本。 有关详细信息,请参阅 源权限

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

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

  3. 选择包,然后选择省略号按钮以获取更多选项。 选择“ 允许外部源版本”。

    显示如何允许外部源版本的屏幕截图。

  4. 选择切换按钮以允许外部版本。 完成后,选择“ 关闭 ”。

    显示如何启用外部版本的屏幕截图。

允许使用 REST API 的外部版本

使用 PowerShell 允许外部版本

  1. 使用打包>读取、写入和管理权限创建个人访问令牌。

    显示如何选择打包权限的屏幕截图。

  2. 为个人访问令牌创建环境变量。

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. 将个人访问令牌转换为 baser64 编码字符串并构造 HTTP 请求标头。

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. 构造终结点 URL。 示例://pkgs.dev.azure.com/MyOrg/MyProject/_apis/packaging/feeds/MyFeed/nuget/packages/pkg1.0.0.nupkg/上游ing?api-version=6.1-preview.1

    • 项目范围的源

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      
    • 组织范围的源

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      

运行以下命令,检索包的上游行为状态。 $url$headers 上一节中使用的变量相同。

Invoke-RestMethod -Uri $url -Headers $headers