From 6972535a2150358e53130dfdc33c631f08a6037c Mon Sep 17 00:00:00 2001 From: Vitali Kepin Date: Thu, 7 Dec 2023 17:23:27 +0100 Subject: [PATCH] Add check for Docker availability before register Docker plugin tasks --- 2.0/gradle/vividus-test-docker.gradle | 90 ++++++++++++++++----------- 1 file changed, 52 insertions(+), 38 deletions(-) diff --git a/2.0/gradle/vividus-test-docker.gradle b/2.0/gradle/vividus-test-docker.gradle index 82e99cd..a16c859 100644 --- a/2.0/gradle/vividus-test-docker.gradle +++ b/2.0/gradle/vividus-test-docker.gradle @@ -26,58 +26,72 @@ buildscript { apply plugin: com.bmuschko.gradle.docker.DockerRemoteApiPlugin -tasks.register('copyProjectLibrary', Copy) { - dependsOn = [build, jar] - from layout.buildDirectory.dir('libs') - into layout.buildDirectory.dir('docker/libs') -} - -tasks.register('createTestsDockerfile', com.bmuschko.gradle.docker.tasks.image.Dockerfile) { - dependsOn = [copyProjectLibrary] - doFirst { - from("vividus/vividus:${project.ext.vividusVersion}") - copyFile('libs', '/vividus/libs/') +def isDockerInstalled() { + try { + def proc = 'docker --version'.execute() + proc.text + proc.waitFor() + return proc.exitValue() == 0 + } catch (Exception e) { + return false } } -tasks.register('buildTestsImage', com.bmuschko.gradle.docker.tasks.image.DockerBuildImage) { - dependsOn = [createTestsDockerfile] +if (isDockerInstalled()) { + tasks.register('copyProjectLibrary', Copy) { + dependsOn = [build, jar] + from layout.buildDirectory.dir('libs') + into layout.buildDirectory.dir('docker/libs') + } - doFirst { - def repositoryPath = getProperty('DOCKER_REPOSITORY_PATH', 'docker.repository-path') - if (repositoryPath == null) { - throw new StopExecutionException('Please set repository path using \'docker.repository-path\' gradle property' - + ' or \'DOCKER_REPOSITORY_PATH\' environemnt variable') + tasks.register('createTestsDockerfile', com.bmuschko.gradle.docker.tasks.image.Dockerfile) { + dependsOn = [copyProjectLibrary] + doFirst { + from("vividus/vividus:${project.ext.vividusVersion}") + copyFile('libs', '/vividus/libs/') } + } + + tasks.register('buildTestsImage', com.bmuschko.gradle.docker.tasks.image.DockerBuildImage) { + dependsOn = [createTestsDockerfile] - images.add("${repositoryPath}/${project.name}:${project.version}") + doFirst { + def repositoryPath = getProperty('DOCKER_REPOSITORY_PATH', 'docker.repository-path') + if (repositoryPath == null) { + throw new StopExecutionException('Please set repository path using \'docker.repository-path\' gradle property' + + ' or \'DOCKER_REPOSITORY_PATH\' environemnt variable') + } + + images.add("${repositoryPath}/${project.name}:${project.version}") + } } -} -tasks.register('pushTestsImage', com.bmuschko.gradle.docker.tasks.image.DockerPushImage) { - dependsOn = [buildTestsImage] - images = buildTestsImage.images + tasks.register('pushTestsImage', com.bmuschko.gradle.docker.tasks.image.DockerPushImage) { + dependsOn = [buildTestsImage] + images = buildTestsImage.images - doFirst { - def usernameVarKey = 'DOCKER_REGISTRY_USERNAME' - def passwordVarKey = 'DOCKER_REGISTRY_PASSWORD' + doFirst { + def usernameVarKey = 'DOCKER_REGISTRY_USERNAME' + def passwordVarKey = 'DOCKER_REGISTRY_PASSWORD' - def registryUsername = System.getenv(usernameVarKey) - def registryPassword = System.getenv(passwordVarKey) + def registryUsername = System.getenv(usernameVarKey) + def registryPassword = System.getenv(passwordVarKey) - if (registryUsername != null && registryPassword == null - || registryUsername == null && registryPassword != null) { - def args = registryUsername == null ? [passwordVarKey, usernameVarKey] - : [usernameVarKey, passwordVarKey] - throw new StopExecutionException("Environment variable ${args[0]} is set, but ${args[1]} is not.") - } + if (registryUsername != null && registryPassword == null || registryUsername == null && registryPassword != null) { + def args = registryUsername == null ? [passwordVarKey, usernameVarKey] : [usernameVarKey, passwordVarKey] + throw new StopExecutionException("Environment variable ${args[0]} is set, but ${args[1]} is not.") + } - registryCredentials { - url = getProperty('DOCKER_REGISTRY_URL', 'docker.registry-url') - username = registryUsername - password = registryPassword + registryCredentials { + url = getProperty('DOCKER_REGISTRY_URL', 'docker.registry-url') + username = registryUsername + password = registryPassword + } } } +} else { + println 'Docker is not installed. Skipping Docker-dependent tasks: copyProjectLibrary, createTestsDockerfile, ' + + 'buildTestsImage, pushTestsImage.' } def getProperty(String envVarName, String propertyName) {