当 creating/updating/deleting Git 在 TFS 上分支时触发 powershell 脚本

Triggering powershell scripts when creating/updating/deleting Git branches on TFS

我在 TFS2017 服务器上有一些 Git 存储库。目标是实现一种方法,每次在此 git 存储库上创建分支时部署 Web,更新分支时更新 Web,删除分支时删除 Web。

我虽然为此使用了 powershell 脚本,但我已经实现了它。现在的问题是每次分支为created/updated/deleted.

时都要执行这个脚本

我尝试使用服务器端 Git 挂钩事件来执行此操作,但后来我意识到 TFS 并未实现这些挂钩。

我曾考虑使用 CI 构建设置来解决 creating/updating 部分问题,但后来我意识到从服务器控制面板创建分支不会触发 CI的构建。

所以我正在寻找 creating/deleting 问题的解决方案。

我了解了 TFS 中的集成服务。查看列表,我发现唯一对这个问题有用的是向服务发送 HTTP 请求(我会创建一个服务来执行我的脚本)但是我在下拉菜单中找不到任何合适的触发器creating/deleting 分支...

我在这里有点迷路,任何建议将不胜感激。

经过一段时间寻找解决方法后,我分两步找到了解决方案。

一方面,我已经通过使用 TFS 的 CI 构建解决了创建和更新网站的问题,该构建具有启动 PowerShell 脚本的任务。此 PowerShell 脚本使用 Invoke-Command 在具有我计划发布此网站的 IIS 服务器的远程计算机中执行命令。您可以找到有关此 PowerShell 远程执行 here. I used WebAdminitration 模块的更多信息,以便 Powershell 管理 IIS 服务器。

我必须实施此方法的主要问题是找到触发此 TFS 的 CI 构建的正确方法。我找到的解决方案是以一种非常开放的方式配置 CI 触发器(见下图)。我这样做是因为我的开发团队可以创建任意数量的功能分支,因此我无法手动将 CI 添加到每个分支。我可以使用 "exclude branch" 来防止这个 CI 构建被我的主要分支触发。如您所见,您可以灵活地玩耍。

另一方面,我无法使用任何 TFS 的 CI Build 在删除分支时删除网站,因为 TFS 没有任何可以侦听的事件来检测何时发生这种情况.所以我不得不另辟蹊径。

经过深思熟虑,我想出了一个想法,即拥有一个 Windows 服务来定期检查 Git 分支并将它们与 IIS 服务器中发布的网站进行比较。我只需要将此服务添加到托管 IIS 的机器上,并为进程提供足够的权限来修改包含 IIS 配置文件的文件夹 (C:\Windows\System32\inetsrv\config)。我还需要在 windows 凭据管理器中获得 TFS 的正确凭据。

我使用库 Microsoft.Web.Administration to controll the IIS and the libraries Microsoft.VisualStudio.Services.Common, Microsoft.TeamFoundation.SourceControl.WebApi 和 Microsoft.VisualStudio.Services.WebApi 与 TFS 的 Git 存储库通信。

实际上我正在做一些测试,但目前看来这似乎是解决我的问题的正确方法。如果这不起作用,我将 post 进行下一个实验。