Настройка RVM и Jenkins
Я новичок в Jenkins 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.
Что это значит? Я понятия не имею. Пожалуйста, помогите мне.
ОБНОВЛЕНО: Я пробовал ниже script, но я все еще получаю ошибки:
#!/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 build shell не может обнаружить RVM, gemset и gems. Что мне делать?
ОБНОВЛЕНО 2: Поэтому дженкинс не может обнаружить рубин.
+ ruby -v
/tmp/hudson2505951775163045158.sh: line 5: ruby: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILUR
Я не использую плагин jenkins, и я просто запускаю script из сборки Build- > Execute shell.
Ответы
Ответ 1
попробовать:
. $(/home/RVM_USER/.rvm/bin/rvm env [email protected] --path)
убедитесь, что вы запустили стабильный RVM:
rvm get stable
Примечание:
Последняя версия Jenkins не всегда принимает "источник", но ".".
RVM_USER - это пользователь, который установил RVM.
В качестве альтернативы вы также можете экспортировать команду RVM в основной PATH.
Ответ 2
Как следует из сообщения об ошибке, RVM ожидает оболочку входа. Изменение строки hashbang на #!/bin/bash -xl
должно решить эту проблему.
Ответ 3
Да, очевидно, вы пропустили $HOME/.rvm/bin
в своем PATH
. Я использую rvm успешно из Hudson в Mac OS X. Прежде всего следует отметить, что, если вы не определяете переменную среды BASH_ENV
(ENV
для sh), .bashrc
вызывается автоматически только с интерактивной оболочкой без входа. Такая оболочка запускается, когда вы делаете - например, из командной строки:
$ /bin/bash
Когда вы используете #!/bin/bash
в своем script, .bashrc
не будет вызываться.
Чтобы заставить rvm работать с Hudson, у меня есть следующее в моем .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 ', а затем вызывая неинтерактивную оболочку, вы видите, что может случиться - на самом деле легко забыть.
Следовательно, вместо того, чтобы загружать вещи в ваш .bashrc, лучше оставить ваш script независимым от любого файла запуска оболочки и убедиться, что в script установлена правильная среда. Я все еще сохраняю $HOME/.rvm/bin
в своем .bash_profile
, но затем я включаю следующее в начале моего script:
#!/bin/bash
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm use [email protected]
set -ex
cucumber # just an example
Обратите внимание на параметр -e
, который заставляет script выйти с кодом ошибки, если сбой любой команды, следующей за set -ex
. Это поведение, которое вы можете захотеть при использовании script с Hudson.
Неверно сказать, что RVM ожидает оболочку входа. Хотя использование #!/bin/bash -l
в вашем script будет работать, это не похоже на лучший подход.
Ответ 4
Просто добавьте этот код в свою оболочку script, я думаю, что rvm загружается из вашего источника, поэтому ему нужно работать еще нужно экспортировать переменную PATH
#!/bin/bash -l
source ~/.bashrc
rvm use [email protected]
l для входа в систему, если вы включаете x, то это также будет для отладки.
Ответ 5
добавление shebang в команды сборки в jenkins исправлено для меня
#!/usr/bin/env bash
rvm use 2.0.0
bundle install
rake test
...
Ответ 6
Узлы Jenkins не загружают пути одинаково, поэтому не используют правильный путь для поиска rvm-версии ruby. Вы можете установить путь для данного агента.
- Найдите текущую PATH, выполнив
echo $PATH
- Предполагая, что вы правильно настроили rvm, найдите, где находится версия rvm ruby, запустив
which ruby
- В настройке вашего агента есть параметр, в котором вы можете установить переменные среды. Установите PATH в 1 и 2 конкатенированных.