Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby脚本在命令行上运行良好,但在Jenkins中失败_Ruby_Jenkins_Hudson_Watir - Fatal编程技术网

Ruby脚本在命令行上运行良好,但在Jenkins中失败

Ruby脚本在命令行上运行良好,但在Jenkins中失败,ruby,jenkins,hudson,watir,Ruby,Jenkins,Hudson,Watir,BLUF:Ruby脚本在命令行上运行良好,但在Jenkins中失败 环境信息: Ubuntu 16.04 Watir 6.1.0 Jenkins 2.4 Rubygems 2.6.10 *** LOCAL GEMS ** bigdecimal (default: 1.2.8) childprocess (0.6.2) colorize (0.8.1) dbi (0.4.5) did_you_mean (1.0.0) ffi (1.9.17) headless (2.3.1) io-consol

BLUF:Ruby脚本在命令行上运行良好,但在Jenkins中失败

环境信息:

Ubuntu 16.04
Watir 6.1.0
Jenkins 2.4
Rubygems 2.6.10

*** LOCAL GEMS **
bigdecimal (default: 1.2.8)
childprocess (0.6.2)
colorize (0.8.1)
dbi (0.4.5)
did_you_mean (1.0.0)
ffi (1.9.17)
headless (2.3.1)
io-console (default: 0.4.5)
json (default: 1.8.3)
mail (2.6.4)
mime-types (3.1)
mime-types-data (3.2016.0521)
mini_portile2 (2.1.0)
minitest (5.10.1, 5.8.4)
mysql2 (0.4.5)
net-ssh (4.1.0)
net-ssh-gateway (2.0.0)
net-telnet (0.1.1)
nokogiri (1.7.0.1)
power_assert (1.0.1, 0.2.7)
psych (default: 2.0.17)
rake (12.0.0, 10.5.0)
rdoc (5.1.0, default: 4.2.1)
rubygems-update (2.6.10, 2.6.8)
rubyzip (1.2.1)
selenium-webdriver (3.2.2)
test-unit (3.2.3, 3.1.7)
watir (6.2.0, 6.1.0)
websocket (1.2.4)
我有一个使用watir运行的ruby脚本。当我在命令行上运行它时,它可以正常工作,但当我在Jenkins中通过作业/构建运行它时,它会失败。它总是失败,因为设置浏览器不起作用。以下是错误:

Started by user anonymous
Building in workspace /ebs/jenkins/jobs/test watir/workspace
[workspace] $ /bin/sh -xe /tmp/hudson6395492977367774608.sh
+ ruby /opt/mysite/ci/regression.rb someSiteName dev false true
Running headless.
Running browser.
/opt/mysite/ci/regression.rb:166:in `<main>': undefined method `close' for nil:NilClass (NoMethodError)
Did you mean?  clone
Net::ReadTimeout. /usr/lib/ruby/2.3.0/net/protocol.rb:158:in `rbuf_fill'
<br />/usr/lib/ruby/2.3.0/net/protocol.rb:136:in `readuntil'
<br />/usr/lib/ruby/2.3.0/net/protocol.rb:146:in `readline'
<br />/usr/lib/ruby/2.3.0/net/http/response.rb:40:in `read_status_line'
<br />/usr/lib/ruby/2.3.0/net/http/response.rb:29:in `read_new'
<br />/usr/lib/ruby/2.3.0/net/http.rb:1437:in `block in transport_request'
<br />/usr/lib/ruby/2.3.0/net/http.rb:1434:in `catch'
<br />/usr/lib/ruby/2.3.0/net/http.rb:1434:in `transport_request'
<br />/usr/lib/ruby/2.3.0/net/http.rb:1407:in `request'
<br />/usr/lib/ruby/2.3.0/net/http.rb:1400:in `block in request'
<br />/usr/lib/ruby/2.3.0/net/http.rb:853:in `start'
<br />/usr/lib/ruby/2.3.0/net/http.rb:1398:in `request'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/http/default.rb:124:in `response_for'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/http/default.rb:78:in `request'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/bridge.rb:671:in `raw_execute'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/bridge.rb:110:in `create_session'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/bridge.rb:71:in `initialize'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/chrome/bridge.rb:42:in `initialize'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/common/driver.rb:61:in `new'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/common/driver.rb:61:in `for'
<br />/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver.rb:87:in `for'
<br />/var/lib/gems/2.3.0/gems/watir-6.2.0/lib/watir/browser.rb:46:in `initialize'
<br />/opt/mysite/ci/regression.rb:50:in `new'
<br />/opt/mysite/ci/regression.rb:50:in `<main>'
Build step 'Execute shell' marked build as failure
Finished: FAILURE
由匿名用户启动
在工作区内构建/ebs/jenkins/jobs/test watir/workspace
[workspace]$/bin/sh-xe/tmp/hudson6395492977367774608.sh
+ruby/opt/mysite/ci/regression.rb someSiteName dev false true
无头跑步。
运行浏览器。
/opt/mysite/ci/regression.rb:166:in`':nil:NilClass(NoMethodError)的未定义方法“close”
你是说?克隆
Net::ReadTimeout/usr/lib/ruby/2.3.0/net/protocol.rb:158:in'rbuf_fill'

