运行 代理构建完成后 TeamCity 服务器上的脚本
Running scripts on a TeamCity server after an agent build has completed
我们有一个 TeamCity 服务器 运行ning 在 mac 上,我们有多个代理 运行ning 在 mac 和 windows 上执行不同的类型构建数。
尽管构建本身不同(使用 xcode/build 和 msbuild 构建),但每个配置末尾的一堆脚本是相同的。它们涉及将文件复制到特定的网络共享、通知团队成员以及其他一些事情。
如果我可以 运行 各自构建代理上的平台特定任务,但之后有实际服务器 运行 最终脚本,那就太好了。
这样做的原因是为了避免在 bash 和批处理文件中写入所有内容(我可以为服务器编写它,并确保它有任何依赖性),而且如果我们想挂钩构建失败的 audio/visual/physical 警报,运行 的脚本应该只 运行 在服务器上(代理上没有 speakers/lights/nerf 大炮)。
知道如何在服务器本身上轻松地为 运行 设置脚本,并从构建中传递属性吗?
这是否需要插件,我可以对依赖系统做些什么,还是我需要深入研究 REST API 并以这种方式触发其他配置?
我们最终得出的解决方案是使用Meta-runners with a Python Runner。这允许我们拥有跨平台 python 脚本,我们可以使用 Team City 变量进行设置。它还允许我们在多个配置中使用这些脚本。
如果有人想自己做这件事,如果您仍然需要在脚本中做一些特定于平台的事情,python 中的 platform module 会很有用。
例如,以下代码允许我们使用已在构建代理上设置的网络共享路径:
if platform.system() == 'Windows':
network_folder = "//server_pc/builds"
else:
network_folder = "/Volumes/builds"
我们有一个 TeamCity 服务器 运行ning 在 mac 上,我们有多个代理 运行ning 在 mac 和 windows 上执行不同的类型构建数。
尽管构建本身不同(使用 xcode/build 和 msbuild 构建),但每个配置末尾的一堆脚本是相同的。它们涉及将文件复制到特定的网络共享、通知团队成员以及其他一些事情。
如果我可以 运行 各自构建代理上的平台特定任务,但之后有实际服务器 运行 最终脚本,那就太好了。
这样做的原因是为了避免在 bash 和批处理文件中写入所有内容(我可以为服务器编写它,并确保它有任何依赖性),而且如果我们想挂钩构建失败的 audio/visual/physical 警报,运行 的脚本应该只 运行 在服务器上(代理上没有 speakers/lights/nerf 大炮)。
知道如何在服务器本身上轻松地为 运行 设置脚本,并从构建中传递属性吗?
这是否需要插件,我可以对依赖系统做些什么,还是我需要深入研究 REST API 并以这种方式触发其他配置?
我们最终得出的解决方案是使用Meta-runners with a Python Runner。这允许我们拥有跨平台 python 脚本,我们可以使用 Team City 变量进行设置。它还允许我们在多个配置中使用这些脚本。
如果有人想自己做这件事,如果您仍然需要在脚本中做一些特定于平台的事情,python 中的 platform module 会很有用。
例如,以下代码允许我们使用已在构建代理上设置的网络共享路径:
if platform.system() == 'Windows':
network_folder = "//server_pc/builds"
else:
network_folder = "/Volumes/builds"