Fix build on sles with new docker version (#36707)
The build hash for some Docker versions is longer than 7 characters. Closes #36414
This commit is contained in:
parent
9c2980a55e
commit
9f75b6ea58
|
@ -293,18 +293,7 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
it.standardOutput = dockerVersionOutput
|
it.standardOutput = dockerVersionOutput
|
||||||
})
|
})
|
||||||
final String dockerVersion = dockerVersionOutput.toString().trim()
|
final String dockerVersion = dockerVersionOutput.toString().trim()
|
||||||
final Matcher matcher = dockerVersion =~ /Docker version (\d+\.\d+)\.\d+(?:-ce)?, build [0-9a-f]{7}/
|
checkDockerVersionRecent(dockerVersion)
|
||||||
assert matcher.matches() : dockerVersion
|
|
||||||
final dockerMajorMinorVersion = matcher.group(1)
|
|
||||||
final String[] majorMinor = dockerMajorMinorVersion.split("\\.")
|
|
||||||
if (Integer.parseInt(majorMinor[0]) < 17
|
|
||||||
|| (Integer.parseInt(majorMinor[0]) == 17 && Integer.parseInt(majorMinor[1]) < 5)) {
|
|
||||||
final String message = String.format(
|
|
||||||
Locale.ROOT,
|
|
||||||
"building Docker images requires Docker version 17.05+ due to use of multi-stage builds yet was [%s]",
|
|
||||||
dockerVersion)
|
|
||||||
throwDockerRequiredException(message)
|
|
||||||
}
|
|
||||||
|
|
||||||
final ByteArrayOutputStream dockerImagesErrorOutput = new ByteArrayOutputStream()
|
final ByteArrayOutputStream dockerImagesErrorOutput = new ByteArrayOutputStream()
|
||||||
// the Docker binary executes, check that we can execute a privileged command
|
// the Docker binary executes, check that we can execute a privileged command
|
||||||
|
@ -339,6 +328,21 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static void checkDockerVersionRecent(String dockerVersion) {
|
||||||
|
final Matcher matcher = dockerVersion =~ /Docker version (\d+\.\d+)\.\d+(?:-ce)?, build [0-9a-f]{7,40}/
|
||||||
|
assert matcher.matches(): dockerVersion
|
||||||
|
final dockerMajorMinorVersion = matcher.group(1)
|
||||||
|
final String[] majorMinor = dockerMajorMinorVersion.split("\\.")
|
||||||
|
if (Integer.parseInt(majorMinor[0]) < 17
|
||||||
|
|| (Integer.parseInt(majorMinor[0]) == 17 && Integer.parseInt(majorMinor[1]) < 5)) {
|
||||||
|
final String message = String.format(
|
||||||
|
Locale.ROOT,
|
||||||
|
"building Docker images requires Docker version 17.05+ due to use of multi-stage builds yet was [%s]",
|
||||||
|
dockerVersion)
|
||||||
|
throwDockerRequiredException(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void throwDockerRequiredException(final String message) {
|
private static void throwDockerRequiredException(final String message) {
|
||||||
throw new GradleException(
|
throw new GradleException(
|
||||||
message + "\nyou can address this by attending to the reported issue, "
|
message + "\nyou can address this by attending to the reported issue, "
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elasticsearch under one or more contributor
|
||||||
|
* license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright
|
||||||
|
* ownership. Elasticsearch licenses this file to you under
|
||||||
|
* the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.elasticsearch.gradle;
|
||||||
|
|
||||||
|
import org.elasticsearch.gradle.test.GradleUnitTestCase;
|
||||||
|
import org.gradle.api.GradleException;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
||||||
|
public class BuildPluginTests extends GradleUnitTestCase {
|
||||||
|
|
||||||
|
public void testPassingDockerVersions() {
|
||||||
|
BuildPlugin.checkDockerVersionRecent("Docker version 18.06.1-ce, build e68fc7a215d7");
|
||||||
|
BuildPlugin.checkDockerVersionRecent("Docker version 17.05.0, build e68fc7a");
|
||||||
|
BuildPlugin.checkDockerVersionRecent("Docker version 17.05.1, build e68fc7a");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = GradleException.class)
|
||||||
|
public void testFailingDockerVersions() {
|
||||||
|
BuildPlugin.checkDockerVersionRecent("Docker version 17.04.0, build e68fc7a");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue