Development #31192
Jenkinsfile: utiliser un TMPDIR par build et le nettoyer
0%
Description
Pour éviter une explosion de /tmp.
Fichiers
Historique
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Fichier 0001-Jenkinsfile-allocate-a-TMPDIR-et-clean-it-at-the-end.patch 0001-Jenkinsfile-allocate-a-TMPDIR-et-clean-it-at-the-end.patch ajouté
- Patch proposed changé de Non à Oui
Suppression de BRANCH_NAME pour générer toxworkdir, génération et nettoyage d'un TMPDIR dans le Jenkinsfile à la place.
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Tracker changé de Support à Development
- Statut changé de Nouveau à Solution proposée
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
Pyproj semble chatouilleux sur l'emplacement de ses fichiers dans un venv... lapin compris pour l'instant.
endpoint GET /opengis/test/feature_info?lat=45.796890&lon=4.784140 ('') Error occurred while processing request Traceback (most recent call last): File "/var/lib/jenkins/workspace/nsfile-utiliser-un-TMPDIR-p-ZU6WG5V47WBNWVOWAH64JWH6KCBWLELVGMRUNVLIHMDQK7MV44PQ/passerelle/utils/jsonresponse.py", line 144, in api resp = f(*args, **kwargs) File "/var/lib/jenkins/workspace/nsfile-utiliser-un-TMPDIR-p-ZU6WG5V47WBNWVOWAH64JWH6KCBWLELVGMRUNVLIHMDQK7MV44PQ/passerelle/views.py", line 396, in perform result = self.endpoint(request, **params) File "/var/lib/jenkins/workspace/nsfile-utiliser-un-TMPDIR-p-ZU6WG5V47WBNWVOWAH64JWH6KCBWLELVGMRUNVLIHMDQK7MV44PQ/passerelle/apps/opengis/models.py", line 215, in feature_info lon_b, lat_b = pyproj.transform(wgs84, target_projection, lon_b, lat_b) File "/tmp/jenkins-passerelle-wip-wip%2F31192-Jenkinsfile-utiliser-un-TMPDIR-p-7/tox-jenkins/passerelle/django111-pg/local/lib/python2.7/site-packages/pyproj/__init__.py", line 527, in transform _proj._transform(p1,p2,inx,iny,inz,radians) File "_proj.pyx", line 450, in _proj._transform RuntimeError: failed to load datum shift file
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Emmanuel Cazenave il y a environ 5 ans
Pas chaud pour multiplier ce genre de patches dans nos jenkinsfile alors qu'un nettoyage système général devrait suffire : #31098
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
Emmanuel Cazenave a écrit :
Pas chaud pour multiplier ce genre de patches dans nos jenkinsfile alors qu'un nettoyage système général devrait suffire : #31098
Ça me parait juste beaucoup plus compliqué... trouver la branche qui n'existe plus tout ça.
Mis à jour par Emmanuel Cazenave il y a environ 5 ans
Benjamin Dauvergne a écrit :
Ça me parait juste beaucoup plus compliqué... trouver la branche qui n'existe plus tout ça.
Ya pas besoin, shooter tous les /tmp/tox-jenkins/*/wip à 4 heures du mat et terminé.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0002-Jenkinsfile-use-temporary-directory-and-database-311.patch 0002-Jenkinsfile-use-temporary-directory-and-database-311.patch ajouté
- Fichier 0001-tox.ini-use-py27-instead-of-basepython.patch 0001-tox.ini-use-py27-instead-of-basepython.patch ajouté
- Statut changé de En cours à Solution proposée
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0002-Jenkinsfile-use-temporary-directory-and-database-311.patch 0002-Jenkinsfile-use-temporary-directory-and-database-311.patch ajouté
- Fichier 0001-tox.ini-use-py27-instead-of-basepython.patch 0001-tox.ini-use-py27-instead-of-basepython.patch ajouté
J'ai importé toutes les bidouilles d'authentic (pg_virtualenv, --cov-apend et merge-junit-results.py).
Mis à jour par Frédéric Péters il y a presque 5 ans
Il n'y aurait pas moyen de faire passer une part de ces trucs dans le module eo-jenkins-lib ?
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0002-Jenkinsfile-use-temporary-directory-and-database-311.patch 0002-Jenkinsfile-use-temporary-directory-and-database-311.patch ajouté
- Fichier 0001-tox.ini-use-py27-instead-of-basepython.patch 0001-tox.ini-use-py27-instead-of-basepython.patch ajouté
Ajustement coté tests avec w.c.s.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Frédéric Péters a écrit :
Il n'y aurait pas moyen de faire passer une part de ces trucs dans le module eo-jenkins-lib ?
On peut visiblement créer un pipeline 'template' https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/ perso j'ai pas le coeur de m'y mettre groovy me fait peur.
Mis à jour par Frédéric Péters il y a presque 5 ans
Je n'imaginais rien de compliqué, genre pour commencer un truc ainsi,
def tox(currentBuild, env...) { sh "mkdir ${env.TMPDIR}" sh """ virtualenv -p python3 ${env.TMPDIR}/venv/ ${env.TMPDIR}/venv/bin/pip install tox PGPORT=`python -c 'import struct; import socket; s=socket.socket(); s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack("ii", 1, 0)); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'` pg_virtualenv -o fsync=off ${env.TMPDIR}/venv/bin/tox -rv""" }
J'ai créé #33596.
Et derrière aussi, avoir dans le dépôt jenkins-lib les scripts genre merge-junit-results.py. (créé #33597).
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
Le nettoyage des tmp dir est un problème déjà résolu par #31098.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Emmanuel Cazenave a écrit :
Le nettoyage des tmp dir est un problème déjà résolu par #31098.
Non mais ça solutionne pleins de chose d'un coup comme le pg_virtualenv, ça évite d'avoir à mettre {env:BRANCH_NAME} (ça reste spécifique à jenkins) pour que les builds parallèles des branches wip ne se marchent pas dessus aussi; franchement je trouve qu'avoir un TMPDIR par build c'est juste beaucoup plus simple à penser, je propose de l'ajouter directement dans ma commande tox en fait.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-Jenkinsfile-use-workspace-as-temporary-directory-311.patch 0001-Jenkinsfile-use-workspace-as-temporary-directory-311.patch ajouté
Voilà avec intégration des dernières modifications à jenkins-lib et remplacement du TMPDIR dans /tmp par un autre moyen, on a tout dans le workspace maintenant.
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
J'ai du mal à suivre, je crois comprendre que le tmpdir maintenant c'est le workspace, mais pourquoi le sous répertoire 'repository' ? (qui du coup t'oblige à skipDefaultCheckout puis les répétitions de dir ("repository")
, un checkout scm
...)
Benjamin Dauvergne a écrit :
Non mais ça solutionne pleins de chose d'un coup comme le pg_virtualenv
Les tmp dir et pg_virtualenv ont un rapport ou pas ? (pas trop compris comment ça marche pg_virtualenv)
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Emmanuel Cazenave a écrit :
J'ai du mal à suivre, je crois comprendre que le tmpdir maintenant c'est le workspace, mais pourquoi le sous répertoire 'repository' ? (qui du coup t'oblige à skipDefaultCheckout puis les répétitions de
dir ("repository")
, uncheckout scm
...)
Une des grosses accélération qu'on a eu depuis qu'on utilise tox/pytest a été de déplacer les venv qui été créés dans le répertoire courant (le repository) ailleurs, parce que coverage/pytest ou je ne sais qui regardait partout et le venv était plein de fichiers. Il faut absolument séparer cette partie du repository.
L'autre intérêt que je vois c'est que quand on visite le workspace pour débugger le build on voit un peu mieux d'où vient chaque morceau.
Benjamin Dauvergne a écrit :
Non mais ça solutionne pleins de chose d'un coup comme le pg_virtualenv
Les tmp dir et pg_virtualenv ont un rapport ou pas ? (pas trop compris comment ça marche pg_virtualenv)
Non pas de rapport mais tant qu'à faire je préfère que tout soit au même endroit (et j'avoue j'ai du mal à voir pourquoi tout le monde ne pense pas comme moi en fait..). Le cleanWs() assure que tout soit propre en plus (on pourrait virer celui à la fin du Jenkinsfile d'ailleurs).
Le but c'est que ça s'exécute sur jenkins comme si c'était tout seul sur nos machines, sachant qu'on a des jobs concurrents tout le temps entre branches wip/*.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de Solution proposée à Rejeté