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

时间:2012-01-20 14:22:28

标签: ruby cucumber environment-variables teamcity aruba

我在TeamCity构建环境中测试命令行gem时遇到了一些麻烦。

我正在使用gem来构建各种类型的清单文件elf_manifesto。它从命令行运行,我用Cucumber成功测试了它,真正有用的Aruba gem。本地我正在使用RVM,ruby 1.9.2开发Lion MBP。一切都很笨拙。

将构建过程移动到工作中的TeamCity环境时出现问题。 TeamCity代理程序在Windows机器上运行,问题似乎是当从Aruba触发命令行可执行文件时,在Windows框中的路径环境中找不到该脚本。这是构建日志中的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目录中)添加到路径中。这在我的本地设置上工作正常,但在Windows上失败。我已经尝试将RUBYPATH环境变量添加到TeamCity中的构建参数中,但到目前为止还没有运气。

有没有人有任何指针?

提前致谢。

3 个答案:

答案 0 :(得分:1)

根据我的经验,Aruba不会将bin/中的宝石添加到路径中。即使在基于UNIX的项目中,我也必须自己完成:

env.rb

PROJECT_ROOT = File.join(File.dirname(__FILE__),'..','..')
ENV['PATH'] = "#{File.join(PROJECT_ROOT,'bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"

话虽这么说,我从未让Aruba像在UNIX上一样在Windows上工作。

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

答案 1 :(得分:0)

在Windows中,仅当具有.COM.EXE(和其他)等扩展名的文件可执行时才会生效。

您可以将manifesto更改为ruby manifesto,使用manifesto的正确路径,它应该适用于Windows。

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

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)

希望有所帮助

答案 2 :(得分:0)

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

解决方案#1

Aruba会在每个Cucumber场景的持续时间内自动将项目的bin目录添加到PATH环境变量中。

您可以在项目根目录下创建bin目录,然后将二进制文件复制到那里

解决方案#2

您可以使用aruba-jbb,它提供@no-aruba-tmpdir标记来处理此案例。