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

Git plugin lightweight checkout copies full repository

    • 3.0.0

      Using multibranch pipeline clones the entire repository on the master instead of just getting the Jenkinsfile with the lighweight method. The lightweight checkout is the default behaviour as far as I know, but it's not working in my case. The clone is repeated when the pipeline starts on a slave machine, of course. Here is my setup:

      Branch Sources / Bitbucket server (connection is fine)

      Behaviours:

      Discover branches

      Advanced clone behaviours:

      • Fetch tags: unchecked
      • Honor refspec on initial clone: checked
      • Shallow clone: checked
      • Shallow clone depth: 1
      • Path to reference repo to use during clone: empty
      • Timeout: empty

      Build strategies: Skip initial build on first branch indexing

      Build configuration:

      • Mode: by Jenkinsfile
      • Script path: build/jenkins/compile/Jenkinsfile

      Please find the checkout log in the attachment.

          [JENKINS-62349] Git plugin lightweight checkout copies full repository

          Gergely Pilisi created issue -
          Mark Waite made changes -
          Summary Original: Multibranch pipeline lightweight checkout not working New: Git plugin lightweight checkout copies full repository

          Mark Waite added a comment - - edited

          Command line git does not provide a way to request a single file from a remote repository. The mode of operation is to fetch the remote repository locally and then checkout the needed file locally.

          Lightweight checkout is most useful with higher level git providers like GitHub,, Bitbucket, GitLab, and Gitea. Those higher level providers use a different access technique to request the Jenkinsfile. The git plugin could use the GitRepositoryBrowser information which is optionally provided by the user to attempt to request a single file from a specific branch or revision. That would require writing the code to formulate the request for a single file to each of the repository browser providers and would require that the user must provide that repository browser URL in the job definition. That has not been done.

          This is a good enhancement request, though it is not high priority on my list of enhancements.

          Since you're using Bitbucket, I believe you could get the benefits of the Bitbucket API by using a multibranch pipeline for that repository, then define it to monitor only a single branch.

          Mark Waite added a comment - - edited Command line git does not provide a way to request a single file from a remote repository. The mode of operation is to fetch the remote repository locally and then checkout the needed file locally. Lightweight checkout is most useful with higher level git providers like GitHub,, Bitbucket, GitLab, and Gitea. Those higher level providers use a different access technique to request the Jenkinsfile. The git plugin could use the GitRepositoryBrowser information which is optionally provided by the user to attempt to request a single file from a specific branch or revision. That would require writing the code to formulate the request for a single file to each of the repository browser providers and would require that the user must provide that repository browser URL in the job definition. That has not been done. This is a good enhancement request, though it is not high priority on my list of enhancements. Since you're using Bitbucket, I believe you could get the benefits of the Bitbucket API by using a multibranch pipeline for that repository, then define it to monitor only a single branch.
          Mark Waite made changes -
          Assignee Original: Mark Waite [ markewaite ]
          Mark Waite made changes -
          Description Original: Using multibranch pipeline clones the entire repository on the master instead of just getting the Jenkinsfile with the lighweight method. The lightweight checkout is the default behaviour as far as I know, but it's not working in my case. The clone is repeated when the pipeline starts on a slave machine, of course. Here is my setup:

          Branch Sources / Bitbucket server (connection is fine)

          Behaviours:

          Discover branches

          Advanced clone behaviours:

          -Fetch tags: unchecked

          -Honor refspec on initial clone: checked

          -Shallow clone: checked

          -Shallow clone depth: 1

          -Path to reference repo to use during clone: empty

          -Timeout: empty

          Build strategies: Skip initial build on first branch indexing

          Build configuration:

          -Mode: by Jenkinsfile

          -Script path: build/jenkins/compile/Jenkinsfile

          Please find the checkout log in the attachment.

           
          New: Using multibranch pipeline clones the entire repository on the master instead of just getting the Jenkinsfile with the lighweight method. The lightweight checkout is the default behaviour as far as I know, but it's not working in my case. The clone is repeated when the pipeline starts on a slave machine, of course. Here is my setup:

          Branch Sources / Bitbucket server (connection is fine)

          Behaviours:

          Discover branches

          Advanced clone behaviours:

          - Fetch tags: unchecked
          - Honor refspec on initial clone: checked
          - Shallow clone: checked
          - Shallow clone depth: 1
          - Path to reference repo to use during clone: empty
          - Timeout: empty

          Build strategies: Skip initial build on first branch indexing

          Build configuration:

          - Mode: by Jenkinsfile
          - Script path: build/jenkins/compile/Jenkinsfile

          Please find the checkout log in the attachment.

          Thanks for the info. However I can see a couple of tickets, like this:

          Provide lightweight checkout capability for bitbucket to avoid repository clone for multi-branch pipeline jobs

          It's in RESOLVED state. I thought that this feature is ready nowadays.

           

          Gergely Pilisi added a comment - Thanks for the info. However I can see a couple of tickets, like this: Provide lightweight checkout capability for bitbucket to avoid repository clone for multi-branch pipeline jobs It's in RESOLVED state. I thought that this feature is ready nowadays.  

          Mark Waite added a comment -

          gpilisi it is resolved and works great. It is for multibranch pipelines. The job definition you are describing seems (to me) to not be a multibranch pipeline. It is a pipeline job that is not a multibranch pipeline.

          If you're using a multibranch pipeline, then you need to use the Bitbucket provider in that multibranch pipeline rather than using the git provider. The Bitbucket provider is a higher level implementation than the git plugin. It knows it is communicating with Bitbucket and can use the Bitbucket REST API to optimize certain operations (like lightweight checkout and change detection).

          Mark Waite added a comment - gpilisi it is resolved and works great. It is for multibranch pipelines . The job definition you are describing seems (to me) to not be a multibranch pipeline. It is a pipeline job that is not a multibranch pipeline. If you're using a multibranch pipeline, then you need to use the Bitbucket provider in that multibranch pipeline rather than using the git provider. The Bitbucket provider is a higher level implementation than the git plugin. It knows it is communicating with Bitbucket and can use the Bitbucket REST API to optimize certain operations (like lightweight checkout and change detection).

          It is a multibranch pipeline. And I use Bitbucket Server as a branch source. These are the opitons, I think it is a valid Bitbucket provider, not a simple git repo:

          Credentials (for build auth): (our tehcnical user's credential)
          Bitbucket Server instance: (the name of our Bitbucket instance which is configured under Configure System / Bitbucket Server Integration)
          Project name: (name of the project which contains our repo)
          Repository name: (the name of the repo whihc contains the Jenkinsfile too)
          Clone from: Primary Server
          Behaviours: as mentioned above
          etc.

          Gergely Pilisi added a comment - It is a multibranch pipeline. And I use Bitbucket Server as a branch source. These are the opitons, I think it is a valid Bitbucket provider, not a simple git repo: Credentials (for build auth): (our tehcnical user's credential) Bitbucket Server instance: (the name of our Bitbucket instance which is configured under Configure System / Bitbucket Server Integration) Project name: (name of the project which contains our repo) Repository name: (the name of the repo whihc contains the Jenkinsfile too) Clone from: Primary Server Behaviours: as mentioned above etc.

          Maybe I choosed a wrong component, trying the bitbucket-branch-source-plugin now.

          Gergely Pilisi added a comment - Maybe I choosed a wrong component, trying the bitbucket-branch-source-plugin now.
          Gergely Pilisi made changes -
          Component/s New: bitbucket-branch-source-plugin [ 21428 ]
          Component/s Original: git-plugin [ 15543 ]
          Component/s Original: pipeline [ 21692 ]
          Labels Original: git pipeline plugin New: bitbucket bitbucket-branch-source-plugin bitbucket-server

            Unassigned Unassigned
            gpilisi Gergely Pilisi
            Votes:
            1 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: