Continuous integration 如何在TeamCity中设置代理要求,以检测是否安装了应用程序?

Continuous integration 如何在TeamCity中设置代理要求,以检测是否安装了应用程序?,continuous-integration,teamcity,Continuous Integration,Teamcity,我有一个包含多个代理的生成环境。 我想在我的构建中设置一个代理需求,用于检测是否安装了某些软件。在某些情况下,我可以在env.Path中查找特定字符串。但有些软件不会修改路径 我意识到在安装软件后,我可以编辑BuildAgent.properties文件来设置特定的属性,但我希望它更加自动化 具体的例子是,我有一个使用MSDeploy部署网站的构建,但是如果没有安装MSDeploy,它将无法工作。如何在生成中指定需要安装了MSDeploy的代理 我的知识代理需求只需验证代理参数的存在或设置的值即

我有一个包含多个代理的生成环境。
我想在我的构建中设置一个代理需求,用于检测是否安装了某些软件。在某些情况下,我可以在env.Path中查找特定字符串。但有些软件不会修改路径

我意识到在安装软件后,我可以编辑BuildAgent.properties文件来设置特定的属性,但我希望它更加自动化


具体的例子是,我有一个使用MSDeploy部署网站的构建,但是如果没有安装MSDeploy,它将无法工作。如何在生成中指定需要安装了MSDeploy的代理

我的知识代理需求只需验证代理参数的存在或设置的值即可工作。正如您所说,这需要手动或以某种自动方式编辑
/conf/buildAgent.properties
配置文件

在自动化方面,您可以采用编写作为代理引导程序的构建配置的方法;i、 e.在所有代理上运行的构建(计划过夜/手动触发),并根据代理上的某些条件在
/conf/buildAgent.properties
文件中维护构建代理参数。类似于(伪):

如果[exists/path/to/MSDeploy],则将MSDeployExists回显到buildAgent.properties


这是一个很大的免责声明;我自己还没有尝试过,我相信代理会根据对此文件的更改自动重新启动,因此自动编辑该文件可能会出现问题。但这是一个以集中方式维护您的需求的潜在解决方案,如果它有效,那就太好了。我使用类似的方法将自定义构建脚本引导到所有代理,以增强TeamCity中已经丰富的功能集。

您可以构建一个简单的代理插件。以下是一些建议:

  • 扩展
    AgentLifeCycleAdapter
    并实现
    agentinizalized
    方法
  • 代理化
    方法中实现必要应用程序的检测逻辑(例如基于某些文件的存在)
  • 使用
    agent.getConfiguration().addConfigurationParameter()
    向服务器报告代理参数

如果您的检测逻辑可以通过文件检测来实现,那么您可以使用FileWatcher来监控特定的文件,并根据这些文件报告参数,即使不重新启动代理程序

我同意SteveChapman的回答。很明显,您可以测试环境变量(exit、contains、start with等)。TeamCity了解代理上安装的.NET版本(以及Visual Studio和VS SDK)。然而,我找不到任何与“testpath”功能相当的功能


确定的方法是通过
/conf/buildAgent.properties
配置文件添加代理参数。

必须重新启动代理才能使更改生效,但效果很好。谢谢。刚刚发现这个“文件可以在代理运行时编辑:代理检测到更改并(在完成运行的构建后,如果有)重新启动自动加载新设置。”来自[link](),因此根本不需要重新启动计算机。哇。。。这么复杂的任务?多伤心啊。