web-dev-qa-db-fra.com

Pourquoi Jenkins est-il soudainement incapable de supprimer un espace de travail

Nous avons un serveur Jenkins qui a réussi à construire notre code plus de 200 fois - jusqu'à il y a quelques jours.

Nous obtenons maintenant une erreur pour indiquer que Jenkins n'a pas pu supprimer l'espace de travail (message complet à suivre avec les éléments d'identification expurgés.)

J'ai vérifié les modifications récentes du code et je ne vois rien qui pourrait avoir contribué à ce problème, et rien sur ce serveur n'a changé depuis des semaines.

La trace de pile suggère que "la classe de contexte hudson.FilePath est manquante", mais la configuration n'a pas été modifiée par rapport à la configuration qui a fonctionné plus de 200 fois.

Quelqu'un peut-il suggérer des mesures qui pourraient être prises pour résoudre ce problème?

Started by user <REDACTED>
 > git rev-parse --is-inside-work-tree # timeout=10
Setting Origin to https://<REDACTED>@bitbucket.org/<REDACTED>/<REDACTED>.git
 > git config remote.Origin.url             
https://<REDACTED>@bitbucket.org/<REDACTED>/<REDACTED>.git # timeout=10
Fetching Origin...
Fetching upstream changes from Origin
 > git --version # timeout=10
using GIT_ASKPASS to set credentials <REDACTED>@bitbucket
 > git fetch --tags --progress Origin +refs/heads/*:refs/remotes/Origin/*
Seen branch in repository Origin/master
Seen branch in repository Origin/temp
Seen 2 remote branches
Obtained code/Jenkinsfile from <REDACTED>
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/<REDACTED>
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
Cloning the remote Git repository
Cloning with configured refspecs honoured and without tags
Cloning repository https://<REDACTED>@bitbucket.org/<REDACTED>/<REDACTED>.git
ERROR: Failed to clean the workspace
Java.io.IOException: Unable to delete '/var/lib/jenkins/workspace/<REDACTED>. Tried 3 times (of a maximum of 3) waiting 0.1 sec between attempts.
    at hudson.Util.deleteContentsRecursive(Util.Java:252)
    at     org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.Java:555)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.Java:1120)
at hudson.plugins.git.GitSCM.checkout(GitSCM.Java:1160)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.Java:113)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.Java:85)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.Java:75)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.Java:47)
at hudson.security.ACL.impersonate(ACL.Java:290)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.Java:44)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
at     Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1149)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:624)
at Java.lang.Thread.run(Thread.Java:748)
Caused by: Java.nio.file.FileSystemException: /var/lib/jenkins/workspace/<REDACTED>/code/<REDACTED>-query/target/classes/application.properties: Operation not permitted
at Sun.nio.fs.UnixException.translateToIOException(UnixException.Java:91)
at Sun.nio.fs.UnixException.rethrowAsIOException(UnixException.Java:102)
at Sun.nio.fs.UnixException.rethrowAsIOException(UnixException.Java:107)
at Sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.Java:238)
at Sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.Java:260)
at Java.nio.file.Files.setPosixFilePermissions(Files.Java:2045)
at hudson.Util.makeWritable(Util.Java:332)
at hudson.Util.tryOnceDeleteFile(Util.Java:292)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:383)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.deleteContentsRecursive(Util.Java:247)
... 14 more
ERROR: Error cloning remote repo 'Origin'
hudson.plugins.git.GitException: Failed to delete workspace
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.Java:558)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.Java:1120)
at hudson.plugins.git.GitSCM.checkout(GitSCM.Java:1160)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.Java:113)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.Java:85)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.Java:75)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.Java:47)
at hudson.security.ACL.impersonate(ACL.Java:290)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.Java:44)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1149)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:624)
at Java.lang.Thread.run(Thread.Java:748)
Caused by: Java.io.IOException: Unable to delete '/var/lib/jenkins/workspace/<REDACTED>'. Tried 3 times (of a maximum of 3) waiting 0.1 sec between attempts.
at hudson.Util.deleteContentsRecursive(Util.Java:252)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.Java:555)
... 13 more
Caused by: Java.nio.file.FileSystemException: /var/lib/jenkins/workspace/<REDACTED>/code/<REDACTED>-query/target/classes/application.properties: Operation not permitted
at Sun.nio.fs.UnixException.translateToIOException(UnixException.Java:91)
at Sun.nio.fs.UnixException.rethrowAsIOException(UnixException.Java:102)
at Sun.nio.fs.UnixException.rethrowAsIOException(UnixException.Java:107)
at Sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.Java:238)
at Sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.Java:260)
at Java.nio.file.Files.setPosixFilePermissions(Files.Java:2045)
at hudson.Util.makeWritable(Util.Java:332)
at hudson.Util.tryOnceDeleteFile(Util.Java:292)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:383)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.tryOnceDeleteRecursive(Util.Java:382)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.Java:402)
at hudson.Util.deleteContentsRecursive(Util.Java:247)
... 14 more
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] step
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
[Pipeline] }
[Pipeline] // stage
[Pipeline] End of Pipeline
ERROR: Error cloning remote repo 'Origin'
Finished: FAILURE
17
MarkA

Il y a quelque chose qui verrouille le fichier ou le répertoire dans l'espace de travail.

  • Quelqu'un s'est connecté à Jenkins et accède aux fichiers depuis l'espace de travail directement à l'aide du système de fichiers, mais pas via Jenkins.
  • Le processus de construction a laissé un programme zombie.

Quelques autres cas similaires.

Si vous avez l'accès Shell à FS utilisez quelque chose comme lsof pour trouver le processus de verrouillage.

EDIT: Après plusieurs votes, j'ai implémenté plusieurs éléments sur certains esclaves Linux et Windows. Dans mon cas, je connais les noms des zombies possibles.
J'ai ajouté un travail/build spécial qui tue les processus qui pourraient être laissés sous Linux.
Dans Windows, j'ai écrit un programme CS qui tue les processus possibles et/ou exécute le "Déverrouiller IT" avec le travail Jenkins qui libère également des ressources.

14
KSI

J'ai finalement trouvé la solution qui explique tout.

Cause: J'utilisais Docker dans Jenkins et montais le répertoire de travail Jenkins dans Docker (-v pwd:/code:rw). Pendant l'exécution, mon programme génère quelques fichiers qui vont également dans le répertoire de travail Jenkins lors de son montage. mais l'utilisateur est la racine docker et non l'utilisateur Jenkins, car l'utilisateur Jenkins ne peut pas supprimer ces fichiers et provoquer cette erreur.

Solution: vous pouvez également partager l'utilisateur Jenkins avec docker, donc tous les fichiers créés sont les mêmes que ceux créés par Jenkins lui-même.

docker run --user "$(id -u):$(id -g)" -i --rm -v /etc/passwd:/etc/passwd:ro  -v `pwd`:/code:rw docker_image:tag

Donc, l'ajout de ceci résout essentiellement le problème en utilisant l'utilisateur Jenkins dans Docker.

--user "$(id -u):$(id -g)" -v /etc/passwd:/etc/passwd:ro
4
Sudhanshu Patel

En tant que solution temporaire, essayez de renommer votre projet.

2
Vince Twano

Je reçois un problème similaire. La cause du problème est que je monte l'espace de travail Jenkins sur Docker et exécute le code python, il crée des exécutables Pycache avec des autorisations différentes et Jenkins n'est pas en mesure de supprimer cela.

Le correctif temporaire consiste à supprimer la commande git clone, puis à utiliser Sudo rm -rf code_directory puis compilez. Il supprimera tout le code. Puis restaurez git clone et toutes vos autres commandes

1
Sudhanshu Patel