Вопрос по ruby-on-rails-3, jenkins, ruby, continuous-integration – Настройка RVM и Jenkins

18

Я новичок в Дженкинс CI. Я устанавливаю RVM в свой удаленный Jenkins и когда выполняю оболочку ниже.

#!/bin/bash -x
source ~/.bashrc
rvm use [email protected]

Я получаю следующие ошибки.

+ source /var/lib/jenkins/.bashrc
++ PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/jenkins/.rvm/bin:/var/lib/jenkins/.rvm/bin
+ rvm use [email protected]

RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal settings to allow shell login.
Please visit https://rvm.io/workflow/screen/ for example.

Что это значит? Я не имею ни малейшего представления. Пожалуйста, помогите мне.

UPDATED: Я пробовал нижеприведенный скрипт, но все равно получаю ошибки:

#!/bin/bash -x
source /home/zeck/.bashrc
[[ -s ".rvmrc" ]] && source .rvmrc
export RAILS_ENV=test
bundle install

Ошибки:

/tmp/hudson457106939700368111.sh: line 5: bundle: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE

Оболочка сборки Jenkins не может обнаружить RVM, наборы гемов и гемы. Что я должен делать?

UPDATED 2: Поэтому Дженкинс не может обнаружить рубин.

+ ruby -v
/tmp/hudson2505951775163045158.sh: line 5: ruby: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILUR

Я не использую никакой плагин jenkins, и я просто запускаю скрипт из раздела Build-> Execute shell.

Зек, я тоже схожу с ума, решая эту проблему, как ты это решил ??? Farooq

Ваш Ответ

6   ответов
11

. $(/home/RVM_USER/.rvm/bin/rvm env [email protected] --path)

убедитесь, что вы используете стабильный RVM:

rvm get stable

NOTE: Last Jenkins version does not always accept "source", but ".". RVM_USER is the user that installed RVM. Alternatively you can also export the RVM command in the main PATH.

Error: User Rate Limit Exceeded Zeck
Error: User Rate Limit ExceededzeckError: User Rate Limit Exceeded/home/zeck/.bashrcError: User Rate Limit Exceededexport PATH=$PATH:/var/lib/jenkins/.rvm/bin
0

поэтому он не использует правильный путь для поиска версии ruby для rvm. Вы можете установить путь для данного агента.

Find your current PATH by doing echo $PATH Assuming you've set up rvm properly, find where rvm's version of ruby is located by running which ruby There's a setting in the Configuration of your agent where you can set environmental variables. Set PATH to be 1 and 2 concatenated.
9

Да, видимо ты скучаешь$HOME/.rvm/bin в вашемPATH, Я успешно использую rvm из Hudson на Mac OS X. Первое, на что нужно обратить внимание, это то, что, если вы не укажетеBASH_ENV переменная окружения (ENV для ш),.bashrc вызывается автоматически только с интерактивной оболочкой без авторизации. Такая оболочка запускается, когда вы делаете, например, следующее из командной строки:

$ /bin/bash

Когда вы используете#!/bin/bash в вашем сценарии,.bashrc не будет называться.

Чтобы RVM работал с Хадсоном, у меня есть следующее в моем.bash_profile:

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
export PATH

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Благодаря[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" Я включил rvm каждый раз, когда запускаю новое окно терминала (интерактивное, оболочка входа).

Я не кладу ничего в мой.bashrcТем более я не использую там скрипты rvm. Ничего плохого в этом нет, но если какие-то другие скрипты делают что-то глупое, например, установка `export BASH_ENV = $ HOME / .bashrc & apos; а затем вызовите неинтерактивную оболочку, вы увидите, что может произойти - это на самом деле легко забыть.

Поэтому, вместо того, чтобы загружать вещи в ваш .bashrc, лучше сохранить ваш скрипт независимым от любого файла запуска оболочки и убедиться, что в скрипте установлена правильная среда. Я все еще держу$HOME/.rvm/bin в моем.bash_profile, но затем я включаю следующее в начале моего сценария:

#!/bin/bash

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

rvm use [email protected]

set -ex
cucumber # just an example

Обратите внимание на-e опция, которая заставляет скрипт завершить работу с кодом ошибки, если какая-либо команда следуетset -ex выходит из строя. Такое поведение вам может понадобиться при использовании сценария с Hudson. Неверно говорить, что RVM ожидает входа в систему. Хотя с помощью#!/bin/bash -l в вашем сценарии будет работать, это не похоже на лучший подход.

Error: User Rate Limit Exceeded[[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm"Error: User Rate Limit Exceededrvm use [email protected]_name
2

    #!/usr/bin/env bash

    rvm use 2.0.0
    bundle install
    rake test
    ...
Error: User Rate Limit Exceeded
27

RVM ожидает вход в оболочку. Изменение строки hashbang на#!/bin/bash -xl должен решить это.

Error: User Rate Limit Exceeded#!/bin/bash -lError: User Rate Limit Exceededset -xError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

я думаю, что rvm загружается из вашего источника, поэтому он должен работать, иначе нужно экспортировать переменную PATH

#!/bin/bash -l
source ~/.bashrc
rvm use [email protected]

Я для входа в систему shel, если вы включите х, то это будет также для отладки.

Похожие вопросы