Jenkins使用默认的ruby但不使用RVM

sna*_*ggs 2 environment path rvm jenkins

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

我的机器有2个版本ruby:

  • 默认版本来自OS /System/Library/Frameworks/ ..... /usr/bin/ruby
  • rubyRVM一起安装的v2.3.3

    在机器上,自动化使用一些命令运行一些Perl脚本.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
Run Code Online (Sandbox Code Playgroud)

但是,当我与ssh同一个用户进入同一台机器时,snaggsruby安装了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
Run Code Online (Sandbox Code Playgroud)

如何告诉Jenkins使用位于其下的其他版本/Users/snaggs/.rvm/gems/ruby-2.3.3

[编辑]

以超级用户身份运行脚本

Max*_*tin 6

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

看看Jenkins wiki:

当SSH从属插件连接到从属时,它不运行交互式shell.相反,它相当于你运行的"ssh slavehost命令......"

所以假设当你gem env从ssh 运行时,你应该得到像Jenkins一样的结果:ssh snaggs@1.1.1.1 "gem env"

在机器上,自动化使用一些命令运行一些Perl脚本.

您可以尝试创建一些.bash_profile_CUSTOM与您的原始相等的自定义.bash_profile您需要调用,.bash_profile_CUSTOM因为Jenkins 默认使用自己 .bash_profile.运行您的perl脚本,如:

ssh snaggs@1.1.1.1 "source ~/.bash_profile_CUSTOM && perl some_perl_script.pl"
Run Code Online (Sandbox Code Playgroud)

请记住,每次Jenkins连接到您的构建计算机时都需要绑定 bash_profile_CUSTOM文件.所以从Jenkins开始,命令可执行文件应该是这样的:

source ~/.bash_profile_CUSTOM && perl some_perl_script.pl
Run Code Online (Sandbox Code Playgroud)

让我知道它是否有效或给你不同的输出


编辑:(2016年12月25日)

如果您不想为Jenkins安装插件(如EnvInject Plugin for Prefix Start Slave Command),您可以使用bash脚本包装Perl脚本,例如:

#!/bin/bash

source ~/. bash_profile_CUSTOM;

perl some_perl_script.pl;
Run Code Online (Sandbox Code Playgroud)

所以Perl脚本将从您定义的配置文件开始.bash_profile_CUSTOM.