From 00c754788f0e2b860c0c0c30d62a6debebefe4c2 Mon Sep 17 00:00:00 2001 From: Johannes Schnatterer Date: Thu, 25 Jun 2020 17:25:54 +0200 Subject: [PATCH] Allow for calling installDockerClient() without args. --- README.md | 4 ++-- src/com/cloudogu/ces/cesbuildlib/Docker.groovy | 5 ++++- test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy | 11 +++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b4308e07..be10b0ab 100644 --- a/README.md +++ b/README.md @@ -624,11 +624,11 @@ Example from Jenkinsfile: This is also used by [MavenInDocker](src/com/cloudogu/ces/cesbuildlib/MavenInDocker.groovy) -* `installDockerClient(String version)`: Installs the docker client with the specified version inside the container. +* `installDockerClient(String version)`: Installs the docker client with the specified version inside the container. + If no version parameter is passed, the lib tries to query the server version by calling `docker version`. This can be called in addition to mountDockerSocket(), when the "docker" CLI is required on the PATH. For available versions see [here](https://download.docker.com/linux/static/stable/x86_64/). - For an exampl see [here](https://github.com/cloudogu/continuous-delivery-docs-example) Examples: diff --git a/src/com/cloudogu/ces/cesbuildlib/Docker.groovy b/src/com/cloudogu/ces/cesbuildlib/Docker.groovy index 80f46471..d24399b2 100644 --- a/src/com/cloudogu/ces/cesbuildlib/Docker.groovy +++ b/src/com/cloudogu/ces/cesbuildlib/Docker.groovy @@ -282,7 +282,10 @@ class Docker implements Serializable { * * For available versions see here: https://download.docker.com/linux/static/stable/x86_64/ */ - Image installDockerClient(String version) { + Image installDockerClient(String version = '') { + if (!version) { + version = sh.returnStdOut "docker version --format '{{.Server.Version}}'" + } this.dockerClientVersionToInstall = version return this } diff --git a/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy b/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy index a820c53e..9d3cc2cf 100644 --- a/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy +++ b/test/com/cloudogu/ces/cesbuildlib/DockerTest.groovy @@ -10,6 +10,7 @@ class DockerTest { def expectedImage = 'google/cloud-sdk:164.0.0' def expectedHome = '/home/jenkins' def actualUser = 'jenkins' + def actualDockerServerVersion = '19.03.8' def actualPasswd = "$actualUser:x:1000:1000:Jenkins,,,:/home/jenkins:/bin/bash" def actualDockerGroupId = "999" def actualDockerGroup = "docker:x:$actualDockerGroupId:jenkins" @@ -383,6 +384,15 @@ class DockerTest { assert actualShArgs[0].contains("${it}.tgz") }) } + + @Test + void "install docker clients for current server version"() { + Docker docker = createWithImage(mockedImageMethodInside()) + docker.image(expectedImage) + .installDockerClient() + .inside { return 'expectedClosure' } + assert actualShArgs[0].contains("${actualDockerServerVersion}.tgz") + } private Docker create(Map mockedMethod) { Map> mockedScript = [ @@ -418,6 +428,7 @@ class DockerTest { if (script == 'cat /etc/group | grep docker') return actualDockerGroup if (script.contains(actualDockerGroup)) return actualDockerGroupId if (script.contains('cat /etc/passwd | grep')) return actualPasswd + if (script.contains('docker version --format \'{{.Server.Version}}\'')) return " ${actualDockerServerVersion} " else fail("Unexpected sh call. Script: " + script) }, pwd: { return expectedHome },