151 lines
6.2 KiB
Groovy
151 lines
6.2 KiB
Groovy
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
|
|
import com.bmuschko.gradle.docker.tasks.image.DockerPushImage
|
|
|
|
plugins {
|
|
id "com.bmuschko.docker-remote-api" version "6.7.0"
|
|
}
|
|
|
|
def buildLinuxTestImagesTask = tasks.create("buildLinuxTestImages") {
|
|
group = "build"
|
|
description = "Builds all Linux Docker images for the test matrix"
|
|
|
|
}
|
|
|
|
def buildWindowsTestImagesTask = tasks.create("buildWindowsTestImages") {
|
|
group = "build"
|
|
description = "Builds all Windows Docker images for the test matrix"
|
|
}
|
|
|
|
ext {
|
|
matrix = []
|
|
}
|
|
|
|
tasks.create("pushMatrix", DockerPushImage) {
|
|
group = "publishing"
|
|
description = "Push all Docker images for the test matrix"
|
|
images.set(project.ext.matrix)
|
|
}
|
|
|
|
// Each line under appserver describes one matrix of (version x vm x jdk), dockerfile key overrides
|
|
// Dockerfile name, args key passes raw arguments to docker build
|
|
def linuxTargets = [
|
|
"jetty": [
|
|
// TODO (trask) drop JDK 15 (everywhere below) after JDK 16 is passing
|
|
[version: ["9.4.35"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]],
|
|
[version: ["10.0.0"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"]],
|
|
[version: ["11.0.1"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"], war: "servlet-5.0"]
|
|
],
|
|
"tomcat": [
|
|
[version: ["7.0.107"], vm: ["hotspot", "openj9"], jdk: ["8"]],
|
|
[version: ["8.5.60", "9.0.40"], vm: ["hotspot", "openj9"], jdk: ["8", "11"]],
|
|
[version: ["10.0.4"], vm: ["hotspot", "openj9"], jdk: ["11", "15"], war: "servlet-5.0"]
|
|
],
|
|
"tomee": [
|
|
[version: ["7.0.0"], vm: ["hotspot"], jdk: ["8"]],
|
|
[version: ["7.0.0"], vm: ["openj9"], jdk: ["8"], dockerfile: "tomee-custom"],
|
|
[version: ["8.0.6"], vm: ["hotspot"], jdk: ["8", "11"]],
|
|
[version: ["8.0.6"], vm: ["openj9"], jdk: ["8", "11"], dockerfile: "tomee-custom"]
|
|
],
|
|
"payara": [
|
|
[version: ["5.2020.6"], vm: ["hotspot"], jdk: ["8"], args: [tagSuffix: ""]],
|
|
[version: ["5.2020.6"], vm: ["hotspot"], jdk: ["11"], args: [tagSuffix: "-jdk11"]],
|
|
[version: ["5.2020.6"], vm: ["openj9"], jdk: ["8", "11"], dockerfile: "payara-custom-5.2020.6"]
|
|
],
|
|
"wildfly": [
|
|
[version: ["13.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8"]],
|
|
[version: ["17.0.1.Final", "21.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]]
|
|
],
|
|
"liberty": [
|
|
[version: ["20.0.0.12"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]]
|
|
]
|
|
]
|
|
|
|
def windowsTargets = [
|
|
"jetty" : [
|
|
[version: ["9.4.35"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"], args: [sourceVersion: "9.4.35.v20201120"]],
|
|
[version: ["10.0.0"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"], dockerfile: "jetty-split", args: [sourceVersion: "10.0.0.beta3"]],
|
|
[version: ["11.0.1"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"], dockerfile: "jetty-split", args: [sourceVersion: "11.0.1"], war: "servlet-5.0"]
|
|
],
|
|
"tomcat" : [
|
|
[version: ["7.0.107"], vm: ["hotspot", "openj9"], jdk: ["8"], args: [majorVersion: "7"]],
|
|
[version: ["8.5.60"], vm: ["hotspot", "openj9"], jdk: ["8", "11"], args: [majorVersion: "8"]],
|
|
[version: ["9.0.40"], vm: ["hotspot", "openj9"], jdk: ["8", "11"], args: [majorVersion: "9"]],
|
|
[version: ["10.0.4"], vm: ["hotspot", "openj9"], jdk: ["11", "15"], args: [majorVersion: "10"], war: "servlet-5.0"]
|
|
],
|
|
"tomee" : [
|
|
[version: ["7.0.0"], vm: ["hotspot", "openj9"], jdk: ["8"]],
|
|
[version: ["8.0.6"], vm: ["hotspot", "openj9"], jdk: ["8", "11"]]
|
|
],
|
|
"payara": [
|
|
[version: ["5.2020.6"], vm: ["hotspot", "openj9"], jdk: ["8", "11"]]
|
|
],
|
|
"wildfly" : [
|
|
[version: ["13.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8"]],
|
|
[version: ["17.0.1.Final", "21.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]]
|
|
],
|
|
"liberty" : [
|
|
[version: ["20.0.0.12"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"], args: [release: "2020-11-11_0736"]]
|
|
]
|
|
]
|
|
|
|
createDockerTasks(buildLinuxTestImagesTask, linuxTargets, false)
|
|
createDockerTasks(buildWindowsTestImagesTask, windowsTargets, true)
|
|
|
|
def configureImage(Task parentTask, server, dockerfile, version, vm, jdk, warProject, Map<String, String> extraArgs, isWindows = false) {
|
|
// Using separate build directory for different war files allows using the same app.war filename
|
|
def dockerWorkingDir = new File(project.buildDir, "docker-$warProject")
|
|
def dockerFileName = isWindows ? "${dockerfile}.windows.dockerfile" : "${dockerfile}.dockerfile"
|
|
def platformSuffix = isWindows ? "-windows" : ""
|
|
|
|
def prepareTask = tasks.register("${server}ImagePrepare-$version-jdk$jdk-$vm$platformSuffix", Copy) {
|
|
def warTask = warProject != null ? project(":$warProject").tasks["war"] : project.tasks.war
|
|
it.dependsOn(warTask)
|
|
it.into(dockerWorkingDir)
|
|
it.from("src/$dockerFileName")
|
|
it.from("src/main/docker/$server")
|
|
it.from(warTask.archiveFile) {
|
|
rename { _ -> "app.war" }
|
|
}
|
|
}
|
|
|
|
def extraTag = findProperty("extraTag") ?: new Date().format("yyyyMMdd.HHmmSS")
|
|
def vmSuffix = vm == "hotspot" ? "" : "-$vm"
|
|
def image = "ghcr.io/open-telemetry/java-test-containers:$server-$version-jdk$jdk$vmSuffix$platformSuffix-$extraTag"
|
|
|
|
def buildTask = tasks.register("${server}Image-$version-jdk$jdk$vmSuffix$platformSuffix", DockerBuildImage) {
|
|
it.dependsOn(prepareTask)
|
|
group = "build"
|
|
description = "Builds Docker image with $server $version on JDK $jdk-$vm${isWindows ? ' on Windows' : ''}"
|
|
|
|
it.inputDir.set(dockerWorkingDir)
|
|
it.images.add(image)
|
|
it.dockerFile.set(new File(dockerWorkingDir, dockerFileName))
|
|
it.buildArgs.set(extraArgs + [jdk: jdk, vm: vm, version: version])
|
|
it.doLast {
|
|
project.ext.matrix.add(image)
|
|
}
|
|
}
|
|
|
|
parentTask.dependsOn(buildTask)
|
|
return image
|
|
}
|
|
|
|
def createDockerTasks(Task parentTask, targets, isWindows) {
|
|
Set<String> resultImages = []
|
|
targets.each { server, matrices ->
|
|
matrices.forEach { entry ->
|
|
def dockerfile = entry["dockerfile"]?.toString() ?: server
|
|
def extraArgs = (entry["args"] ?: [:]) as Map<String, String>
|
|
def warProject = entry["war"] ?: "servlet-3.0"
|
|
|
|
entry.version.forEach { version ->
|
|
entry.vm.forEach { vm ->
|
|
entry.jdk.forEach { jdk ->
|
|
resultImages.add(configureImage(parentTask, server, dockerfile, version, vm, jdk, warProject, extraArgs, isWindows))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return resultImages
|
|
} |