jenkinsci / jenkins.rb

Deprecated, see https://www.jenkins.io/jep/7
393 stars 83 forks source link

ruby-runtime 0.11 completely breaks RVM #86

Closed evanphx closed 11 years ago

evanphx commented 11 years ago

Indicating a ruby to build with via the RVM plugin results in:

Started by user anonymous
Building in workspace /u/jenkins/jobs/test/workspace
FATAL: (NameError) no method 'write' for arguments (org.jruby.RubyString) on Java::JavaIo::PrintStream
  available overloads:
    (int)
    (byte[])
org.jruby.exceptions.RaiseException: (NameError) no method 'write' for arguments (org.jruby.RubyString) on Java::JavaIo::PrintStream
  available overloads:
    (int)
    (byte[])
    at RUBY.<<(/u/jenkins/plugins/rvm/WEB-INF/classes/vendor/gems/gems/jenkins-plugin-runtime-0.1.17/lib/jenkins/model/listener.rb:32)
    at RUBY.setup(/u/jenkins/plugins/rvm/WEB-INF/classes/models/rvm_wrapper.rb:28)
    at RUBY.setUp(/u/jenkins/plugins/rvm/WEB-INF/classes/vendor/gems/gems/jenkins-plugin-runtime-0.1.17/lib/jenkins/plugin/proxies/build_wrapper.rb:18)

Downgrading to 0.10 fixes the issue.

yyuu commented 11 years ago

Please let me know the version of Jenkins.

yyuu commented 11 years ago

I confirmed this on Jenkins 1.517 + ruby-runtime 0.11 + rvm plugin 0.4. The cause of this problem is old gem dependency (jenkins-plugin-runtime 0.1.17) of rvm plugin 0.4.

Because the latest master of rvm plugin is using jenkins-plugin-runtime 0.2.3 (latest) at jenkinsci/rvm-plugin@e54486ebfa0513c5b6ca74764a8cbcd7c98dbb61, install rvm plugin from master should solve this problem. Though, there is another incompatibility issue (class hierarchy changes) between jenkins-plugin-runtime 0.1.17 and 0.2.3. Just upgrading rvm plugin may lose job configurations :(

evanphx commented 11 years ago

It was Jenkins 1.504. I thought that upgrading the RVM plugin might solve the issue, but 0.4 is the latest released version, leaving me stuck.

yyuu commented 11 years ago

Yep, rvm plugin 0.4 is the latest release version. The latest development version can only be accessed via github repo.

yyuu commented 11 years ago

Tested with small script.

#!/usr/bin/env ruby
require "java"
puts(RUBY_DESCRIPTION)
java.lang.System.out.write("hello, world\n")

JRuby 1.6 translates call of write(String) on java.io.PrintStream as call of java.io.PrintStream#print(String).

% ruby j.rb
jruby 1.6.8 (ruby-1.8.7-p357) (2012-09-18 1772b40) (OpenJDK 64-Bit Server VM 1.7.0_21) [linux-amd64-java]
hello, world

JRuby 1.7 doesn't treat so.

% ruby j.rb
jruby 1.7.4 (1.9.3p392) 2013-05-16 2390d3b on OpenJDK 64-Bit Server VM 1.7.0_21-b02 [linux-amd64]
NameError: no method 'write' for arguments (org.jruby.RubyString) on Java::JavaIo::PrintStream
  available overloads:
    (int)
    (byte[])
  (root) at j.rb:4
yyuu commented 11 years ago

Confirmed that setting java_alias on java.io.PrintStream will solve problem on ruby-runtime 0.11+.

require "java"
java_import java.io.PrintStream
class PrintStream
  java_alias(:write, :print, [java.lang.String])
end