从文件共享迁移包
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
Azure Artifacts 将托管的 NuGet 源作为服务提供。 如果将 NuGet 包用作持续交付工作流的一部分,Azure Artifacts 可帮助通过公共和专用源管理依赖项。 Azure Artifacts 适用于支持经过身份验证的 NuGet 源的任何持续集成系统。
关键概念
与文件共享相比,Azure Artifacts 提供了许多优势:
索引: Azure Artifacts 维护每个源中所有包的索引,这可实现快速
nuget list操作。 文件共享上的列表操作要求客户端打开每一个nupkg并检查元数据,nuspec除非你的文件共享已配置为提供 NuGet 客户端理解的索引。不可变性: 例如,包版本 (,
MyPackage.1.0.0.0.nupkg) 只能推送到源一次。 这可确保该版本的任何依赖项都保证保持有效。 但是,如果工作流使用较新的二进制文件发布包而不更改版本号,则这些工作流在移动到 Azure Artifacts 源时会中断。 详细了解 Azure Artifacts 中的 不可变性 。格式良好: Azure Artifacts 会验证所有推送的包,以确保它们格式良好。 这可以防止无效的包进入开发和生成环境。 但是,在迁移到 Azure Artifacts 源时,发布格式不正确的包的任何工作流都会中断。
注意
建议使用 NuGet 版本 4.8.2 或更高版本。 还支持旧版 NuGet 版本 2.x。
身份验证和授权
如果使用 Active Directory 支持的文件共享,则你和本地生成代理可能会使用 Windows NTLM 自动进行身份验证。 将包移动到 Azure Artifacts 需要进行一些更改:
认证: 需要提供对 NuGet 客户端的访问权限才能推送和还原包。
- Visual Studio:凭据获取自动发生。
- nuget.exe:安装 凭据提供程序后,凭据获取会自动发生。
授权: 确保需要访问包的任何主体 (用户、服务组织、组等) 具有适当的权限。 有关详细信息,请参阅 权限 部分。
迁移包
迁移包是一个 4 步过程:
清点现有包源
在进行任何配置更改之前,请检查现有 NuGet 文件共享:
代码库中的任何nuget.config文件(可能与解决方案 (.sln) 文件位于同一文件夹中)
全局nuget.config文件:
- 命令提示:
%APPDATA%\NuGet\NuGet.Config - PowerShell:
$env:APPDATA\NuGet\NuGet.Config
- 命令提示:
查找服务器路径 (示例 <add key="SMBNuGetServer" value="\\server\share\NuGet" />) 并复制它。 你将使用以下部分的路径列表。
制定权限计划
设置新源时,可以:
- 设置源权限以匹配现有的文件共享权限。
- 将源权限与现有的 Azure DevOps 团队和组保持一致。
如果要匹配现有文件共享权限,请注意包含包的每个共享的权限。 具体而言,请记下主体:
- 完全控制
- 修改 或 写入
- 读取 & 执行、 列出文件夹内容或 读取
设置源
现在,你已清点了现有包源,现在可以设置源了。 在本演练中,我们将假定源到 SMB 共享的 1:1 映射。
创建源
对于每个 SMB 共享,请按照说明 创建源:
- 使用 SMB 共享文件夹的名称作为 源名称。
- 选择源 可见性、 上游源和 范围。
对于已创建的每个源,设置源权限时应考虑一组 源权限 。
如果选择设置新的源权限以匹配现有文件共享权限,请使用下表为主体授予适当的权限:
| 文件共享权限 | 源权限 |
|---|---|
| 完全控制 | 所有者 |
| 修改、写入 | 作者 |
| 读取 & 执行、列出文件夹内容、读取 | 读取者 |
使用源
对于每个源,请选择“连接到源>”NuGet.exe并从“项目设置”部分复制源 URL。 需要源 URL 才能迁移包并更新 NuGet 配置。
迁移 NuGet 包
设置源后,可以从每个文件共享批量推送到相应的源。 为此,请执行以下操作:
在提升的 PowerShell 提示窗口中运行以下命令。 这会设置环境,使你能够使用 nuget.exe 和 Azure Artifacts 源。
init.ps1对于每个共享,请使用以下命令将共享中的所有包推送到新源:
nuget push <YOUR_PACKAGE_PATH>\*.nupkg -Source <YOUR_SOURCE_URL> -ApiKey Azure DevOps Services
提示
对于较大的团队,在执行 nuget push 操作之前,应考虑将每个共享标记为只读,以确保在迁移期间没有人添加或更新包。
更新 NuGet 配置
现在,返回到在“库存现有包源”部分中找到的每个nuget.config文件。 对于每个共享, (示例 <add key="SMBNuGetServer" value="\\server\share\NuGet" />) 找到文件共享路径,并将其 value 替换为新源的源 URL。
与生成集成
更新内部版本,确保它们具有适当的凭据,用于使用和发布源中的包。 有关如何 在 Azure Pipelines 中还原 NuGet 包 以及如何 使用 Azure Pipelines 发布 NuGet 包 的详细信息。