我正在尝试在我的nant脚本中使用teamcity代理属性。当我使用teamcity运行构建时,这非常有效。但是,由于无法评估teamcity之外的属性,因此当我通过命令行运行nant时,脚本会失败。以下是示例代码 -
<?xml version="1.0"?>
<project name="script" default = "publish">
<target name="publish">
<echo message="${agent.home.dir}"/>
</target>
</project>
我确信我遗漏了一些非常基本的东西。请帮助!
答案 0 :(得分:0)
我在TeamCity中使用NAnt时遇到了类似的问题,因为它可以很好地从TeamCity运行它,但是如果你通过命令行进行构建它会失败,因为NAnt不知道那些TeamCity变量是什么。
我的解决方案很简单。由于我的构建需要与TeamCity进行交互的唯一一次是在TeamCity调用的构建期间,我给了用户关闭该功能的选项,如果需要从命令行运行它。
示例:
<property name="TeamCity.BuildFeatures" value="false" />
<if test="${bool::parse(TeamCity.BuildFeatures)}" >
<echo message="Your TeamCity variables like ##teamcity[] are ignored" />
</if>
希望这很有用..
根据评论编辑:
<property name="agent.home.dir" value="..\TeamCity\BuildAgent" />
<exec program="msbuild.exe" basedir="${msbuilddir}" commandline="\testProject.csproj">
<arg value="/property:Configuration=Release;Platform=x86"/>
<arg value="/verbosity:diagnostic"/> <arg value="Verbosity=diagnostic;Encoding=UTF-8"/>
<if test="${property::exists('agent.home.dir')}" >
<arg value="/l:JetBrains.BuildServer.MSBuildLoggers.MSBuildLogger,${agent.home.dir}\plugins\dotnetPlugin\bin\JetBrains.BuildServer.MSBuildLoggers.dll" if="${teamcity}" />
</if>