Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-47978

Lightweight checkout not working for branches that contain forward slash '/'

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Labels:
      None
    • Environment:
      Jenkins version 2.73.3
      bitbucket-branch-source-plugin version 2.2.7
    • Similar Issues:

      Description

      I am using bitbucket-branch-source-plugin version 2.2.7 (currently the latest one) and lightweight checkout for Jenkinsfile fails for branches that contain forward slash '/'. I tried with different branches like ft/*. 

      The functionality fallbacks to heavyweight checkout, so it keeps working. Here is the exception that I get:

      ERROR: Could not do lightweight checkout, falling back to heavyweight
      java.io.FileNotFoundException: URL: https://api.bitbucket.org/2.0/repositories/owner/repository/src/ft%2Fci/Jenkinsfile
      	at com.cloudbees.jenkins.plugins.bitbucket.client.BitbucketCloudApiClient.getRequestAsInputStream(BitbucketCloudApiClient.java:558)
      	at com.cloudbees.jenkins.plugins.bitbucket.client.BitbucketCloudApiClient.getFileContent(BitbucketCloudApiClient.java:719)
      	at com.cloudbees.jenkins.plugins.bitbucket.filesystem.BitbucketSCMFile.content(BitbucketSCMFile.java:81)
      	at jenkins.scm.api.SCMFile.contentAsString(SCMFile.java:338)
      	at org.jenkinsci.plugins.workflow.multibranch.SCMBinder.create(SCMBinder.java:104)
      	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:263)
      	at hudson.model.ResourceController.execute(ResourceController.java:97)
      	at hudson.model.Executor.run(Executor.java:421)

       

      The functionality works perfectly for branches like master, dev, development and release.

        Attachments

          Issue Links

            Activity

            Hide
            stephenconnolly Stephen Connolly added a comment -

            it is possible that GitHub Branch Source has a regression, but https://github.com/jenkinsci/github-branch-source-plugin/blob/master/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMFileSystemTest.java#L193 is passing (yes based on an evil replayed capture of real github), so unless https://github.com/jenkinsci/github-branch-source-plugin/blob/master/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMProbe.java#L135-L151 has a bug, we should be detecting the Jenkinsfile at the path and creating the branch, and then loading the file from the lightweight checkout (which the test "claims" is working)

             

            So it looks like GitHub is working with child paths... of course I don't trust the wiremock tests and would love to rip them out... but GitHub has that rate limit that makes testing live a nightmare!

            Show
            stephenconnolly Stephen Connolly added a comment - it is possible that GitHub Branch Source has a regression, but https://github.com/jenkinsci/github-branch-source-plugin/blob/master/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMFileSystemTest.java#L193  is passing (yes based on an evil replayed capture of real github), so unless https://github.com/jenkinsci/github-branch-source-plugin/blob/master/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMProbe.java#L135-L151  has a bug, we should be detecting the Jenkinsfile at the path and creating the branch, and then loading the file from the lightweight checkout (which the test "claims" is working)   So it looks like GitHub is working with child paths... of course I don't trust the wiremock tests and would love to rip them out... but GitHub has that rate limit that makes testing live a nightmare!
            Hide
            bjro bjorn rohlen added a comment -

            Well, unfortunately it does not, as confirmed by Vivek and myself.

            This is still an issue and breaking projects. 

            Show
            bjro bjorn rohlen added a comment - Well, unfortunately it does not, as confirmed by Vivek and myself. This is still an issue and breaking projects. 
            Hide
            atikhono Anna Tikhonova added a comment - - edited

            I can confirm that the original issue is still there. I don't know if it is in Bitbucket branch source plugin or elsewhere. I have tested 2.2.10 (which is the latest at the time of writing) with Bitbucket Server and Jenkinsfile placed in build/test.jenkinsfile in my repository. With 'master' branch it is flawless. However, when I put it to branch 'feature/test', in the console output I have:

            Lightweight checkout support not available, falling back to full checkout.
            Checking out git ssh://localhost:7999/bitbucket/~atikhonova/test.git into /var/lib/jenkins/workspace/test@script to read build/test.jenkinsfile
            
            Show
            atikhono Anna Tikhonova added a comment - - edited I can confirm that the original issue is still there. I don't know if it is in Bitbucket branch source plugin or elsewhere. I have tested 2.2.10 (which is the latest at the time of writing) with Bitbucket Server and Jenkinsfile placed in build/test.jenkinsfile in my repository. With 'master' branch it is flawless. However, when I put it to branch 'feature/test', in the console output I have: Lightweight checkout support not available, falling back to full checkout. Checking out git ssh: //localhost:7999/bitbucket/~atikhonova/test.git into / var /lib/jenkins/workspace/test@script to read build/test.jenkinsfile
            Hide
            atikhono Anna Tikhonova added a comment - - edited

            The workaround is to put 'refs/heads/feature/test' in Branch Specifier field of Git SCM. Not 'feature/test', not '*/feature/test'. You have to specify your git ref at full as this is the only supported case. See the breaking code in git-plugin (src/main/java//jenkins/plugins/git/GitSCMFileSystem.java):

            @Extension(ordinal = Short.MIN_VALUE)
            public static class BuilderImpl extends SCMFileSystem.Builder {
            
              @Override
              public boolean supports(SCM source) {
                return source instanceof GitSCM
                  && ((GitSCM) source).getUserRemoteConfigs().size() == 1
                  && ((GitSCM) source).getBranches().size() == 1
                  && ((GitSCM) source).getBranches().get(0).getName().matches(
                  "^((\\Q" + Constants.R_HEADS + "\\E.*)|([^/]+)|(\\*/[^/*]+(/[^/*]+)*))$"        // HERE !!
                );
              // we only support where the branch spec is obvious

            I think this simple implementation is good and the only issue here is the match failing silently. Probably, this method should put a warning to the Console explaining why lightweight checkout failed.

            Show
            atikhono Anna Tikhonova added a comment - - edited The workaround is to put 'refs/heads/feature/test' in Branch Specifier field of Git SCM. Not 'feature/test', not '*/feature/test'. You have to specify your git ref at full as this is the only supported case. See the breaking code in git-plugin (src/main/java//jenkins/plugins/git/GitSCMFileSystem.java): @Extension(ordinal = Short .MIN_VALUE) public static class BuilderImpl extends SCMFileSystem.Builder { @Override public boolean supports(SCM source) { return source instanceof GitSCM && ((GitSCM) source).getUserRemoteConfigs().size() == 1   && ((GitSCM) source).getBranches().size() == 1   && ((GitSCM) source).getBranches().get(0).getName().matches( "^((\\Q" + Constants.R_HEADS + "\\E.*)|([^/]+)|(\\*/[^/*]+(/[^/*]+)*))$" // HERE !! ); // we only support where the branch spec is obvious I think this simple implementation is good and the only issue here is the match failing silently. Probably, this method should put a warning to the Console explaining why lightweight checkout failed.
            Hide
            casz Joseph Petersen added a comment -

            Recently tested it with 2.2.13 at least it seems fixed.

            Show
            casz Joseph Petersen added a comment - Recently tested it with 2.2.13 at least it seems fixed.

              People

              • Assignee:
                casz Joseph Petersen
                Reporter:
                ghristov88 Georgi Hristov
              • Votes:
                6 Vote for this issue
                Watchers:
                20 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: