Jenkins Slave 不使用与本地终端相同的 Ruby 版本

Mar*_*dds 5 ruby macos rubygems jenkins

我正在使用 OSX Jenkins 从机来运行 Xcode 的一些构建命令。当我在本地终端中运行 gem 环境时,这就是我得到的。

RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.8
  - RUBY VERSION: 2.2.0 (2014-12-25 patchlevel 0) [x86_64-darwin15]
  - INSTALLATION DIRECTORY: /Users/nvitas/.rvm/gems/ruby-2.2.0
  - RUBY EXECUTABLE: /Users/nvitas/.rvm/rubies/ruby-2.2.0/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/nvitas/.rvm/gems/ruby-2.2.0/bin
  - SPEC CACHE DIRECTORY: /Users/nvitas/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/nvitas/.rvm/rubies/ruby-2.2.0/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-15
  - GEM PATHS:
     - /Users/nvitas/.rvm/gems/ruby-2.2.0
     - /Users/nvitas/.rvm/gems/ruby-2.2.0@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /Users/nvitas/.rvm/gems/ruby-2.2.0/bin
     - /Users/nvitas/.rvm/gems/ruby-2.2.0@global/bin
     - /Users/nvitas/.rvm/rubies/ruby-2.2.0/bin
     - /Users/nvitas/.rvm/bin
     - /usr/local/opt/ruby/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
Run Code Online (Sandbox Code Playgroud)

这就是我所期望的。现在,当我通过 Jenkins 运行完全相同的命令时,我得到了这个

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - RUBY VERSION: 2.0.0 (2015-04-13 patchlevel 645) [universal.x86_64-darwin15]
  - INSTALLATION DIRECTORY: /Users/nvitas/.rvm/gems/ruby-1.9.2-p320
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/nvitas/.rvm/gems/ruby-1.9.2-p320/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-15
  - GEM PATHS:
     - /Users/nvitas/.rvm/gems/ruby-1.9.2-p320
     - /Users/nvitas/.rvm/gems/ruby-1.9.2-p320@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
Run Code Online (Sandbox Code Playgroud)

我在同一个目录、同一个用户中运行所有内容,没有什么不同,那么为什么 ruby​​ 版本和目录错误呢?我的 Jenkins Slave 中唯一的配置设置是PATH具有值的变量

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/nvitas/.rvm/gems/ruby-2.2.0/bin:/Users/nvitas/.rvm/bin:/Users/nvitas/.rvm/gems/ruby-2.2.0
Run Code Online (Sandbox Code Playgroud)

除此之外,一切都是安装好的。

Jul*_*urt 1

当 jenkins 执行您的脚本时,它不会访问您本地的 ~/.bash_profile 或 ~/.zhrc ,它们将设置或引用您的 ruby​​ 包管理器设置。

将 ~/.bash_profile 或 ~/.zhrc 中的任何内容添加到 Jenkins 项目配置中的构建脚本中。

就我而言,我使用的是 chruby,这是我经验中最简单的一种 - 所以我将其添加到 jenkins 脚本中的 #!/bin/zsh -l 下面。你的第一行可能是#!/bin/bash...

source /usr/local/opt/chruby/share/chruby/auto.sh

source /usr/local/share/chruby/chruby.sh
source /usr/local/share/chruby/auto.sh
chruby ruby-2.7.2
Run Code Online (Sandbox Code Playgroud)

如果您使用 rbenv,您可能会包含以下内容:

~/.rbenv/bin/rbenv init
Run Code Online (Sandbox Code Playgroud)