/usr/lib/ruby/2.3.0/net/protocol.rb:136:in'readuntil'
/usr/lib/ruby/2.3.0/net/protocol.rb:146:in'readline'
/usr/lib/ruby/2.3.0/net/http/response.rb:40:in'read\u status\u line'
/usr/lib/ruby/2.3.0/net/http/response.rb:29:in'read\u new'
/usr/lib/ruby/2.3.0/net/http.rb:1437:in'block in transport_request'
/usr/lib/ruby/2.3.0/net/http.rb:1434:in'catch'
/usr/lib/ruby/2.3.0/net/http.rb:1434:在“传输请求”中
/usr/lib/ruby/2.3.0/net/http.rb:1407:in'request'
/usr/lib/ruby/2.3.0/net/http.rb:1400:in'block in request'
/usr/lib/ruby/2.3.0/net/http.rb:853:in'start'
/usr/lib/ruby/2.3.0/net/http.rb:1398:in'request'
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/http/default.rb:124:在“响应”中
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/http/default.rb:78:在“请求”中
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/http/common.rb:61:in'call'
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/bridge.rb:671:in'raw_execute'
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/bridge.rb:110:在“创建会话”中
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/remote/bridge.rb:71:在“初始化”中
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/chrome/bridge.rb:42:在“初始化”中
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/common/driver.rb:61:in'new'
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver/common/driver.rb:61:in'for'
/var/lib/gems/2.3.0/gems/selenium-webdriver-3.2.2/lib/selenium/webdriver.rb:87:in'for'
/var/lib/gems/2.3.0/gems/watir-6.2.0/lib/watir/browser.rb:46:在“初始化”中
/opt/mysite/ci/regression.rb:50:in'new'
/opt/mysite/ci/regression.rb:50:in`' 生成步骤“执行shell”将生成标记为失败 完成:失败
我仔细检查了我正在使用的模块中从“apt”安装的版本。我还仔细检查了每个安装gem的版本。我硬编码了沿着命令行传递给脚本的变量(与使用参数化构建相反)。以下是正在执行的脚本中的代码:

#!/usr/bin/env ruby
require 'watir'
require 'headless'
argSite        = ARGV[0]
argEnvironment = ARGV[1]
argSendEmail   = ARGV[2]
argHeadless    = ARGV[3]
begin
    if argHeadless.to_s == 'true'
        puts "Running headless."
        headless = Headless.new
        headless.start
    end

    puts "Running browser."
# vvv reason tests fail
    browser = Watir::Browser.new(:chrome)
    browser.window.resize_to(1200, 1000)
    browser.driver.manage.timeouts.implicit_wait = 15

...tests go here...

rescue => e
    puts ("#{e}. "+ e.backtrace.join("\n<br />"))
ensure
# vvv script fails here
    browser.close
    if argHeadless.to_s == 'true'
        headless.destroy
    end
end
#/usr/bin/env ruby
需要“watir”
要求“无头”
argSite=ARGV[0]
argEnvironment=ARGV[1]
argsendmail=ARGV[2]
argHeadless=ARGV[3]
开始
如果argHeadless.to_s=='true'
把“无头奔跑”
无头
无头启动
结束
放入“正在运行的浏览器”
#vvv原因测试失败
browser=Watir::browser.new(:chrome)
browser.window.resize_为(12001000)
browser.driver.manage.timeouts.implicit_wait=15
…测试在这里进行。。。
救援=>e
puts(“#{e}.”+e.backtrace.join(“\n
”) 确保 #vvv脚本在此失败 browser.close 如果argHeadless.to_s=='true' 无头毁灭 结束 结束
回答:Chrome无法以root用户身份运行。詹金斯正在以root用户身份运行。当它运行一个构建时,该构建以root用户身份运行。在中,使用以下命令更改脚本作为哪个用户运行

su -c 'ruby /opt/mysite/ci/regression.rb someSiteName dev false true' jenkins

似乎
浏览器
未初始化。您是否安装了
watir webdriver
以便在Jenkins运行的机器上启动Chrome?@Uzbekjon i添加了要求。fwiw/fyi,watir 6只需要调用“require'watir'”,不再需要“*-webdriver”。默认情况下也会选择chrome。注:已安装chromedriver。