This is an automated email from the ASF dual-hosted git repository.
ptupitsyn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 6b1803fc242 IGNITE-27240 Add CI build for Docker images (#7383)
6b1803fc242 is described below
commit 6b1803fc24272451956a3ecfd8ce0c64233cf06d
Author: Pavel Panteleev <[email protected]>
AuthorDate: Thu Jan 15 10:27:54 2026 +0400
IGNITE-27240 Add CI build for Docker images (#7383)
* Add multi-platform Docker image builds (supporting both AMD64 and ARM64)
* Add new TeamCity build configuration for Docker images
---
.teamcity/build/build_types/ReleaseBuild.kt | 6 +++
.teamcity/build/distributions/Docker.kt | 71 +++++++++++++++++++++++++++++
.teamcity/build/distributions/Project.kt | 1 +
packaging/build.gradle | 2 +-
packaging/docker/Dockerfile | 21 ++++++++-
packaging/docker/Dockerfile.cli | 4 +-
6 files changed, 100 insertions(+), 5 deletions(-)
diff --git a/.teamcity/build/build_types/ReleaseBuild.kt
b/.teamcity/build/build_types/ReleaseBuild.kt
index 17e3b8c9458..0508eba002f 100644
--- a/.teamcity/build/build_types/ReleaseBuild.kt
+++ b/.teamcity/build/build_types/ReleaseBuild.kt
@@ -68,6 +68,12 @@ object ReleaseBuild : BuildType({
artifactRules = "deb => ignite-deb"
}
}
+ dependency(Docker) {
+ snapshot {}
+ artifacts {
+ artifactRules = "ignite-docker => ignite-docker"
+ }
+ }
dependency(Docs) {
snapshot {}
artifacts {
diff --git a/.teamcity/build/distributions/Docker.kt
b/.teamcity/build/distributions/Docker.kt
new file mode 100644
index 00000000000..12e06c906e9
--- /dev/null
+++ b/.teamcity/build/distributions/Docker.kt
@@ -0,0 +1,71 @@
+package build.distributions
+
+import jetbrains.buildServer.configs.kotlin.BuildType
+import jetbrains.buildServer.configs.kotlin.buildSteps.script
+import org.apache.ignite.teamcity.CustomBuildSteps.Companion.customGradle
+import org.apache.ignite.teamcity.CustomBuildSteps.Companion.customScript
+
+object Docker : BuildType({
+ name = "Docker Images"
+
+ artifactRules = """
+ ignite-*-amd64.tar.gz => ignite-docker
+ ignite-*-arm64.tar.gz => ignite-docker
+ """.trimIndent()
+
+ steps {
+ customScript(type = "bash") {
+ name = "Setup Docker Proxy"
+ }
+ customGradle {
+ name = "Build Docker Image (AMD64)"
+ tasks = ":packaging:docker -Ptarget_platform=linux/amd64
-Pplatforms.enable"
+ workingDir = "%VCSROOT__IGNITE3%"
+ }
+ script {
+ name = "Save AMD64 Image"
+ scriptContent = """
+ # Get the image tag (version) by finding the
apacheignite/ignite image
+ IMAGE_TAG=${'$'}(docker images --format "table
{{.Repository}}:{{.Tag}}" | grep '^apacheignite/ignite:' | head -1 | cut -d':'
-f2)
+ if [ -z "${'$'}IMAGE_TAG" ]; then
+ echo "Error: Could not find apacheignite/ignite image"
+ exit 1
+ fi
+ docker save apacheignite/ignite:${'$'}{IMAGE_TAG} -o
ignite-${'$'}{IMAGE_TAG}-amd64.tar
+ gzip -f ignite-${'$'}{IMAGE_TAG}-amd64.tar
+ """.trimIndent()
+ }
+ script {
+ name = "Setup Docker for ARM64 Builds"
+ scriptContent = """
+ #!/bin/bash
+
+ # docker buildx create --name container --driver
docker-container --bootstrap --use
+ # docker buildx build --load -t linux/arm64
--builder=container .
+ docker run --privileged --rm tonistiigi/binfmt --install all
+ """.trimIndent()
+ }
+ customGradle {
+ name = "Build Docker Image (ARM64)"
+ tasks = ":packaging:docker -Ptarget_platform=linux/arm64
-Pplatforms.enable"
+ workingDir = "%VCSROOT__IGNITE3%"
+ }
+ script {
+ name = "Save ARM64 Image"
+ scriptContent = """
+ # Get the image tag (version) by finding the
apacheignite/ignite image
+ IMAGE_TAG=${'$'}(docker images --format "table
{{.Repository}}:{{.Tag}}" | grep "apacheignite/ignite:" | head -1 | cut -d':'
-f2)
+ if [ -z "${'$'}IMAGE_TAG" ]; then
+ echo "Error: Could not find apacheignite/ignite image"
+ exit 1
+ fi
+ docker save apacheignite/ignite:${'$'}{IMAGE_TAG} -o
ignite-${'$'}{IMAGE_TAG}-arm64.tar
+ gzip -f ignite-${'$'}{IMAGE_TAG}-arm64.tar
+ """.trimIndent()
+ }
+ }
+
+ failureConditions {
+ executionTimeoutMin = 90
+ }
+})
diff --git a/.teamcity/build/distributions/Project.kt
b/.teamcity/build/distributions/Project.kt
index 98f59a2c9e1..def1622c7f9 100644
--- a/.teamcity/build/distributions/Project.kt
+++ b/.teamcity/build/distributions/Project.kt
@@ -17,6 +17,7 @@ object Project : Project({
CliRpm,
Deb,
Docs,
+ Docker,
DotnetBinariesDocs,
JavaBinariesDocs,
OdbcDeb,
diff --git a/packaging/build.gradle b/packaging/build.gradle
index aabec1e1bbb..813f0c868cd 100644
--- a/packaging/build.gradle
+++ b/packaging/build.gradle
@@ -126,7 +126,7 @@ def dockerCli = tasks.register('dockerCli', Exec) {
workingDir "$buildDir/docker-cli"
def imageTag = project.docker_cli_image_name
- def dockerArgs = ['docker', 'build', '-f', 'Dockerfile.cli', '-t',
imageTag]
+ def dockerArgs = ['docker', 'buildx', 'build', '-f', 'Dockerfile.cli',
'-t', imageTag]
if (project.hasProperty('target_platform')) {
dockerArgs.addAll(['--platform',
project.properties["target_platform"]])
diff --git a/packaging/docker/Dockerfile b/packaging/docker/Dockerfile
index d578dff49b7..082bd9dcdb9 100644
--- a/packaging/docker/Dockerfile
+++ b/packaging/docker/Dockerfile
@@ -1,4 +1,21 @@
-FROM eclipse-temurin:11 AS jre-build
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF 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.
+#
+
+FROM --platform=$TARGETPLATFORM eclipse-temurin:11 AS jre-build
RUN $JAVA_HOME/bin/jlink \
--add-modules ALL-MODULE-PATH \
@@ -9,7 +26,7 @@ RUN $JAVA_HOME/bin/jlink \
--output /javaruntime
# Same base image as eclipse-temurin
-FROM ubuntu:22.04
+FROM --platform=$TARGETPLATFORM ubuntu:22.04
ARG DOTNET_VERSION=8.0
ARG DOTNET_PACKAGE_NAME=dotnet-runtime
diff --git a/packaging/docker/Dockerfile.cli b/packaging/docker/Dockerfile.cli
index 9a082a0a95d..bcfaa0a7911 100644
--- a/packaging/docker/Dockerfile.cli
+++ b/packaging/docker/Dockerfile.cli
@@ -15,7 +15,7 @@
# limitations under the License.
#
-FROM eclipse-temurin:11 AS jre-build
+FROM --platform=$TARGETPLATFORM eclipse-temurin:11 AS jre-build
RUN $JAVA_HOME/bin/jlink \
--add-modules
java.base,java.desktop,java.logging,java.naming,java.net.http,java.prefs,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.zipfs
\
@@ -26,7 +26,7 @@ RUN $JAVA_HOME/bin/jlink \
--output /javaruntime
# Same base image as eclipse-temurin
-FROM ubuntu:22.04
+FROM --platform=$TARGETPLATFORM ubuntu:22.04
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH="${JAVA_HOME}/bin:${PATH}"