Projet

Général

Profil

Development #31192

Jenkinsfile: utiliser un TMPDIR par build et le nettoyer

Ajouté par Benjamin Dauvergne il y a environ 5 ans. Mis à jour il y a plus d'un an.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
07 mars 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour éviter une explosion de /tmp.


Fichiers

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

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

#2

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Tracker changé de Support à Development
  • Statut changé de Nouveau à Solution proposée
#3

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
#4

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Statut changé de Solution proposée à En cours
#5

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

#7

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.

#8

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

#11

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 ?

#13

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.

#14

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

#15

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.

#16

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.

#17

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

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

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)

#19

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

#20

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution proposée à Rejeté

Formats disponibles : Atom PDF