blob: ebdc673ef41ba690efe5e0f64ee9251fef9698ea [file] [log] [blame]
/*
* 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.
*/
import CommonJobProperties as common
import CommonTestProperties.SDK
class Infrastructure {
static void prepareSDKHarness(def context, SDK sdk, String repositoryRoot, String dockerTag) {
context.steps {
String sdkName = sdk.name().toLowerCase()
String image = "${repositoryRoot}/${sdkName}"
String imageTag = "${image}:${dockerTag}"
shell("echo \"Building SDK harness for ${sdkName} SDK.\"")
gradle {
rootBuildScriptDir(common.checkoutDir)
common.setGradleSwitches(delegate)
tasks(":beam-sdks-${sdkName}-container:docker")
switches("-Pdocker-repository-root=${repositoryRoot}")
switches("-Pdocker-tag=${dockerTag}")
}
shell("echo \"Tagging Harness' image\"...")
shell("docker tag ${image} ${imageTag}")
shell("echo \"Pushing Harness' image\"...")
shell("docker push ${imageTag}")
}
}
static void prepareFlinkJobServer(def context, String flinkVersion, String repositoryRoot, String dockerTag) {
context.steps {
String image = "${repositoryRoot}/flink-job-server"
String imageTag = "${image}:${dockerTag}"
shell('echo "Building Flink job Server"')
gradle {
rootBuildScriptDir(common.checkoutDir)
common.setGradleSwitches(delegate)
tasks(":runners:flink:${flinkVersion}:job-server-container:docker")
switches("-Pdocker-repository-root=${repositoryRoot}")
switches("-Pdocker-tag=${dockerTag}")
}
shell("echo \"Tagging Flink Job Server's image\"...")
shell("docker tag ${image} ${imageTag}")
shell("echo \"Pushing Flink Job Server's image\"...")
shell("docker push ${imageTag}")
}
}
static void setupFlinkCluster(def context, String clusterNamePrefix, String flinkDownloadUrl, String imagesToPull, String jobServerImage, Integer workerCount, Integer slotsPerTaskmanager = 1) {
String gcsBucket = 'gs://beam-flink-cluster'
String clusterName = getClusterName(clusterNamePrefix)
String artifactsDir="${gcsBucket}/${clusterName}"
context.steps {
environmentVariables {
env("GCLOUD_ZONE", "us-central1-a")
env("CLUSTER_NAME", clusterName)
env("GCS_BUCKET", gcsBucket)
env("FLINK_DOWNLOAD_URL", flinkDownloadUrl)
env("FLINK_NUM_WORKERS", workerCount)
env("FLINK_TASKMANAGER_SLOTS", slotsPerTaskmanager)
env("DETACHED_MODE", 'true')
if(imagesToPull) {
env("HARNESS_IMAGES_TO_PULL", imagesToPull)
}
if(jobServerImage) {
env("JOB_SERVER_IMAGE", jobServerImage)
env("ARTIFACTS_DIR", artifactsDir)
}
}
shell('echo Setting up flink cluster')
shell("cd ${common.makePathAbsolute('src/.test-infra/dataproc/')}; ./create_flink_cluster.sh")
}
}
static void teardownDataproc(def context, String jobName) {
context.publishers {
postBuildScripts {
steps {
shell("gcloud dataproc clusters delete ${getClusterName(jobName)} --quiet")
}
onlyIfBuildSucceeds(false)
onlyIfBuildFails(false)
}
}
}
private static GString getClusterName(String jobName) {
return "${jobName.toLowerCase().replace("_", "-")}-\$BUILD_ID"
}
}