Browse Source

Add tasks to build Docker build context artifacts (#41819)

This commit adds some tasks to generate dedicated Docker build context
artifacts.
Jason Tedor 6 years ago
parent
commit
30da73f866

+ 24 - 44
distribution/docker/build.gradle

@@ -17,34 +17,17 @@ dependencies {
   ossDockerSource project(path: ":distribution:archives:oss-linux-tar")
 }
 
-ext.expansions = { oss ->
+ext.expansions = { oss, local ->
   final String classifier = 'linux-x86_64'            
   final String elasticsearch = oss ? "elasticsearch-oss-${VersionProperties.elasticsearch}-${classifier}.tar.gz" : "elasticsearch-${VersionProperties.elasticsearch}-${classifier}.tar.gz"
   return [
     'elasticsearch'       : elasticsearch,
     'license'             : oss ? 'Apache-2.0' : 'Elastic License',
-    'source_elasticsearch': local() ? "COPY $elasticsearch /opt/" : "RUN cd /opt && curl --retry 8 -s -L -O https://artifacts.elastic.co/downloads/elasticsearch/${elasticsearch} && cd -",
+    'source_elasticsearch': local ? "COPY $elasticsearch /opt/" : "RUN cd /opt && curl --retry 8 -s -L -O https://artifacts.elastic.co/downloads/elasticsearch/${elasticsearch} && cd -",
     'version'             : VersionProperties.elasticsearch
   ]
 }
 
-/*
- * We need to be able to render a Dockerfile that references the official artifacts on https://artifacts.elastic.co. For this, we use a
- * substitution in the Dockerfile template where we can either replace source_elasticsearch with a COPY from the Docker build context, or
- * a RUN curl command to retrieve the artifact from https://artifacts.elastic.co. The system property build.docker.source, which can be
- * either "local" (default) or "remote" controls which version of the Dockerfile is produced.
- */
-private static boolean local() {
-  final String buildDockerSource = System.getProperty("build.docker.source")
-  if (buildDockerSource == null || "local".equals(buildDockerSource)) {
-    return true
-  } else if ("remote".equals(buildDockerSource)) {
-    return false
-  } else {
-    throw new IllegalArgumentException("expected build.docker.source to be [local] or [remote] but was [" + buildDockerSource + "]")
-  }
-}
-
 private static String files(final boolean oss) {
   return "build/${ oss ? 'oss-' : ''}docker"
 }
@@ -53,39 +36,38 @@ private static String taskName(final String prefix, final boolean oss, final Str
   return "${prefix}${oss ? 'Oss' : ''}${suffix}"
 }
 
-void addCopyDockerContextTask(final boolean oss) {
-  task(taskName("copy", oss, "DockerContext"), type: Sync) {
-    into files(oss)
-
-    into('bin') {
-      from 'src/docker/bin'
-    }
-
-    into('config') {
-      from 'src/docker/config'
-    }
+project.ext {
+  dockerBuildContext = { boolean oss, boolean local ->
+    copySpec {
+      into('bin') {
+        from project.projectDir.toPath().resolve("src/docker/bin")
+      }
 
-    if (local()) {
-      if (oss) {
-        from configurations.ossDockerSource
-      } else {
-        from configurations.dockerSource
+      into('config') {
+        from project.projectDir.toPath().resolve("src/docker/config")
       }
 
-      from configurations.dockerPlugins
+      from(project.projectDir.toPath().resolve("src/docker/Dockerfile")) {
+        MavenFilteringHack.filter(it, expansions(oss, local))
+      }
     }
   }
 }
 
-void addCopyDockerfileTask(final boolean oss) {
-  task(taskName("copy", oss, "Dockerfile"), type: Copy) {
-    dependsOn taskName("copy", oss, "DockerContext")
-    inputs.properties(expansions(oss)) // ensure task is run when ext.expansions is changed
+void addCopyDockerContextTask(final boolean oss) {
+  task(taskName("copy", oss, "DockerContext"), type: Sync) {
+    inputs.properties(expansions(oss, true))
     into files(oss)
 
-    from('src/docker/Dockerfile') {
-      MavenFilteringHack.filter(it, expansions(oss))
+    with dockerBuildContext(oss, true)
+
+    if (oss) {
+      from configurations.ossDockerSource
+    } else {
+      from configurations.dockerSource
     }
+
+    from configurations.dockerPlugins
   }
 }
 
@@ -104,7 +86,6 @@ check.dependsOn postProcessFixture
 void addBuildDockerImage(final boolean oss) {
   final Task buildDockerImageTask = task(taskName("build", oss, "DockerImage"), type: LoggedExec) {
     dependsOn taskName("copy", oss, "DockerContext")
-    dependsOn taskName("copy", oss, "Dockerfile")
     List<String> tags
     if (oss) {
       tags = [ 
@@ -132,7 +113,6 @@ void addBuildDockerImage(final boolean oss) {
 
 for (final boolean oss : [false, true]) {
   addCopyDockerContextTask(oss)
-  addCopyDockerfileTask(oss)
   addBuildDockerImage(oss)
 }
 

+ 11 - 0
distribution/docker/docker-build-context/build.gradle

@@ -0,0 +1,11 @@
+apply plugin: 'base'
+
+task buildDockerBuildContext(type: Tar) {
+    extension = 'tar.gz'
+    compression = Compression.GZIP
+    archiveClassifier = "docker-build-context"
+    archiveBaseName = "elasticsearch"
+    with dockerBuildContext(false, false)
+}
+
+assemble.dependsOn buildDockerBuildContext

+ 11 - 0
distribution/docker/oss-docker-build-context/build.gradle

@@ -0,0 +1,11 @@
+apply plugin: 'base'
+
+task buildOssDockerBuildContext(type: Tar) {
+    extension = 'tar.gz'
+    compression = Compression.GZIP
+    archiveClassifier = "docker-build-context"
+    archiveBaseName = "elasticsearch-oss"
+    with dockerBuildContext(true, false)
+}
+
+assemble.dependsOn buildOssDockerBuildContext

+ 2 - 0
settings.gradle

@@ -29,6 +29,8 @@ List projects = [
   'distribution:archives:oss-no-jdk-linux-tar',
   'distribution:archives:no-jdk-linux-tar',
   'distribution:docker',
+  'distribution:docker:oss-docker-build-context',
+  'distribution:docker:docker-build-context',
   'distribution:packages:oss-deb',
   'distribution:packages:deb',
   'distribution:packages:oss-no-jdk-deb',