Jenkins从站不使用与本地终端上相同的Ruby版本 [英] Jenkins Slave Doesn't Use Same Ruby Version As On Local Terminal

查看:73
本文介绍了Jenkins从站不使用与本地终端上相同的Ruby版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using a OSX Jenkins slave to run some build commands for Xcode. When I run gem environment in my local terminal, this is what I get.

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

这是我的期望.现在,当我通过詹金斯运行完全相同的命令时,我得到了

This is what I expect. Now when I run the exact same command through Jenkins, I get this

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/

我在同一目录,同一用户中运行所有内容,没有什么不同,那么为什么ruby版本和目录出错?我的詹金斯奴隶中唯一的配置设置是 PATH 变量,其值为

I'm running everything in the same directory, the same user, nothing is different, so why is the ruby version and directories wrong? The only config setting in my Jenkins Slave is the PATH variable which has the value

/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

除此之外,所有东西都是已安装的.

Other than that everything is what comes installed.

推荐答案

jenkins执行脚本时,它不会访问将设置或引用您的ruby软件包管理器设置的本地〜/.bash_profile或〜/.zhrc.

When jenkins executes your script it doesn't access your local ~/.bash_profile or ~/.zhrc which will setup or reference your ruby package manager setup.

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

Add whatever is in either your ~/.bash_profile or ~/.zhrc to the build script in Jenkins project config.

就我而言,我正在使用chruby,这是我经验中最简单的chruby-因此我在jenkins脚本中的#!/bin/zsh -l下面添加了它.您的第一行可能会说#!/bin/bash ...

In my case I'm using chruby, the simplest one in my experience - so I add this below #!/bin/zsh -l in jenkins script. Your first line might say #!/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

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

If you're using rbenv you would likely be including this instead:

~/.rbenv/bin/rbenv init

这篇关于Jenkins从站不使用与本地终端上相同的Ruby版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