Подтвердить что ты не робот

Настройка 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.

4b9b3361

Ответ 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 конкатенированных.