Project

General

Profile

Development #31192

Jenkinsfile: utiliser un TMPDIR par build et le nettoyer

Added by Benjamin Dauvergne 9 months ago. Updated 6 months ago.

Status:
Solution proposée
Priority:
Normal
Target version:
-
Start date:
07 Mar 2019
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Pour éviter une explosion de /tmp.

0001-Jenkinsfile-allocate-a-TMPDIR-et-clean-it-at-the-end.patch View (1.28 KB) Benjamin Dauvergne, 07 Mar 2019 10:45 AM

0002-Jenkinsfile-use-temporary-directory-and-database-311.patch View (2.59 KB) Benjamin Dauvergne, 13 May 2019 08:09 PM

0001-tox.ini-use-py27-instead-of-basepython.patch View (736 Bytes) Benjamin Dauvergne, 13 May 2019 08:09 PM

0002-Jenkinsfile-use-temporary-directory-and-database-311.patch View (5.95 KB) Benjamin Dauvergne, 31 May 2019 12:24 PM

0001-tox.ini-use-py27-instead-of-basepython.patch View (736 Bytes) Benjamin Dauvergne, 31 May 2019 12:24 PM

0002-Jenkinsfile-use-temporary-directory-and-database-311.patch View (8.71 KB) Benjamin Dauvergne, 31 May 2019 01:20 PM

0001-tox.ini-use-py27-instead-of-basepython.patch View (736 Bytes) Benjamin Dauvergne, 31 May 2019 01:20 PM

0001-Jenkinsfile-use-workspace-as-temporary-directory-311.patch View (7.96 KB) Benjamin Dauvergne, 04 Jun 2019 12:46 PM

History

#1 Updated by Benjamin Dauvergne 9 months ago

Suppression de BRANCH_NAME pour générer toxworkdir, génération et nettoyage d'un TMPDIR dans le Jenkinsfile à la place.

#2 Updated by Benjamin Dauvergne 9 months ago

  • Tracker changed from Support to Development
  • Status changed from Nouveau to Solution proposée

#3 Updated by Benjamin Dauvergne 9 months ago

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

#4 Updated by Benjamin Dauvergne 8 months ago

  • Status changed from Solution proposée to En cours

#5 Updated by Emmanuel Cazenave 8 months ago

Pas chaud pour multiplier ce genre de patches dans nos jenkinsfile alors qu'un nettoyage système général devrait suffire : #31098

#7 Updated by Benjamin Dauvergne 8 months ago

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.

#8 Updated by Emmanuel Cazenave 8 months ago

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é.

#10 Updated by Benjamin Dauvergne 6 months ago

J'ai importé toutes les bidouilles d'authentic (pg_virtualenv, --cov-apend et merge-junit-results.py).

#11 Updated by Frédéric Péters 6 months ago

Il n'y aurait pas moyen de faire passer une part de ces trucs dans le module eo-jenkins-lib ?

#13 Updated by Benjamin Dauvergne 6 months ago

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.

#14 Updated by Frédéric Péters 6 months ago

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).

#15 Updated by Emmanuel Cazenave 6 months ago

Le nettoyage des tmp dir est un problème déjà résolu par #31098.

#16 Updated by Benjamin Dauvergne 6 months ago

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.

#17 Updated by Benjamin Dauvergne 6 months ago

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.

#18 Updated by Emmanuel Cazenave 6 months ago

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)

#19 Updated by Benjamin Dauvergne 6 months ago

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"), un checkout 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/*.

Also available in: Atom PDF