Skip to content

Commit

Permalink
Build ubuntu based cloud ess image
Browse files Browse the repository at this point in the history
  • Loading branch information
breskeby committed Dec 19, 2024
1 parent ca63d94 commit ea52483
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 26 deletions.
50 changes: 37 additions & 13 deletions distribution/docker/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -425,12 +425,12 @@ void addBuildDockerImageTask(Architecture architecture, DockerBase base) {
}

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

final TaskProvider<Sync> buildContextTask =
tasks.register(taskName('build', architecture, base, 'DockerContext'), Sync) {
tasks.register(taskName('build', architecture, dockerBase, 'DockerContext'), Sync) {
into contextDir

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

from(projectDir.resolve("src/docker/Dockerfile.cloud-ess")) {
expand([
base_image: "elasticsearch${DockerBase.CLOUD.suffix}:${architecture.classifier}"
])
// If we're performing a release build, but `build.id` hasn't been set, we can
// infer that we're not at the Docker building stage of the build, and therefore
// we should skip the beats part of the build.
String buildId = providers.systemProperty('build.id').getOrNull()
boolean includeBeats = VersionProperties.isElasticsearchSnapshot() == true || buildId != null || useDra

if (includeBeats) {
from configurations.getByName("filebeat_${architecture.classifier}")
from configurations.getByName("metricbeat_${architecture.classifier}")
}
// For some reason, the artifact name can differ depending on what repository we used.
rename ~/((?:file|metric)beat)-.*\.tar\.gz$/, "\$1-${VersionProperties.elasticsearch}.tar.gz"

String baseSuffix = DockerBase.DEFAULT.suffix
from(projectDir.resolve("src/docker/Dockerfile.ess")) {
expand(
[
base_image: "elasticsearch${baseSuffix}:${architecture.classifier}",
docker_base: "${dockerBase.name().toLowerCase()}",
version: "${VersionProperties.elasticsearch}",
retry: ShellRetry
]
)
filter SquashNewlinesFilter
rename ~/Dockerfile\.cloud-ess$/, 'Dockerfile'
rename ~/Dockerfile\.ess$/, 'Dockerfile'
}
}

final TaskProvider<DockerBuildTask> buildDockerImageTask =
tasks.register(taskName("build", architecture, base, "DockerImage"), DockerBuildTask) {
tasks.register(taskName("build", architecture, dockerBase, "DockerImage"), DockerBuildTask) {

TaskProvider<DockerBuildTask> buildCloudTask = tasks.named(taskName("build", architecture, DockerBase.CLOUD, "DockerImage"))
inputs.files(buildCloudTask)
DockerBase base = DockerBase.DEFAULT

TaskProvider<DockerBuildTask> buildBaseTask = tasks.named(taskName("build", architecture, base, "DockerImage"))
inputs.files(buildBaseTask)

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

noCache = buildParams.isCi()
baseImages = []
tags = generateTags(base, architecture)
tags = generateTags(dockerBase, architecture)
platforms.add(architecture.dockerPlatform)
Provider<DockerSupportService> serviceProvider = GradleUtils.getBuildService(project.gradle.sharedServices, DockerSupportPlugin.DOCKER_SUPPORT_SERVICE_NAME)
Provider<DockerSupportService> serviceProvider = GradleUtils.getBuildService(
project.gradle.sharedServices,
DockerSupportPlugin.DOCKER_SUPPORT_SERVICE_NAME
)
onlyIf("$architecture supported") { serviceProvider.get().isArchitectureSupported(architecture) }

}
Expand Down
13 changes: 0 additions & 13 deletions distribution/docker/src/docker/Dockerfile.cloud-ess

This file was deleted.

44 changes: 44 additions & 0 deletions distribution/docker/src/docker/Dockerfile.ess
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
FROM ${base_image} AS builder

USER root

# Add plugins infrastructure
RUN mkdir -p /opt/plugins/archive
RUN chmod -R 0555 /opt/plugins

COPY filebeat-${version}.tar.gz metricbeat-${version}.tar.gz /tmp/
RUN set -eux ; \\
for beat in filebeat metricbeat ; do \\
if [ ! -s /tmp/\$beat-${version}.tar.gz ]; then \\
echo "/tmp/\$beat-${version}.tar.gz is empty - cannot uncompress" 2>&1 ; \\
exit 1 ; \\
fi ; \\
if ! tar tf /tmp/\$beat-${version}.tar.gz >/dev/null; then \\
echo "/tmp/\$beat-${version}.tar.gz is corrupt - cannot uncompress" 2>&1 ; \\
exit 1 ; \\
fi ; \\
mkdir -p /opt/\$beat ; \\
tar xf /tmp/\$beat-${version}.tar.gz -C /opt/\$beat --strip-components=1 ; \\
done

COPY plugins/*.zip /opt/plugins/archive/

RUN chown 1000:1000 /opt/plugins/archive/*
RUN chmod 0444 /opt/plugins/archive/*

FROM ${base_image}
USER root

RUN <%= retry.loop("apt-get", "export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends wget") %>

# tweak entry point for ESS specific wolfi image
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/app/elasticsearch.sh"]
# Generate a stub command that will be overwritten at runtime
RUN mkdir /app && \\
echo -e '#!/bin/bash\\nexec /usr/local/bin/docker-entrypoint.sh eswrapper' > /app/elasticsearch.sh && \\
chmod 0555 /app/elasticsearch.sh

COPY --from=builder --chown=0:0 /opt /opt
USER 1000:0
ENV ES_PLUGIN_ARCHIVE_DIR /opt/plugins/archive

0 comments on commit ea52483

Please sign in to comment.