RVM et Jenkins setup
Je suis nouveau à Jenkins CI. J'installe RVM dans mon Jenkins distant et quand j'exécute sous shell.
#!/bin/bash -x
source ~/.bashrc
rvm use 1.9.3@rails-3.2.3
j'obtiens les erreurs suivantes.
+ 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 1.9.3@rails-3.2.3
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.
ça veut dire Quoi? Je n'ai pas la moindre idée. S'il vous plaît aider moi.
mise à jour: j'ai essayé le script ci-dessous mais j'ai quand même des erreurs:
#!/bin/bash -x
source /home/zeck/.bashrc
[[ -s ".rvmrc" ]] && source .rvmrc
export RAILS_ENV=test
bundle install
les Erreurs suivantes:
/tmp/hudson457106939700368111.sh: line 5: bundle: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE
Jenkins build shell ne peut pas détecter RVM, gemmes et gemmes. Que dois-je faire?
mise à jour 2: par conséquent jenkins ne peut pas détecter ruby.
+ ruby -v
/tmp/hudson2505951775163045158.sh: line 5: ruby: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILUR
Je n'utilise pas de jenkins plugn et je ne fais qu'Exécuter script depuis la section Build - > Execute shell.
6 réponses
essaie:
. $(/home/RVM_USER/.rvm/bin/rvm env 1.9.3@rails-3.2.3 --path)
assurez-vous d'exécuter le RVM stable:
rvm get stable
NOTE: La dernière version de Jenkins n'accepte pas toujours" source", mais".". RVM_USER est l'utilisateur qui a installé RVM. Vous pouvez aussi exporter la commande RVM dans le chemin principal.
comme le suggère le message d'erreur, RVM attend un shell de connexion. Changer la ligne hashbang en #!/bin/bash -xl
devrait résoudre ce problème.
Oui, apparemment, vous manquez l' $HOME/.rvm/bin
dans votre PATH
. J'utilise RVM avec succès à partir de Hudson sur Mac OS X. La première chose à noter est que, sauf si vous définissez BASH_ENV
variable d'environnement (ENV
pour sh), .bashrc
est appelé automatiquement seulement avec l'interpréteur de commandes interactif non-login. Un tel shell est démarré quand vous faites-par exemple-ce qui suit depuis la ligne de commande:
$ /bin/bash
quand vous utilisez #!/bin/bash
dans votre script, .bashrc
ne sera pas appelé.
à faites fonctionner RVM avec Hudson, j'ai les suivants dans mon .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"
Grâce à [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
j'ai activé rvm chaque fois que je démarre une nouvelle fenêtre de terminal (interactive, login shell).
je n'ai rien mis dans mon .bashrc
, surtout que je ne cherche pas de scripts rvm là-bas. Rien de mal à cela, mais si d'Autres scripts rendent quelque chose stupide comme définir `exporter BASH_ENV=$HOME/.bashrc ' puis invoquer shell non-interactif, vous voyez ce qui peut arriver - il est facile à oublier.
Donc, au lieu de charger choses .bashrc, il est préférable de garder votre script indépendant de tout fichier de démarrage shell et de s'assurer que l'environnement correct est configuré dans le script. Je suis toujours $HOME/.rvm/bin
dans mon .bash_profile
, mais puis-je inclure ce qui suit au début de mon script:
#!/bin/bash
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm use 1.9.3-head@MyGemSet
set -ex
cucumber # just an example
Notez le -e
option qui force le script à sortir avec un code d'erreur si une commande suit set -ex
échoue. Ce est un comportement que vous pouvez vouloir en utilisant le script avec Hudson.
Il est incorrect de dire que RVM attend un shell de connexion. Bien que l'utilisation de #!/bin/bash -l
dans ton script fonctionne, il ne semble pas être la meilleure approche.
il suffit d'ajouter ce code dans votre script shell, je pense que rvm se charge à partir de votre source donc il devrait fonctionner autrement besoin d'exporter la variable PATH
#!/bin/bash -l
source ~/.bashrc
rvm use 1.9.3@rails-3.2.3
l est pour login shel, si vous incluez x alors ce serait pour le débogage aussi.
ajout d'un shebang aux commandes de compilation dans jenkins corrigé cela pour moi
#!/usr/bin/env bash
rvm use 2.0.0
bundle install
rake test
...
les noeuds Jenkins ne chargent pas les chemins de la même façon, donc ils n'utilisent pas le bon chemin pour trouver la version de ruby de rvm. Vous pouvez définir le chemin pour un agent donné.
- Trouvez votre chemin actuel en faisant
echo $PATH
- en supposant que vous avez mis en place rvm correctement, trouvez où la version de ruby de RVM est localisée en exécutant
which ruby
- il y a un paramètre dans la Configuration de votre agent où vous pouvez définir des variables environnementales. Définir le CHEMIN d'accès à 1 et 2 concaténées.