From 1edb0a405c0b96bd7173562d7595fed8bafbc436 Mon Sep 17 00:00:00 2001 From: Johannes Schnatterer Date: Thu, 25 Jun 2020 17:10:53 +0200 Subject: [PATCH] Fix installDockerClient for versions > 18.06.3 --- .../cloudogu/ces/cesbuildlib/Docker.groovy | 12 +++++- .../ces/cesbuildlib/DockerTest.groovy | 42 ++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/com/cloudogu/ces/cesbuildlib/Docker.groovy b/src/com/cloudogu/ces/cesbuildlib/Docker.groovy index b8475067..80f46471 100644 --- a/src/com/cloudogu/ces/cesbuildlib/Docker.groovy +++ b/src/com/cloudogu/ces/cesbuildlib/Docker.groovy @@ -382,7 +382,17 @@ class Docker implements Serializable { private void doInstallDockerClient() { // Installs statically linked docker binary - script.sh "cd ${script.pwd()}/.jenkins && wget -qc https://download.docker.com/linux/static/stable/x86_64/docker-$dockerClientVersionToInstall-ce.tgz -O - | tar -xz" + String url = "https://download.docker.com/linux/static/stable/x86_64/docker-${dockerClientVersionToInstall}.tgz" + + // Keep compatibility with old URLs + if ((dockerClientVersionToInstall.startsWith('17') || + dockerClientVersionToInstall.startsWith('18.03') || + dockerClientVersionToInstall.startsWith('18.06')) && + !dockerClientVersionToInstall.endsWith('-ce')) { + url = url.replace('.tgz', '-ce.tgz') + } + + script.sh "cd ${script.pwd()}/.jenkins && wget -qc ${url} -O - | tar -xz" } } } \ No newline at end of file diff --git a/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy b/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy index 36948b02..a820c53e 100644 --- a/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy +++ b/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy @@ -344,6 +344,46 @@ class DockerTest { 'Unable to parse group docker from /etc/group. Docker host will not be accessible for container.') } + @Test + void "install older docker clients"() { + Docker docker = createWithImage(mockedImageMethodInside()) + + def oldUrlVersions = [ '17.03.0', '17.03.1', '17.03.2', '17.06.0', '17.06.1', '17.06.2', '17.09.0', '17.09.1', + '17.12.0', '17.12.1', '18.03.0', '18.03.1', '18.06.0', '18.06.1', '18.06.2', '18.06.3'] + + oldUrlVersions.forEach({ + actualShArgs = [] + docker.image(expectedImage) + .installDockerClient(it) + .inside { return 'expectedClosure' } + assert actualShArgs[0].contains("${it}-ce.tgz") + }) + + // Also accept URLs ending in -ce + oldUrlVersions.forEach({ + actualShArgs = [] + docker.image(expectedImage) + .installDockerClient("${it}-ce") + .inside { return 'expectedClosure' } + assert actualShArgs[0].contains("${it}-ce.tgz") + }) + } + + @Test + void "install newer docker clients"() { + Docker docker = createWithImage(mockedImageMethodInside()) + + def oldUrlVersions = [ '18.09.0', '19.03.9'] + + oldUrlVersions.forEach({ + actualShArgs = [] + docker.image(expectedImage) + .installDockerClient(it) + .inside { return 'expectedClosure' } + assert actualShArgs[0].contains("${it}.tgz") + }) + } + private Docker create(Map mockedMethod) { Map> mockedScript = [ docker: mockedMethod @@ -363,7 +403,7 @@ class DockerTest { return mockedMethod } ], - sh: { Object args -> + sh: { args -> if (!(args instanceof Map)) { actualShArgs.add(args)