Jenkins、rbenv、bundler - 使用 Jenkins 和 rbenv 时,rbenv 插件如何预安装捆绑器,为什么我的情况不是这样?

Jenkins, rbenv, bundler - When using Jenkins and rbenv, how does the rbenv plugin preinstall bundler, and why isn't it in my case?

我正在使用 Jenkins 和 Appium 的 Ruby 库在 OSX 上设置一个 CI 环境。

我正在使用 rake 任务在 RSpec 中启动我的测试套件。

使用类似的配置,我能够 运行 在另一台机器上使用 Jenkins 进行测试。我现在正在使用 rbenv(和 rbenv 插件)并遇到一些问题。

这是我尝试 运行 这份工作时得到的结果:

$ bash -c "[ -d $HOME/.rbenv-jenkins ]"
$ bash -c "[ -d $HOME/.rbenv-jenkins/plugins/ruby-build ]"
$ bash -c "cd /Users/Shared/Jenkins/Home/workspace/Tests && env  RBENV_ROOT\=$HOME/.rbenv-jenkins RBENV_VERSION\=2.2.5 CONFIGURE_OPTS\= RUBY_CONFIGURE_OPTS\= $HOME/.rbenv-jenkins/bin/rbenv local 2>/dev/null || true"
Use local Ruby version 2.2.5.
$ bash -c "mkdir $HOME/.rbenv-jenkins/.lock"
$ bash -c "env RBENV_ROOT\=$HOME/.rbenv-jenkins RBENV_VERSION\=2.2.5 CONFIGURE_OPTS\= RUBY_CONFIGURE_OPTS\= $HOME/.rbenv-jenkins/bin/rbenv versions --bare"
$ bash -c "env RBENV_ROOT\=$HOME/.rbenv-jenkins RBENV_VERSION\=2.2.5 CONFIGURE_OPTS\= RUBY_CONFIGURE_OPTS\= $HOME/.rbenv-jenkins/bin/rbenv rehash"
$ bash -c "env RBENV_ROOT\=$HOME/.rbenv-jenkins RBENV_VERSION\=2.2.5 CONFIGURE_OPTS\= RUBY_CONFIGURE_OPTS\= $HOME/.rbenv-jenkins/bin/rbenv exec gem list"
$ bash -c "env RBENV_ROOT\=$HOME/.rbenv-jenkins RBENV_VERSION\=2.2.5 CONFIGURE_OPTS\= RUBY_CONFIGURE_OPTS\= $HOME/.rbenv-jenkins/bin/rbenv rehash"
$ bash -c "rm -rf $HOME/.rbenv-jenkins/.lock"
[Tests] $ bundle exec rake ios
FATAL: rake execution failed
java.io.IOException: Cannot run program "bundle" (in directory "/Users/Shared/Jenkins/Home/workspace/Tests"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at hudson.Proc$LocalProc.<init>(Proc.java:240)
at hudson.Proc$LocalProc.<init>(Proc.java:212)

捆绑程序的执行程序不在应有的位置似乎存在问题。

我试过添加 export PATH="$HOME/.rbenv-jenkins/bin:$PATH" 以几种方式进入路径,但似乎没有什么不同 - 当它是 shell 步骤时,我看到它 运行,但我没有得到任何改变。

我已经使用我的 rbenv 插件预安装了 rake 和 bundler,但我没有看到它们被安装 - 我不确定为什么。

当我登录到 Jenkins 用户时,我可以通过 rspecrakebundle exec rake 进行 运行 测试。

知道什么没有做它应该做的事吗?如果有遗漏的细节,请告诉我,谢谢!

编辑:

当我添加 gem install bundlegem install rake shell 命令时,我得到以下信息:

+ gem install bundler
Successfully installed bundler-1.13.2
Parsing documentation for bundler-1.13.2
Done installing documentation for bundler after 4 seconds
1 gem installed
+ gem install rake
ERROR:  Error installing rake:
    "rake" from rake conflicts with /Users/Shared/Jenkins/.rbenv-jenkins/versions/2.2.5/bin/rake
Build step 'Execute shell' marked build as failure
Finished: FAILURE

我的预安装 gem 是 rake,bundler - 但似乎只有 rake 被正确预安装。

运行 没有安装 rake 的作业(并且在 bundler 安装后使用 rbenv rehash),我得到了同样的错误。

在这种情况下,结果是 gem 依赖项错误 - 说完一切后,nokogiri 安装错误。

我能够通过 运行 bundle exec rake ios(我的测试任务)作为 shell 命令而不是通过插件作为 rake 任务来揭示让我狩猎的错误消息.

从那里,我得到了一个关于错误版本的错误,在尝试了一些 gem 文件调整(并修改了我的 Gemfile.lock)之后,我 运行 捆绑安装作为 shell 行,并注意到 nokogiri 安装以熟悉的方式失败(由于某些 Xcode 版本杂耍,我怀疑这是相当特殊的)。

因此,如果您迷路并在类似地点寻找指导,请尝试 运行 将任务作为 shell 行,这样您会得到更详细的错误。