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}"

Reply via email to