首页 > 解决方案 > 在 TFS 上创建/更新/删除 Git 分支时触发 powershell 脚本

问题描述

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

我虽然为此使用了 powershell 脚本,但我已经实现了它。现在的问题是每次创建/更新/删除分支时都执行此脚本。

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

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

所以我正在寻找创建/删除问题的解决方案。

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

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

标签: gittfsazure-devopsgithooks

解决方案


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

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

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

在此处输入图像描述

另一方面,当删除分支时,我无法使用任何 TFS 的 CI 构建来删除网站,因为 TFS 没有任何事件可以被监听以检测何时发生这种情况。所以我不得不寻找另一个解决方案。

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

我使用库Microsoft.Web.Administration来控制 IIS 和库Microsoft.VisualStudio.Services.CommonMicrosoft.TeamFoundation.SourceControl.WebApi和 Microsoft.VisualStudio.Services.WebApi 与 TFS 的 Git 存储库通信。

我实际上正在做一些测试,但现在这看起来是解决我的问题的正确方法。如果这不起作用,我将发布下一个实验。


推荐阅读