In our setup the builds dir is a symlink to a network filesystem, hence Jenkins user has write permissions but is not owner of that directory. When trying to archive artifacts following error occurs:
java.nio.file.FileSystemException: /var/lib/jenkins/jobs/GeoGebra-autotest/builds/17371/archive/desktop/build/install/desktop/lib/impl.jar: Operation not permitted
13:29:38 at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
13:29:38 at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
13:29:38 at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
13:29:38 at sun.nio.fs.UnixCopyFile.copyFile(UnixCopyFile.java:283)
13:29:38 at sun.nio.fs.UnixCopyFile.copy(UnixCopyFile.java:581)
13:29:38 at sun.nio.fs.UnixFileSystemProvider.copy(UnixFileSystemProvider.java:253)
13:29:38 at java.nio.file.Files.copy(Files.java:1274)
13:29:38 at hudson.FilePath$31$1.visit(FilePath.java:2301)
13:29:38 at hudson.util.DirScanner.scanSingle(DirScanner.java:44)
13:29:38 at hudson.FilePath$ExplicitlySpecifiedDirScanner.scan(FilePath.java:2996)
13:29:38 at hudson.FilePath$31.invoke(FilePath.java:2295)
13:29:38 at hudson.FilePath$31.invoke(FilePath.java:2288)
13:29:38 at hudson.FilePath.act(FilePath.java:1047)
13:29:38 at hudson.FilePath.act(FilePath.java:1025)
This is a regression between 2.107.3 and 2.121. Problem is that FilePath.copyRecursiveTo (https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/FilePath.java ) is now using
Files.copy(fileToPath(f), fileToPath(writing(target)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);
and the COPY_ATTRIBUTES flag does triggers the "operation not permitted" error (timestamp can't be changed in directory not owned by jenkins).
Fix has been merged to master and will be in the next weekly release.
https://github.com/jenkinsci/jenkins/pull/3537