我有一个包含多个代理的构建环境 我想在我的构建中设置一个代理要求,以检测是否安装了某些软件。在某些情况下,我可以在env.Path中查找特定字符串。但有些软件不会修改Path。
我意识到安装软件后我可以编辑BuildAgent.properties文件来设置一个特定的属性,但我希望它更自动化。
具体实例是我有一个使用MSDeploy部署网站的构建,但如果没有安装MSDeploy,它将无法工作。如何在构建中指定我需要安装了MSDeploy的代理?
答案 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
配置文件添加代理参数。