Skip to content

Commit 5f82e20

Browse files
authored
Build ubuntu based cloud ess image (#119150)
1 parent da737fc commit 5f82e20

File tree

3 files changed

+81
-26
lines changed

3 files changed

+81
-26
lines changed

distribution/docker/build.gradle

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,12 @@ void addBuildDockerImageTask(Architecture architecture, DockerBase base) {
425425
}
426426

427427
void addBuildEssDockerImageTask(Architecture architecture) {
428-
DockerBase base = DockerBase.CLOUD_ESS
428+
DockerBase dockerBase = DockerBase.CLOUD_ESS
429429
String arch = architecture == Architecture.AARCH64 ? '-aarch64' : ''
430-
String contextDir = "${project.buildDir}/docker-context/elasticsearch${base.suffix}-${VersionProperties.elasticsearch}-docker-build-context${arch}"
430+
String contextDir = "${project.buildDir}/docker-context/elasticsearch${dockerBase.suffix}-${VersionProperties.elasticsearch}-docker-build-context${arch}"
431431

432432
final TaskProvider<Sync> buildContextTask =
433-
tasks.register(taskName('build', architecture, base, 'DockerContext'), Sync) {
433+
tasks.register(taskName('build', architecture, dockerBase, 'DockerContext'), Sync) {
434434
into contextDir
435435

436436
final Path projectDir = project.projectDir.toPath()
@@ -439,28 +439,52 @@ void addBuildEssDockerImageTask(Architecture architecture) {
439439
from configurations.allPlugins
440440
}
441441

442-
from(projectDir.resolve("src/docker/Dockerfile.cloud-ess")) {
443-
expand([
444-
base_image: "elasticsearch${DockerBase.CLOUD.suffix}:${architecture.classifier}"
445-
])
442+
// If we're performing a release build, but `build.id` hasn't been set, we can
443+
// infer that we're not at the Docker building stage of the build, and therefore
444+
// we should skip the beats part of the build.
445+
String buildId = providers.systemProperty('build.id').getOrNull()
446+
boolean includeBeats = VersionProperties.isElasticsearchSnapshot() == true || buildId != null || useDra
447+
448+
if (includeBeats) {
449+
from configurations.getByName("filebeat_${architecture.classifier}")
450+
from configurations.getByName("metricbeat_${architecture.classifier}")
451+
}
452+
// For some reason, the artifact name can differ depending on what repository we used.
453+
rename ~/((?:file|metric)beat)-.*\.tar\.gz$/, "\$1-${VersionProperties.elasticsearch}.tar.gz"
454+
455+
String baseSuffix = DockerBase.DEFAULT.suffix
456+
from(projectDir.resolve("src/docker/Dockerfile.ess")) {
457+
expand(
458+
[
459+
base_image: "elasticsearch${baseSuffix}:${architecture.classifier}",
460+
docker_base: "${dockerBase.name().toLowerCase()}",
461+
version: "${VersionProperties.elasticsearch}",
462+
retry: ShellRetry
463+
]
464+
)
446465
filter SquashNewlinesFilter
447-
rename ~/Dockerfile\.cloud-ess$/, 'Dockerfile'
466+
rename ~/Dockerfile\.ess$/, 'Dockerfile'
448467
}
449468
}
450469

451470
final TaskProvider<DockerBuildTask> buildDockerImageTask =
452-
tasks.register(taskName("build", architecture, base, "DockerImage"), DockerBuildTask) {
471+
tasks.register(taskName("build", architecture, dockerBase, "DockerImage"), DockerBuildTask) {
453472

454-
TaskProvider<DockerBuildTask> buildCloudTask = tasks.named(taskName("build", architecture, DockerBase.CLOUD, "DockerImage"))
455-
inputs.files(buildCloudTask)
473+
DockerBase base = DockerBase.DEFAULT
474+
475+
TaskProvider<DockerBuildTask> buildBaseTask = tasks.named(taskName("build", architecture, base, "DockerImage"))
476+
inputs.files(buildBaseTask)
456477

457478
dockerContext.fileProvider(buildContextTask.map { it.getDestinationDir() })
458479

459480
noCache = buildParams.isCi()
460481
baseImages = []
461-
tags = generateTags(base, architecture)
482+
tags = generateTags(dockerBase, architecture)
462483
platforms.add(architecture.dockerPlatform)
463-
Provider<DockerSupportService> serviceProvider = GradleUtils.getBuildService(project.gradle.sharedServices, DockerSupportPlugin.DOCKER_SUPPORT_SERVICE_NAME)
484+
Provider<DockerSupportService> serviceProvider = GradleUtils.getBuildService(
485+
project.gradle.sharedServices,
486+
DockerSupportPlugin.DOCKER_SUPPORT_SERVICE_NAME
487+
)
464488
onlyIf("$architecture supported") { serviceProvider.get().isArchitectureSupported(architecture) }
465489

466490
}

distribution/docker/src/docker/Dockerfile.cloud-ess

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
FROM ${base_image} AS builder
2+
3+
USER root
4+
5+
# Add plugins infrastructure
6+
RUN mkdir -p /opt/plugins/archive
7+
RUN chmod -R 0555 /opt/plugins
8+
9+
COPY filebeat-${version}.tar.gz metricbeat-${version}.tar.gz /tmp/
10+
RUN set -eux ; \\
11+
for beat in filebeat metricbeat ; do \\
12+
if [ ! -s /tmp/\$beat-${version}.tar.gz ]; then \\
13+
echo "/tmp/\$beat-${version}.tar.gz is empty - cannot uncompress" 2>&1 ; \\
14+
exit 1 ; \\
15+
fi ; \\
16+
if ! tar tf /tmp/\$beat-${version}.tar.gz >/dev/null; then \\
17+
echo "/tmp/\$beat-${version}.tar.gz is corrupt - cannot uncompress" 2>&1 ; \\
18+
exit 1 ; \\
19+
fi ; \\
20+
mkdir -p /opt/\$beat ; \\
21+
tar xf /tmp/\$beat-${version}.tar.gz -C /opt/\$beat --strip-components=1 ; \\
22+
done
23+
24+
COPY plugins/*.zip /opt/plugins/archive/
25+
26+
RUN chown 1000:1000 /opt/plugins/archive/*
27+
RUN chmod 0444 /opt/plugins/archive/*
28+
29+
FROM ${base_image}
30+
USER root
31+
32+
RUN <%= retry.loop("apt-get", "export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends wget") %>
33+
34+
# tweak entry point for ESS specific wolfi image
35+
ENTRYPOINT ["/sbin/tini", "--"]
36+
CMD ["/app/elasticsearch.sh"]
37+
# Generate a stub command that will be overwritten at runtime
38+
RUN mkdir /app && \\
39+
echo -e '#!/bin/bash\\nexec /usr/local/bin/docker-entrypoint.sh eswrapper' > /app/elasticsearch.sh && \\
40+
chmod 0555 /app/elasticsearch.sh
41+
42+
COPY --from=builder --chown=0:0 /opt /opt
43+
USER 1000:0
44+
ENV ES_PLUGIN_ARCHIVE_DIR /opt/plugins/archive

0 commit comments

Comments
 (0)