diff --git a/pom.xml b/pom.xml index 4c0539cc3..a5c28734d 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ 1.625.3 false true - 3.0.2 + 3.0.5 1 7 1.120 diff --git a/src/main/java/com/cloudbees/jenkins/GitHubRepositoryName.java b/src/main/java/com/cloudbees/jenkins/GitHubRepositoryName.java index 99e941579..66cccc0b0 100644 --- a/src/main/java/com/cloudbees/jenkins/GitHubRepositoryName.java +++ b/src/main/java/com/cloudbees/jenkins/GitHubRepositoryName.java @@ -20,6 +20,7 @@ import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import java.io.IOException; +import java.net.UnknownHostException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -64,6 +65,9 @@ public class GitHubRepositoryName { Pattern.compile("ssh://(?:git@)?([^/]+)/([^/]+)/([^/]+)/?") }; + private static final int MAX_RETRIES = 3; + private static final int BACKOFF_MILLIS = 50; + /** * Create {@link GitHubRepositoryName} from URL * @@ -223,12 +227,25 @@ private static Function toGHRepository(final GitHubReposit return new NullSafeFunction() { @Override protected GHRepository applyNullSafe(@Nonnull GitHub gitHub) { - try { - return gitHub.getRepository(format("%s/%s", repoName.getUserName(), repoName.getRepositoryName())); - } catch (IOException e) { - LOGGER.warn("Failed to obtain repository {}", this, e); - return null; + int mtries = 0; + while (mtries < MAX_RETRIES) { + try { + return gitHub.getRepository(format("%s/%s", repoName.getUserName(), + repoName.getRepositoryName())); + } catch (UnknownHostException e) { + LOGGER.warn("Failed to resolve repository {}", this, e); + mtries++; + try { + Thread.sleep(BACKOFF_MILLIS * mtries); + } catch (InterruptedException ex) { + LOGGER.error("{}", this, ex); + } + } catch (IOException e) { + LOGGER.warn("Failed to obtain repository {}", this, e); + return null; + } } + return null; } }; }