• Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: Minor Minor
    • core
    • None
    • OS: Centos 7 64-bit
      JRE: OpenJDK 1.8
      Container: Tomcat
      Jenkins version: 1.651.3 (and 2.53 according to code)
      Browser: Chrome

      Steps to reproduce:

      1. Copy Jenkins home directory to a filesystem that does not support symlinks (AWS Storage Gateway in my case)
      2. Add -Dhudson.Util.noSymLink=true to java options in tomcat configuration
      3. Start Jenkins
      4. Perform a build or a promotion with the Promotions plugin

      Observe:

       ln builds/lastSuccessfulBuild /var/lib/jenkins/jobs/McRel Identity App/promotions/dev/lastSuccessful failed
       java.nio.file.FileSystemException: /var/lib/jenkins/jobs/McRel Identity App/promotions/dev/lastSuccessful: Unknown error 524
       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.UnixFileSystemProvider.createSymbolicLink(UnixFileSystemProvider.java:457)
       at java.nio.file.Files.createSymbolicLink(Files.java:1043)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:498)
       at hudson.Util.createSymlinkJava7(Util.java:1237)
       at hudson.Util.createSymlink(Util.java:1153)
       at hudson.model.Run.createSymlink(Run.java:1840)
       at hudson.model.Run.updateSymlinks(Run.java:1821)
       at hudson.model.Run.execute(Run.java:1736)
       at hudson.model.Run.run(Run.java:1676)
       at hudson.plugins.promoted_builds.Promotion.run(Promotion.java:286)
       at hudson.model.ResourceController.execute(ResourceController.java:98)
       at hudson.model.Executor.run(Executor.java:410)
      

      The problem appears to be introduced in commit ed748d4b810ac1dd85e5da7857bc203f5773f329

      Jenkins tries to create the symlink using the Java 7+ approach. If it fails, it then checks hudson.Util.noSymLink before trying other methods to create the symlink.

      Recommended fix would be to test for NO_SYMLINK at the very beginning of createSymlink.

          [JENKINS-43407] hudson.Util.noSymLink option not respected

          Oleg Nenashev added a comment -

          Oleg Nenashev added a comment - So the option is not being checked if Java is 1.7 or above: https://github.com/jenkinsci/jenkins/blob/bde09f70afaf10d5e1453c257058a56b07556e8e/core/src/main/java/hudson/Util.java#L1304-L1309 . According to https://wiki.jenkins-ci.org/display/JENKINS/Features+controlled+by+system+properties Java version should not matter, hence IMHO it is a valid bug

          Andor Herendi added a comment -

          Hello Guys!

          Is this still a thing? I've checked the codebase and they altered the behavior in this commit.

          For me, it seems the noSymLink and symlinkEscapeHatch environment variables are no longer in use or not making any difference for the code. By default, the code tries to create the links and if it isn't supported by the filesystem, then it catches the exception and logs its content into the log files.

          If my assumptions are correct and noSymLink and symlinkEscapeHatch doesn't alters the behavior elsewhere, then we should remove these two variables from this page, because these are no longer supported or used.

          I also planning to move Jenkins' home to such a filesystem (Azure Files) where the symlinks are not supported. Did you saw any side-effects while using Jenkins?

           

          Andor Herendi added a comment - Hello Guys! Is this still a thing? I've checked the codebase and they altered the behavior in this commit . For me, it seems the noSymLink and symlinkEscapeHatch environment variables are no longer in use or not making any difference for the code. By default, the code tries to create the links and if it isn't supported by the filesystem, then it catches the exception and logs its content into the log files. If my assumptions are correct and noSymLink and symlinkEscapeHatch doesn't alters the behavior elsewhere, then we should remove these two variables from this page , because these are no longer supported or used. I also planning to move Jenkins' home to such a filesystem (Azure Files) where the symlinks are not supported. Did you saw any side-effects while using Jenkins?  

          Jesse Glick added a comment -

          As of JENKINS-37862 Jenkins does not use build symlinks by default, so this should not be an issue.

          Jesse Glick added a comment - As of JENKINS-37862 Jenkins does not use build symlinks by default, so this should not be an issue.

            Unassigned Unassigned
            alex_stone_filament Alex Stone
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: