web-dev-qa-db-fra.com

Configuration RVM et Jenkins

Je suis nouveau à Jenkins CI. J'installe RVM dans ma télécommande Jenkins et lorsque j'exécute sous Shell. 

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

Je reçois des 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 [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.

Qu'est-ce que ça veut dire? Je n'ai aucune idée. Aidez-moi, s'il vous plaît.

UPDATED: J'ai essayé le script ci-dessous mais des erreurs se sont toujours produites:

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

Les erreurs:

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

Jenkins construit Shell ne peut pas détecter RVM, gemsets et gems. Que devrais-je faire?

UPDATED 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 aucun plugin Jenkins et je viens d'exécuter le script à partir de la section Build-> Execute Shell.

18
Zeck

essayer:

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

assurez-vous que vous utilisez 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 également exporter la commande RVM dans le PATH principal.

11
mpapis

Comme le message d'erreur le suggère, RVM attend un shell de connexion. Changer la ligne de hachage en #!/bin/bash -xl devrait résoudre le problème.

27
disrupt

Oui, apparemment, vous manquez le $HOME/.rvm/bin dans votre PATH. J'utilise rvm avec succès depuis Hudson sous Mac OS X. La première chose à noter est que, sauf si vous définissez la variable d'environnement BASH_ENV (ENV pour sh), .bashrc est appelé automatiquement uniquement avec un shell interactif sans connexion. Un tel shell est démarré lorsque vous effectuez, par exemple, les opérations suivantes à partir de la ligne de commande:

$ /bin/bash

Lorsque vous utilisez #!/bin/bash dans votre script, .bashrc ne sera pas appelé.

Pour que rvm fonctionne avec Hudson, j'ai le code suivant 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", rvm est activé chaque fois que je démarre une nouvelle fenêtre de terminal (interactive, login Shell).

Je ne mets rien dans mon .bashrc, en particulier, je n'y achète pas de scripts rvm. Rien de mal à cela, mais si un autre script rend quelque chose de stupide, comme définir "exporter BASH_ENV = $ HOME/.bashrc", puis appeler Shell non interactif, vous voyez ce qui peut arriver - il est en fait facile à oublier.

Par conséquent, au lieu de charger des éléments dans votre fichier .bashrc, il est préférable de conserver votre script indépendamment de tout fichier de démarrage du shell et de vous assurer que le bon environnement est configuré dans le script. Je garde toujours $HOME/.rvm/bin dans mon .bash_profile, mais j'inclus ensuite le texte suivant 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

Remarquez l'option -e qui force le script à quitter avec un code d'erreur si une commande suivant set -ex échoue. C'est un comportement que vous voudrez peut-être lorsque vous utiliserez 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 votre script fonctionne, cela ne semble pas être la meilleure approche.

9

Il suffit d’ajouter ce code dans votre script Shell, je pense que rvm se charge depuis votre source et devrait donc fonctionner sinon il faut exporter la variable PATH

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

l est pour la connexion shel, si vous incluez x, ce sera aussi pour le débogage.

3
Mahattam

l'ajout d'un Shebang aux commandes de construction dans Jenkins a corrigé cela pour moi

    #!/usr/bin/env bash

    rvm use 2.0.0
    bundle install
    rake test
    ...
2
Gregory Ostermayr

Les nœuds Jenkins ne chargent pas les chemins de la même manière, aussi n'utilisent-ils pas le bon chemin pour trouver la version de rvm de Ruby. Vous pouvez définir le chemin d'accès pour un agent donné.

  1. Trouvez votre PATH actuel en faisant echo $PATH
  2. En supposant que vous avez correctement configuré rvm, recherchez l'emplacement de la version de Ruby de rvm en exécutant which Ruby
  3. Il existe un paramètre dans la configuration de votre agent où vous pouvez définir des variables d'environnement. Définissez PATH sur 1 et 2 concaténés.
0
Ethan