Ruby 在TeamCity上构建和测试命令行Gem

Ruby 在TeamCity上构建和测试命令行Gem,ruby,cucumber,environment-variables,teamcity,aruba,Ruby,Cucumber,Environment Variables,Teamcity,Aruba,我在TeamCity构建环境中测试命令行gem时遇到一些问题 我正在开发一个用于构建各种类型清单文件的gem。它是从命令行运行的,我已经用Cucumber成功地对它进行了测试,而且它非常有用。在本地,我正在使用RVM和ruby 1.9.2开发Lion MBP。一切都很好 将构建过程移动到工作中的TeamCity环境时出现了问题。TeamCity代理正在windows机箱上运行,问题似乎是从Aruba触发命令行可执行文件时,在windows机箱上的path环境中找不到脚本。下面是构建日志的Cucu

我在TeamCity构建环境中测试命令行gem时遇到一些问题

我正在开发一个用于构建各种类型清单文件的gem。它是从命令行运行的,我已经用Cucumber成功地对它进行了测试,而且它非常有用。在本地,我正在使用RVM和ruby 1.9.2开发Lion MBP。一切都很好

将构建过程移动到工作中的TeamCity环境时出现了问题。TeamCity代理正在windows机箱上运行,问题似乎是从Aruba触发命令行可执行文件时,在windows机箱上的path环境中找不到脚本。下面是构建日志的Cucumber输出片段

[13:46:37]: [Scenario: Start manifesto with no parameters] When  I run `manifesto`
[13:46:37]: [When  I run `manifesto`] ChildProcess::LaunchError: The system cannot find the    file specified. (2)
Aruba gem旨在在运行测试时负责将可执行文件(位于bin dir中)添加到路径中。这在我的本地设置上运行良好,但在Windows上失败。我曾尝试在TeamCity的构建参数中添加RUBYPATH环境变量,但到目前为止没有成功

有人有什么建议吗


提前感谢。

以我的经验,阿鲁巴不会将您的宝石从
bin/
添加到路径中。即使在基于UNIX的项目上,我也必须自己做:

env.rb
中:

PROJECT_ROOT = File.join(File.dirname(__FILE__),'..','..')
ENV['PATH'] = "#{File.join(PROJECT_ROOT,'bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
话虽如此,我从未让Aruba在Windows上像在UNIX上那样工作过


要帮助诊断,请使用功能上的
@annound
标记(这会导致打印stderr和stdout),甚至可能在自定义步骤中插入您自己的日志语句。

在Windows中,仅当具有一些扩展名(如
.COM
.EXE
(和其他)的文件可执行时

您可以将
manifesto
更改为
ruby manifesto
,如有正确的
manifesto
路径,它应该可以在windows上运行

如果您还想在Unix平台上工作,您需要更改Aruba的
support\env.rb
,如下所示

require 'aruba/cucumber'
module ArubaOverrides
  def detect_ruby(cmd)
    processor, platform, *rest = RUBY_PLATFORM.split("-")
    #puts platform
    if platform =~ /w32$/ && cmd =~ /^manifesto /
      "ruby -I../../lib -S ../../bin/#{cmd}"
    else
      "#{cmd}"
    end
  end
end

World(ArubaOverrides)

希望它有帮助

您应该知道,Aruba运行它测试的应用程序,并在自己的工作目录(awd)中创建所有本地输出。awd默认为tmp/aruba,由aruba在每个场景开始时清除和创建。但是,上一个场景创建的内容保留在awd中供您检查

解决方案#1 Aruba将在每个场景期间自动将项目的bin目录添加到PATH环境变量中

您可以在项目根目录下创建一个
bin
dir,并将二进制文件复制到那里

解决方案#2
您可以使用,它提供了一个
@no aruba tmpdir
标签来处理此案例。

Cheers@davetron5000。Aruba在最新版本中为您提供了这一功能,但我也尝试过手动操作,恐怕没有任何乐趣。公告标签真的很有用,谢谢。我刚刚尝试传入RUBYPATH env变量,并确认它已在日志中设置。理论上,在搜索可执行脚本时,应该将RUBYPATH附加到路径。不幸的是,他仍然没有完成任务。我是否需要做一些特殊的事情使文件在Windows上可执行?我不确定;我不经常使用windows,也没有定期访问它的权限,但我相信在安装Ruby时可以选择将.rb文件与Ruby关联。我想你可以试着制作一个.bat文件,它会显示“ruby your_app”。俗气,但可能有用?啊,这很有道理。谢谢你,拉里。我认为davetron5000建议使用上面的.bat文件,与您的文件一起使用,这可能会奏效。现在我迫不及待地想试试。我会在本周晚些时候告诉你我的进展情况。