Comment créer un Python virtualenv dans Jenkins?
Je suis à l'aide d'un Makefile afin d'assurer l'uniformité de simples commandes pour la création d'un virtualenv, l'exécution de tests, etc. J'ai configuré mon Jenkins instance de tirer à partir d'un mercurial repo et puis "faire virtualenv", qui fait ceci:
virtualenv --python=/usr/bin/python2.7 --no-site-packages . && . ./bin/activate && pip install -r requirements.txt
Mais pour une raison quelconque, il insiste sur l'utilisation du système installé pip et d'essayer d'installer mon paquet de dépendances dans le système de site-packages plutôt que de le virtualenv:
error: could not create '/usr/local/lib/python2.7/dist-packages/flask': Permission denied
Si j'ajoute un peu de débogage commandes et explicitement point de la pip dans mon virtualenv, les choses deviennent encore plus de confusion:
virtualenv --python=/usr/bin/python2.7 --no-site-packages . && . ./bin/activate && ls -l bin && which pip && pwd && ./bin/pip install -r requirements.txt
Qui génère la sortie suivante:
New python executable in ./bin/python2.7
Not overwriting existing python script ./bin/python (you must use ./bin/python2.7)
Installing setuptools, pip...done.
Running virtualenv with interpreter /usr/bin/python2.7
Il semble Jenkins ne pas reconstruire l'environnement à partir de zéro pour chaque build, ce qui me semble une drôle de choix, mais ne devrait pas l'effet de mon problème immédiat
De la sortie de ls-l bin" montre pip pour être installé dans le virtualenv et exécutable:
-rw-r--r-- 1 jenkins jenkins 2248 Apr 9 21:14 activate
-rw-r--r-- 1 jenkins jenkins 1304 Apr 9 21:14 activate.csh
-rw-r--r-- 1 jenkins jenkins 2517 Apr 9 21:14 activate.fish
-rw-r--r-- 1 jenkins jenkins 1129 Apr 9 21:14 activate_this.py
-rwxr-xr-x 1 jenkins jenkins 278 Apr 9 21:14 easy_install
-rwxr-xr-x 1 jenkins jenkins 278 Apr 9 21:14 easy_install-2.7
-rwxr-xr-x 1 jenkins jenkins 250 Apr 9 21:14 pip
-rwxr-xr-x 1 jenkins jenkins 250 Apr 9 21:14 pip2
-rwxr-xr-x 1 jenkins jenkins 250 Apr 9 21:14 pip2.7
lrwxrwxrwx 1 jenkins jenkins 9 Apr 10 19:31 python -> python2.7
lrwxrwxrwx 1 jenkins jenkins 9 Apr 10 19:31 python2 -> python2.7
-rwxr-xr-x 1 jenkins jenkins 3349512 Apr 10 19:31 python2.7
La sortie de "qui pip" semble vouloir utiliser le bon:
/var/lib/jenkins/jobs/Run Tests/workspace/bin/pip
Mon répertoire de travail actuel est ce que j'attends:
/var/lib/jenkins/jobs/Run Tests/workspace
Mais... wtf?
/bin/sh: 1: ./bin/pip: Permission denied
make: *** [virtualenv] Error 126
Build step 'Execute shell' marked build as failure
Finished: FAILURE
OriginalL'auteur Kenneth D. | 2015-04-10
Vous devez vous connecter pour publier un commentaire.
J'ai à l'aide de python virtualenvs avec Jenkins chaque jour dans les deux dernières années, à de multiples entreprises et pour les petits projets ne peut pas dire que j'ai trouvé "LA" réponse. Encore, j'espère que le partage de mon expérience serait d'aider les autres à économiser du temps. J'espère que je vais obtenir de plus amples commentaires afin de faciliter la décision.
Si vous utilisez plusieurs constructeurs qui n'ont besoin de la même virtualenv, le plus simple est de faire un dump de votre environnement pour un fichier source et au début de la nouvelle builder.
Faciliter la maintenance j'ai l'intention d'enquêter sur ces:
Si vous frappez l'arborescence en ligne de commande limites de la meilleure chose à faire est de changer votre jenkins répertoire de base à juste
/j
.OriginalL'auteur sorin
Jenkins pipelines peuvent être faites pour fonctionner avec des environnements virtuels, mais il y a plusieurs choses à prendre en considération.
/bin/sh
- ce qui est configurable dans Gérer Jenkins -> Configurer le Système -> Coque -> Shell exécutable. Mettre ce paramètre à/bin/bash
ferasource
travail.Si vous utilisez la version contrôlée multibranch pipelines jenkins crée un espace de travail avec la direction générale nom et une validation de hachage dans le chemin - qui peut être assez long. venv des scripts (par exemple pip) commencent toutes par un hashbang ligne qui inclut le chemin d'accès complet à l'interpréteur python dans la venv (l'interpréteur python lui-même est un lien symbolique). E. g.,
Bash ne lit que la première
N
caractères de n'importe quel fichier exécutable que j'ai trouvé n'a pas tout à fait d'inclure le venv chemin:Ce problème peut être évité en exécutant le script avec Python. E. g.
python3.5 ./pip
OriginalL'auteur Hardbyte
Vous pourriez trouver ce plugin Jenkins utile: https://wiki.jenkins-ci.org/display/JENKINS/ShiningPanda+Plugin
Vrai, vrai ... Mais il ne doit pas nécessairement répondre à la question si (tss vous ne l'avez pas sur vous :p), donc je devrais probablement avoir commenté au lieu de répondre. Si le lien ne devient invalide, le plugin ne sera probablement pas disponible ... Si vous allez tout le chemin, il doit DONC en mesure de fournir le code source :p . C'est juste une blague et je ne veux pas lancer une polémique! J'ai donc ajouté quelques infos.
OriginalL'auteur Jeroen Dierckx
J'ai le même problème. Comme je peux le voir - vous projet nommé 'Exécution des Tests. Donc, ce nom contient un espace. C'était le problème pour moi. J'ai juste renommé projet, comme RunTests - et venv de travail maintenant! Attention - jenkins vous poser des questions sur la confirmation de renommer projet.
OriginalL'auteur Talkerbox
Je vous recommande d'éviter ShiningPanda.
- Je configurer ma environnements virtuels avec Anaconda/Miniconda. Lors de l'installation de conda assurez-vous que vous êtes en cours d'exécution comme jenkins utilisateur.
Depuis Jenkins s'exécute
sh
plutôt quebash
j'ai ajouté conda chemin à/etc/profile
:Puis dans Jenkinsfile vous pouvez créer et supprimer conda environnements. Voici un exemple qui crée un nouvel environnement pour chaque version:
OriginalL'auteur Tautvydas