【问题标题】:Using Teamcity properties inside nant script在 nant 脚本中使用 Teamcity 属性
【发布时间】:2014-02-25 09:44:33
【问题描述】:

我正在尝试在我的 nant 脚本中使用 teamcity 代理属性。当我使用 teamcity 运行构建时,这非常有效。但是,由于无法评估 teamcity 之外的属性,因此当我通过命令行运行 nant 时脚本会失败。这是示例代码 -

<?xml version="1.0"?>
<project name="script" default = "publish"> 
  <target name="publish">
    <echo message="${agent.home.dir}"/>
  </target>
</project>

我确定我在这方面遗漏了一些非常基本的东西。请帮忙!

【问题讨论】:

  • 你能在 nant 中评估环境变量吗?
  • 是的。以下将为我提供机器上设置的路径变量。 ${environment::get-variable('path')}
  • 那您或许可以定义 TeamCity 环境变量?以env. 为它们的名称添加前缀以将它们定义为环境变量。如果您需要访问内部 TeamCity 变量,请在 TeamCity 中创建一个引用内部变量的环境变量,它应该可以正常工作。
  • 一个很好的练习是创建一个简单的命令行脚本,它只执行SET 来转储所有已知变量,通常很多变量都以不同的名称存在。
  • 好主意...但它不能解决我的问题,因为 cmd 用于我们没有安装 teamcity 的机器上。如果我从 cmd 运行,我需要一种将这些变量评估为默认值的方法。

标签: teamcity nant


【解决方案1】:

我在将 NAnt 与 TeamCity 一起使用时遇到了类似的问题,因为它可以在 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}\p‌lugins\dotnetPlugin\bin\JetBrains.BuildServer.MSBuildLoggers.dll" if="${teamcity}" />
        </if>

【讨论】:

  • 感谢@Geddon!我也在考虑类似的问题。但是 Nant 编译器似乎在执行任何 if 块之前评估所有属性。此代码失败 -
  • 在这种情况下,您还可以检查该属性是否存在,Nant 不会导致问题。 .将更新答案,以便更清楚。基本上为任何 TeamCity 属性添加条件,并且可能使用全局属性根据构建打开或关闭它。
  • 这等于什么? ${teamcity},如果这只是一个属性,那么你很好。失败的原因是什么?
  • ${teamcity} 只是我在从 teamcity 运行时设置的属性。默认为假。这种方法的问题是,我需要使用 2 个 exec 程序。我想消除这种情况,因为已经有多个项目和很多这样的电话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多