Jenkins使用默认ruby,但不是来自RVM

Jenkins使用默认ruby,但不是来自RVM,jenkins,path,rvm,environment,Jenkins,Path,Rvm,Environment,我有一个Jenkins自动化服务器,它通过ssh和用户snaggs连接到我的机器 我的机器有两个版本的ruby: 默认版本来自OS/System/Library/Frameworks//usr/bin/ruby rubyv2.3.3已安装 在机器上,自动化通过一些命令运行一些Perl脚本whoami给出了snaggs 当Perl脚本运行命令gem env时,输出为: $ gem env RubyGems Environment: - RUBYGEMS VERSION: 2.0.14.

我有一个Jenkins自动化服务器,它通过
ssh
和用户
snaggs
连接到我的机器

我的机器有两个版本的
ruby

  • 默认版本来自OS
    /System/Library/Frameworks//usr/bin/ruby

  • ruby
    v2.3.3已安装

    在机器上,自动化通过一些命令运行一些Perl脚本<来自jenkins的code>whoami给出了
    snaggs

当Perl脚本运行命令
gem env
时,输出为:

$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14.1
  - RUBY VERSION: 2.0.0 (2015-12-16 patchlevel 648) [universal.x86_64-darwin16]
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-16
  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/snaggs/.gem/ruby/2.0.0
     - /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org"]
  - REMOTE SOURCES:
     - http://rubygems.org

但是,当我使用
ssh
进入同一台机器时,同一个用户
snaggs
我安装了
ruby
版本
rvm

当我运行
$gem env
时,我得到输出:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.6.8
  - RUBY VERSION: 2.3.3 (2016-11-21 patchlevel 222) [x86_64-darwin16]
  - INSTALLATION DIRECTORY: /Users/snaggs/.rvm/gems/ruby-2.3.3
  - USER INSTALLATION DIRECTORY: /Users/snaggs/.gem/ruby/2.3.0
  - RUBY EXECUTABLE: /Users/snaggs/.rvm/rubies/ruby-2.3.3/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/snaggs/.rvm/gems/ruby-2.3.3/bin
  - SPEC CACHE DIRECTORY: /Users/snaggs/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/snaggs/.rvm/rubies/ruby-2.3.3/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-16
  - GEM PATHS:
     - /Users/snaggs/.rvm/gems/ruby-2.3.3
     - /Users/snaggs/.rvm/gems/ruby-2.3.3@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org"]
  - REMOTE SOURCES:
     - http://rubygems.org
  - SHELL PATH:
     - /Users/snaggs/.rvm/gems/ruby-2.3.3/bin
     - /Users/snaggs/.rvm/gems/ruby-2.3.3@global/bin
     - /Users/snaggs/.rvm/rubies/ruby-2.3.3/bin
     - /usr/local/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /Users/snaggs/.rvm/bin
如何告诉Jenkins使用位于
/Users/snaggs/.rvm/gems/ruby-2.3.3
下的其他版本

[编辑]


我不以超级用户的身份运行脚本

我在尝试配置Java版本时遇到了类似的问题

看看:

当SSH从属插件连接到从属插件时,它不会运行 交互式shell。相反,它的作用相当于运行“ssh” slavehost命令…”

因此,假设当您从ssh运行
gem env
时,您应该得到与Jenkins相同的结果:
sshsnaggs@1.1.1.1“gem env”

在机器上,自动化通过一些命令运行一些Perl脚本

您可以尝试创建一些自定义的
。bash\u profile\u custom
与原始的
。bash\u profile
您需要调用
。bash\u profile\u custom
,因为Jenkins默认情况下使用自己的
。bash\u profile
运行perl脚本,如下所示:

ssh snaggs@1.1.1.1 "source ~/.bash_profile_CUSTOM && perl some_perl_script.pl"
只要记住,每次Jenkins连接到构建机器时,都需要绑定
bash\u profile\u CUSTOM
文件。因此,Jenkins的命令可执行文件应该是:

source ~/.bash_profile_CUSTOM && perl some_perl_script.pl
让我知道它是否工作或给你不同的输出


编辑:(25/12/2016)

如果您不想为Jenkins安装插件(比如前缀Start Slave命令),可以使用bash脚本包装Perl脚本,如:

#!/bin/bash

source ~/. bash_profile_CUSTOM;

perl some_perl_script.pl;

因此,Perl脚本将从您用
.bash\u profile\u CUSTOM
定义的概要文件开始

看起来路径未按预期设置。使用?看起来您的解决方案(使用bash脚本)很有意义,我创建了
.bash\u profile\u CUSTOM
,它可以从ssh工作。耶:)。我还需要为
perl
编写完整路径。我现在正在处理bash,需要从Perl获取退出代码。你救了我好几天,谢谢你和詹金斯还有一些问题,但这是我的side@snaggs,好的,我没有你的环境,所以你肯定可以做作业。我发布了对我有用的概念。祝你好运