I am trying to build "linux/amd64" image for deployent in k8s in cloud, but since i am on M1 Pro, image produced is "linux/arm64" and cannot be deployed in my case.
When it is built with ci, on linux machine, all is fine, but for debugging purposes it is not convenient to run ci every time to see it in cloud
gradle task looks like this:
plugins {
kotlin("jvm") version "1.9.24"
kotlin("plugin.spring") version "1.9.24"
id("org.springframework.boot") version "3.3.2"
id("io.spring.dependency-management") version "1.1.6"
kotlin("plugin.jpa") version "1.9.24"
id("org.springframework.boot.aot") version "3.3.2"
}
....
tasks.named<BootBuildImage>("bootBuildImage") {
val imageNameValue = System.getenv("BACKEND_IMAGE_NAME")
imageName.set(imageNameValue)
// Enable CDS and Spring AOT
environment.put("BP_JVM_CDS_ENABLED", "true")
environment.put("BP_SPRING_AOT_ENABLED", "true")
environment.put("SPRING_PROFILES_ACTIVE", "bootBuildProfile")
// For multi arch (Apple Silicon) support
builder.set("paketobuildpacks/builder-jammy-buildpackless-tiny")
buildpacks.set(listOf("paketobuildpacks/java"))
}
what I am missing and how to force it to build required image type?
An imagePlatform
option has been added to the Spring Boot Gradle (and Maven) plugin for this purpose. The option will be released in Spring Boot 3.4.0, and is available now in snapshot builds.
plugins {
...
id("org.springframework.boot") version "3.4.0-SNAPSHOT"
id("org.springframework.boot.aot") version "3.4.0-SNAPSHOT"
...
}
....
tasks.named<BootBuildImage>("bootBuildImage") {
...
// For multi arch (Apple Silicon) support
builder.set("paketobuildpacks/builder-jammy-buildpackless-tiny")
buildpacks.set(listOf("paketobuildpacks/java"))
imagePlatform.set("linux/amd64")
}