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

时间:2014-05-29 17:00:55

标签: continuous-integration teamcity

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

如果您的检测逻辑可以通过文件检测实现,您可以使用FileWatcher监视特定文件并根据它们报告参数,即使不重新启动代理

答案 1 :(得分:2)

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

在自动化方面,您可以采用创建充当代理引导程序的构建配置的方法;即在所有代理上运行的构建(计划过夜/手动触发),并根据代理上的某些条件在<agent home>/conf/buildAgent.properties文件中维护构建代理参数。像(伪)的东西:

if [ exists /path/to/MSDeploy ] then echo MSDeployExists to buildAgent.properties

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

答案 2 :(得分:1)

我同意SteveChapman的回答。很明显,您可以测试环境变量(退出,包含,开始等)。 TeamCity了解代理(以及Visual Studio和VS SDK)上安装的.NET版本。但是,我找不到任何等同于&#34; testpath&#34;一种能力。

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