Ruby 在TeamCity上构建和测试命令行Gem
我在TeamCity构建环境中测试命令行gem时遇到一些问题 我正在开发一个用于构建各种类型清单文件的gem。它是从命令行运行的,我已经用Cucumber成功地对它进行了测试,而且它非常有用。在本地,我正在使用RVM和ruby 1.9.2开发Lion MBP。一切都很好 将构建过程移动到工作中的TeamCity环境时出现了问题。TeamCity代理正在windows机箱上运行,问题似乎是从Aruba触发命令行可执行文件时,在windows机箱上的path环境中找不到脚本。下面是构建日志的Cucumber输出片段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
[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文件,与您的文件一起使用,这可能会奏效。现在我迫不及待地想试试。我会在本周晚些时候告诉你我的进展情况。