如何将版本控制中的 link 子文件夹作为发布管理中的工件

How to link subfolder in version control as artifact in release management

TFS 2017 release management artifact files from version control相关

我问了一个新问题,因为我相信我有一个边缘案例,答案没有直接解决,我不想破坏那个 OP。具体来说,我如何允许独立的异地团队在单独的 TFS 团队项目中构建所需的支持脚本,将其脚本作为单独 TFS 团队项目的发布定义中的工件提供?单独的团队项目由独立客户构建,我们不允许将内容附加到他们的源代码管理中。此外,对脚本的更新必须自动传播到在 TFS 上使用它们的所有发布定义。

我们在 TFS 中有大约 40 个团队项目都 运行 在不同的时间表上。一个单独的运营团队处理 TFS 中的所有构建和发布管理任务。

由于团队项目之间的不断跳动,并且因为操作人员也想使用 TFS 中的版本控制和工作项跟踪功能,我们为他们创建了一个单独的团队项目来存储脚本、安装程序和许可证文件。这些在其他项目的 RM 任务中被自动引用 installation/execution。还有一个单独的版本控制文件夹树,用于跟踪项目特定的脚本——像这样:

这使他们可以更轻松地管理脚本并将它们与自己的工作项相关联,而无需在所有其他团队项目之间来回切换。开发团队无权访问 ops 项目。

但是,当从他们的项目链接 RM 中的版本控制工件时,它只会绑定到根并且似乎将整个版本控制结构复制到代理,即使其中大部分内容不相关到正在部署的应用程序。

有没有一种方法可以将版本控制中项目中的特定文件夹(而不是全部文件夹)作为工件添加到单独项目中的发布定义中?我们让 QA 发布启动生产流程,它从 ops 项目和正在发布的项目中提取工件。所有后续版本都重用在 QA 构建中成功的工件,而不是返回到服务器以获取工件的新版本。

构建定义不允许我们在团队项目之外选择工作区路径,因此我也看不到在构建步骤中引入他们的脚本的方法。

有办法吗?其他组织如何处理这个问题?

没有

我在另一个答案中提供的相同答案也适用于此:不要。将它们发布为 NuGet 包或单独的构建工件;一个发布定义可以有多个链接到它的工件。

我感谢 Daniel 的回答,我相信他所说的是最佳实践。但是,我相信通过使用其他存储库,我找到了对我的问题更直接的技术答案。

Release Management 允许您独立引用 Git 存储库和分支,就像我最初希望在一个单独的项目中处理 TFVC 存储库下的文件夹一样。通过这种方式,我们配置了 TFVC 存储库来处理大型二进制文件(安装程序)、许可证文件等,我们将其版本化并放入团队项目 Nuget 提要中以供 RM 参考。为了解决文件夹问题,我们在同一个 TFS 项目中为我们的运营团队项目创建了单独的 Git 存储库。像这样:

  • 二进制文件(基于 TFVC 的存储库)

  • Git 存储库

    • CommonDeploymentScripts

    • 环境脚本

    • App1 脚本

    • App2 脚本

这样一来,来自任何其他项目的 TFS RM 都可以配置为将这些存储库中的任何一个或多个作为工件拉入供代理使用,仅降低放置在其中的那些脚本。

此外,操作团队不必在一堆独立的团队项目中跳来跳去时交叉引用特定于应用程序的脚本。注意:Daniel 说得对,应用程序特定的内容应该与应用程序项目本身一起进行版本控制和存储。但是,某些环境可能还没有那么奢侈,所以这可以满足这种需求。

RM 还允许您在单个 Git 存储库下引用分支,因此这可能有点矫枉过正。然而,我们不喜欢在 repo 下分支的想法,实际上没有任何业务被合并到 master 中——感觉错误的空间太大了。