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

SCM checkout retry count not working

    XMLWordPrintable

Details

    Description

      From time to time I reveive error when getting SCM changes from Git repository and the option "SCM checkout retry count" (I have set it to 3) is not working.

      ERROR: Problem fetching from origin / origin - could be unavailable. Continuing anyway
      hudson.plugins.git.GitException: Command "git fetch -t git@github.com:xxx/xxx +refs/heads/:refs/remotes/origin/" returned status code 128:
      stdout:
      stderr: ssh_exchange_identification: Connection closed by remote host
      fatal: The remote end hung up unexpectedly

      at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:818)
      at hudson.plugins.git.GitAPI.launchCommand(GitAPI.java:780)
      at hudson.plugins.git.GitAPI.fetch(GitAPI.java:196)
      at hudson.plugins.git.GitAPI.fetch(GitAPI.java:1026)
      at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:812)
      at hudson.plugins.git.GitSCM.access$100(GitSCM.java:90)
      at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1096)
      at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1064)
      at hudson.FilePath.act(FilePath.java:842)
      at hudson.FilePath.act(FilePath.java:824)
      at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1064)
      at org.jenkinsci.plugins.multiplescms.MultiSCM.checkout(MultiSCM.java:117)
      at hudson.model.AbstractProject.checkout(AbstractProject.java:1249)
      at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:589)
      at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
      at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:494)
      at hudson.model.Run.execute(Run.java:1488)
      at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
      at hudson.model.ResourceController.execute(ResourceController.java:88)
      at hudson.model.Executor.run(Executor.java:236)
      ERROR: Could not fetch from any repository
      FATAL: Could not fetch from any repository
      hudson.plugins.git.GitException: Could not fetch from any repository
      at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1103)
      at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1064)
      at hudson.FilePath.act(FilePath.java:842)
      at hudson.FilePath.act(FilePath.java:824)
      at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1064)
      at org.jenkinsci.plugins.multiplescms.MultiSCM.checkout(MultiSCM.java:117)
      at hudson.model.AbstractProject.checkout(AbstractProject.java:1249)
      at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:589)
      at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
      at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:494)
      at hudson.model.Run.execute(Run.java:1488)
      at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
      at hudson.model.ResourceController.execute(ResourceController.java:88)
      at hudson.model.Executor.run(Executor.java:236)

      Attachments

        Activity

          We still run into this issue - we're using git plugin v3.8.0

          e.g. while loading a shared pipeline library on a multibranch-pipeline

          We got error "unable to access [shared pipeline repo git repo url]: The requested URL returned error: 504

          WorkflowScript: Loading libraries failed

           

          No retry is done to load the shared pipeline library, while SCM retry count is set to 5 

          sdecooma Sofie De Cooman added a comment - We still run into this issue - we're using git plugin v3.8.0 e.g. while loading a shared pipeline library on a multibranch-pipeline We got error "unable to access [shared pipeline repo git repo url] : The requested URL returned error: 504 WorkflowScript: Loading libraries failed   No retry is done to load the shared pipeline library, while SCM retry count is set to 5 
          znerd Ernst de Haan added a comment - - edited

          Same issue here. Here's my code snippet:

          stage('checkout') {
              steps {
                  retry(env.TRY_COUNT) {
                      timeout(time: 45, unit: 'SECONDS') {
                          checkout scm
                      }
                  }
              }
          }
          

          Environment:

          • Linux
          • Jenkins 2.150.1
          • Pipeline plugin 2.5
          • Pipeline: Declarative plugin 1.3.2
          • git repository
          • Git plugin 3.9.1
          • Git Client plugin 2.7.3
          • Git Pipeline for Blue Ocean plugin 1.5.4

          What happens is:

          • when the checkout scm fails due to a time-out, it just falls through the retry
          • in other words: the retry is not even attempted
          znerd Ernst de Haan added a comment - - edited Same issue here. Here's my code snippet: stage('checkout') { steps { retry(env.TRY_COUNT) { timeout(time: 45, unit: 'SECONDS') { checkout scm } } } } Environment: Linux Jenkins 2.150.1 Pipeline plugin 2.5 Pipeline: Declarative plugin 1.3.2 git repository Git plugin 3.9.1 Git Client plugin 2.7.3 Git Pipeline for Blue Ocean plugin 1.5.4 What happens is: when the checkout scm fails due to a time-out, it just falls through the retry in other words: the retry is not even attempted
          stevekipping Steve Kipping added a comment -

          We have intermittent connection issues between our Jenkins instance on one server and our Bitbucket/Git server which is in a different region. We've been unable to rectify this issue, but the retry should work fine as we've tested this with a manual retry script outside of Jenkins. The SCM retry count doesn't work for us, but would be a good containment method if it did.

          • Git plugin 4.6.0
          • Jenkins 2.263.4 running in Docker

           

           

          stevekipping Steve Kipping added a comment - We have intermittent connection issues between our Jenkins instance on one server and our Bitbucket/Git server which is in a different region. We've been unable to rectify this issue, but the retry should work fine as we've tested this with a manual retry script outside of Jenkins. The SCM retry count doesn't work for us, but would be a good containment method if it did. Git plugin 4.6.0 Jenkins 2.263.4 running in Docker    

          Hi all, I'm also facing the same issue. In fact, my issue is exactly the same as this one: JENKINS-39194. In other words, the "SCM checkout retry count" works fine for freestyle jobs, but not for pipeline jobs that use the "Pipeline script from SCM" option. I'm using workflow-cps plugin version 2.74 and Git plugin version 3.12.0.

          According to the linked ticket, the fix should be in for the version I'm using. Perhaps there has been a regression since then? Has anyone managed to implement a workaround to implement retries on pipeline jobs?

          spidru Andrew Spiteri added a comment - Hi all, I'm also facing the same issue. In fact, my issue is exactly the same as this one: JENKINS-39194 . In other words, the "SCM checkout retry count" works fine for freestyle jobs, but not for pipeline jobs that use the "Pipeline script from SCM" option. I'm using workflow-cps plugin version 2.74 and Git plugin version 3.12.0. According to the linked ticket, the fix should be in for the version I'm using. Perhaps there has been a regression since then? Has anyone managed to implement a workaround to implement retries on pipeline jobs?
          pavanreddymaley Pavan Reddy added a comment -

          I'm also facing the same issue with the Jenkins multi branch pipelines. The below workaround works for me.

          for (int retryCount = 1; retryCount < 6; retryCount++) {
              try {
                  checkout([$class: 'GitSCM',
                            branches: [[name: branch ]],
                            doGenerateSubmoduleConfigurations: false,
                            extensions: [
                                    [$class: 'CloneOption',
                                     noTags: false,
                                     reference: referenceRepo,
                                     shallow: shallow],
                                    [$class: 'UserIdentity',
                                     email: 'jenkins@local.demo.com',
                                     name: 'Jenkins'
                                    ]
                            ],
                            submoduleCfg: [],
                            userRemoteConfigs: [[credentialsId: 'scm-ssh-key',
                                                 name: repo.name,
                                                 refspec: '+' + refspec + ':refs/remotes/' + repo.name + '/' + branch,
                                                 url: repo.getURL()
                                                ]]
                  ])
                  break;
              }
              catch (err) {
                  if (retryCount == 5){
                      error "${err}"
                  } else {
                      echo "code checkout failed with exception ${err}. retrying..."
                      // Retry after 15 seconds
                      sleep (time: 15, unit: 'SECONDS')
                  }
              }
          } 
          pavanreddymaley Pavan Reddy added a comment - I'm also facing the same issue with the Jenkins multi branch pipelines. The below workaround works for me. for ( int retryCount = 1; retryCount < 6; retryCount++) { try { checkout([$class: 'GitSCM' , branches: [[name: branch ]], doGenerateSubmoduleConfigurations: false , extensions: [ [$class: 'CloneOption' , noTags: false , reference: referenceRepo, shallow: shallow], [$class: 'UserIdentity' , email: 'jenkins@local.demo.com' , name: 'Jenkins' ] ], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'scm-ssh-key' , name: repo.name, refspec: '+' + refspec + ':refs/remotes/' + repo.name + '/' + branch, url: repo.getURL() ]] ]) break ; } catch (err) { if (retryCount == 5){ error "${err}" } else { echo "code checkout failed with exception ${err}. retrying..." // Retry after 15 seconds sleep (time: 15, unit: 'SECONDS' ) } } }

          People

            Unassigned Unassigned
            lnowak Łukasz Nowak
            Votes:
            11 Vote for this issue
            Watchers:
            23 Start watching this issue

            Dates

              Created:
              Updated: