187 lines
5.8 KiB
Groovy
187 lines
5.8 KiB
Groovy
import org.elasticsearch.gradle.BuildPlugin
|
|
import org.elasticsearch.gradle.LoggedExec
|
|
import org.elasticsearch.gradle.VersionProperties
|
|
import org.elasticsearch.gradle.testfixtures.TestFixturesPlugin
|
|
|
|
apply plugin: 'elasticsearch.standalone-rest-test'
|
|
apply plugin: 'elasticsearch.test.fixtures'
|
|
|
|
configurations {
|
|
dockerPlugins
|
|
dockerSource
|
|
ossDockerSource
|
|
restSpec
|
|
}
|
|
|
|
dependencies {
|
|
dockerSource project(path: ":distribution:archives:linux-tar")
|
|
ossDockerSource project(path: ":distribution:archives:oss-linux-tar")
|
|
restSpec project(':rest-api-spec')
|
|
}
|
|
|
|
ext.expansions = { oss, local ->
|
|
final String classifier = 'linux-x86_64'
|
|
final String elasticsearch = oss ? "elasticsearch-oss-${VersionProperties.elasticsearch}-${classifier}.tar.gz" : "elasticsearch-${VersionProperties.elasticsearch}-${classifier}.tar.gz"
|
|
return [
|
|
'build_date' : project.ext.buildDate,
|
|
'elasticsearch' : elasticsearch,
|
|
'git_revision' : project.ext.gitRevision,
|
|
'license' : oss ? 'Apache-2.0' : 'Elastic-License',
|
|
'source_elasticsearch': local ? "COPY $elasticsearch /opt/" : "RUN cd /opt && curl --retry 8 -s -L -O https://artifacts.elastic.co/downloads/elasticsearch/${elasticsearch} && cd -",
|
|
'version' : VersionProperties.elasticsearch
|
|
]
|
|
}
|
|
|
|
private static String files(final boolean oss) {
|
|
return "build/${ oss ? 'oss-' : ''}docker"
|
|
}
|
|
|
|
private static String taskName(final String prefix, final boolean oss, final String suffix) {
|
|
return "${prefix}${oss ? 'Oss' : ''}${suffix}"
|
|
}
|
|
|
|
project.ext {
|
|
dockerBuildContext = { boolean oss, boolean local ->
|
|
copySpec {
|
|
into('bin') {
|
|
from project.projectDir.toPath().resolve("src/docker/bin")
|
|
}
|
|
|
|
into('config') {
|
|
/*
|
|
* Oss and default distribution can have different configuration, therefore we want to allow overriding the default configuration
|
|
* by creating config files in oss or default build-context sub-modules.
|
|
*/
|
|
from project.projectDir.toPath().resolve("src/docker/config")
|
|
from project.projectDir.toPath().resolve(oss ? "oss-docker-build-context" : "docker-build-context").resolve("src/docker/config")
|
|
}
|
|
|
|
from(project.projectDir.toPath().resolve("src/docker/Dockerfile")) {
|
|
expand(expansions(oss, local))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void addCopyDockerContextTask(final boolean oss) {
|
|
task(taskName("copy", oss, "DockerContext"), type: Sync) {
|
|
expansions(oss, true).each { k, v ->
|
|
inputs.property(k, { v.toString() })
|
|
}
|
|
into files(oss)
|
|
|
|
with dockerBuildContext(oss, true)
|
|
|
|
if (oss) {
|
|
from configurations.ossDockerSource
|
|
} else {
|
|
from configurations.dockerSource
|
|
}
|
|
|
|
from configurations.dockerPlugins
|
|
}
|
|
}
|
|
|
|
def createAndSetWritable (Object... locations) {
|
|
locations.each { location ->
|
|
File file = file(location)
|
|
file.mkdirs()
|
|
file.setWritable(true, false)
|
|
}
|
|
}
|
|
|
|
task copyKeystore(type: Sync) {
|
|
from project(':x-pack:plugin:core')
|
|
.file('src/test/resources/org/elasticsearch/xpack/security/transport/ssl/certs/simple/testnode.jks')
|
|
into "${buildDir}/certs"
|
|
doLast {
|
|
file("${buildDir}/certs").setReadable(true, false)
|
|
file("${buildDir}/certs/testnode.jks").setReadable(true, false)
|
|
}
|
|
}
|
|
|
|
preProcessFixture {
|
|
if (TestFixturesPlugin.dockerComposeSupported()) {
|
|
dependsOn assemble
|
|
}
|
|
dependsOn copyKeystore
|
|
doLast {
|
|
// tests expect to have an empty repo
|
|
project.delete(
|
|
"${buildDir}/repo",
|
|
"${buildDir}/oss-repo"
|
|
)
|
|
createAndSetWritable(
|
|
"${buildDir}/repo",
|
|
"${buildDir}/oss-repo",
|
|
"${buildDir}/logs/default-1",
|
|
"${buildDir}/logs/default-2",
|
|
"${buildDir}/logs/oss-1",
|
|
"${buildDir}/logs/oss-2"
|
|
)
|
|
}
|
|
}
|
|
|
|
processTestResources {
|
|
from ({ zipTree(configurations.restSpec.singleFile) }) {
|
|
include 'rest-api-spec/api/**'
|
|
}
|
|
from project(':x-pack:plugin:core')
|
|
.file('src/test/resources/org/elasticsearch/xpack/security/transport/ssl/certs/simple/testnode.jks')
|
|
dependsOn configurations.restSpec
|
|
}
|
|
|
|
task integTest(type: Test) {
|
|
maxParallelForks = '1'
|
|
include '**/*IT.class'
|
|
// don't add the tasks to build the docker images if we have no way of testing them
|
|
if (TestFixturesPlugin.dockerComposeSupported()) {
|
|
dependsOn assemble
|
|
}
|
|
}
|
|
|
|
check.dependsOn integTest
|
|
|
|
void addBuildDockerImage(final boolean oss) {
|
|
final Task buildDockerImageTask = task(taskName("build", oss, "DockerImage"), type: LoggedExec) {
|
|
dependsOn taskName("copy", oss, "DockerContext")
|
|
List<String> tags
|
|
if (oss) {
|
|
tags = [
|
|
"docker.elastic.co/elasticsearch/elasticsearch-oss:${VersionProperties.elasticsearch}",
|
|
"elasticsearch-oss:test"
|
|
]
|
|
} else {
|
|
tags = [
|
|
"elasticsearch:${VersionProperties.elasticsearch}",
|
|
"docker.elastic.co/elasticsearch/elasticsearch:${VersionProperties.elasticsearch}",
|
|
"docker.elastic.co/elasticsearch/elasticsearch-full:${VersionProperties.elasticsearch}",
|
|
"elasticsearch:test",
|
|
]
|
|
}
|
|
executable 'docker'
|
|
final List<String> dockerArgs = ['build', files(oss), '--pull', '--no-cache']
|
|
for (final String tag : tags) {
|
|
dockerArgs.add('--tag')
|
|
dockerArgs.add(tag)
|
|
}
|
|
args dockerArgs.toArray()
|
|
}
|
|
BuildPlugin.requireDocker(buildDockerImageTask)
|
|
}
|
|
|
|
for (final boolean oss : [false, true]) {
|
|
addCopyDockerContextTask(oss)
|
|
addBuildDockerImage(oss)
|
|
}
|
|
|
|
assemble.dependsOn "buildOssDockerImage"
|
|
assemble.dependsOn "buildDockerImage"
|
|
|
|
// We build the images used in compose locally, but the pull command insists on using a repository
|
|
// thus we must disable it to prevent it from doing so.
|
|
// Everything will still be pulled since we will build the local images on a pull
|
|
if (tasks.findByName("composePull")) {
|
|
tasks.composePull.enabled = false
|
|
}
|