blob: 583fb4de70f5a893111584762500172dfeb7b538 [file] [log] [blame]
#!/usr/bin/env bash
#
# 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.
#
CURRENT_DIR="$( cd "$(dirname "$0")" ; pwd -P )"
PROJECT_HOME="$( cd "$CURRENT_DIR/../" ; pwd -P )"
export PROJECT_HOME
MVN="${PROJECT_HOME}/build/mvn"
cd $CURRENT_DIR
AMORO_VERSION=`cat $PROJECT_HOME/pom.xml | grep 'amoro-parent' -C 3 | grep -Eo '<version>.*</version>' | awk -F'[><]' '{print $3}'`
FLINK_VERSION=1.20.0
SPARK_VERSION=3.3.3
DEBIAN_MIRROR=http://deb.debian.org
APACHE_ARCHIVE=https://archive.apache.org/dist
FLINK_OPTIMIZER_JOB_PATH=amoro-optimizer/amoro-optimizer-flink/target/amoro-optimizer-flink-${AMORO_VERSION}-jar-with-dependencies.jar
FLINK_OPTIMIZER_JOB=${PROJECT_HOME}/${FLINK_OPTIMIZER_JOB_PATH}
SPARK_OPTIMIZER_JOB_PATH=amoro-optimizer/amoro-optimizer-spark/target/amoro-optimizer-spark-${AMORO_VERSION}-jar-with-dependencies.jar
SPARK_OPTIMIZER_JOB=${PROJECT_HOME}/${SPARK_OPTIMIZER_JOB_PATH}
AMORO_TAG=$AMORO_VERSION
MAVEN_MIRROR=https://repo.maven.apache.org/maven2
function usage() {
cat <<EOF
Usage: $0 [options] [image]
Build for Amoro demo docker images.
Images:
amoro-flink-optimizer Build official Amoro optimizer deployed with flink engine for production environments.
amoro-spark-optimizer Build official Amoro optimizer deployed with spark engine for production environments.
amoro Build official Amoro image used for production environments.
Options:
--flink-version Flink binary release version, default is 1.20.0, format must be x.y.z
--spark-version Spark binary release version, default is 3.3.3, format must be x.y.z
--apache-archive Apache Archive url, default is https://archive.apache.org/dist
--debian-mirror Mirror url of debian, default is http://deb.debian.org
--maven-mirror Mirror url of maven, default is https://repo.maven.apache.org/maven2
--optimizer-job Location of flink/spark optimizer job
--tag Tag for amoro/amoro-flink-optimizer/amoro-spark-optimizer image.
--dry-run If this set to true, will not call 'docker build'
EOF
}
ACTION=help
i=1;
j=$#;
while [ $i -le $j ]; do
case $1 in
amoro-flink-optimizer|amoro-spark-optimizer|amoro)
ACTION=$1;
i=$((i+1))
shift 1
;;
'--flink-version')
shift 1
FLINK_VERSION=$1
i=$((i+2))
shift 1
;;
'--spark-version')
shift 1
SPARK_VERSION=$1
i=$((i+2))
shift 1
;;
"--apache-archive")
shift 1
APACHE_ARCHIVE=$1
i=$((i+2))
shift 1
;;
"--debian-mirror")
shift 1
DEBIAN_MIRROR=$1
i=$((i+2))
shift 1
;;
"--optimizer-job")
shift 1
OPTIMIZER_JOB=$1
i=$((i+2))
shift 1
;;
"--tag")
shift 1
AMORO_TAG=$1
i=$((i+2))
shift 1
;;
"--maven-mirror")
shift 1
MAVEN_MIRROR=$1
i=$((i+2))
shift 1
;;
*)
echo "Unknown args of $1"
usage
exit 1
;;
esac
done
FLINK_MAJOR_VERSION=${FLINK_VERSION%.*}
SPARK_MAJOR_VERSION=${SPARK_VERSION%.*}
function print_env() {
echo "SET FLINK_VERSION=${FLINK_VERSION}"
echo "SET FLINK_MAJOR_VERSION=${FLINK_MAJOR_VERSION}"
echo "SET SPARK_VERSION=${SPARK_VERSION}"
echo "SET SPARK_MAJOR_VERSION=${SPARK_MAJOR_VERSION}"
echo "SET APACHE_ARCHIVE=${APACHE_ARCHIVE}"
echo "SET DEBIAN_MIRROR=${DEBIAN_MIRROR}"
echo "SET AMORO_VERSION=${AMORO_VERSION}"
echo "SET AMORO_TAG=${AMORO_TAG}"
}
# print_image $IMAGE_NAME $TAG
function print_image() {
local image=$1
local tag=$2
echo "=============================================="
echo " $image:$tag "
echo "=============================================="
echo "Start Build ${image}:${tag} Image"
}
function build_optimizer_flink() {
local IMAGE_REF=apache/amoro-flink-optimizer
local IMAGE_TAG=$AMORO_TAG-flink${FLINK_MAJOR_VERSION}
print_image $IMAGE_REF $IMAGE_TAG
OPTIMIZER_JOB=${FLINK_OPTIMIZER_JOB}
if [ ! -f "${OPTIMIZER_JOB}" ]; then
BUILD_CMD="$MVN clean package -pl amoro-optimizer/amoro-optimizer-flink -am -e -DskipTests"
echo "flink optimizer job not exists in ${OPTIMIZER_JOB}"
echo "please check the file or run '${BUILD_CMD}' first. "
exit 1
fi
set -x
cd "$PROJECT_HOME" || exit
docker build -t ${IMAGE_REF}:${IMAGE_TAG} \
--build-arg FLINK_VERSION=$FLINK_VERSION \
--build-arg OPTIMIZER_JOB=$FLINK_OPTIMIZER_JOB_PATH \
--build-arg MAVEN_MIRROR=$MAVEN_MIRROR \
-f ./docker/optimizer-flink/Dockerfile .
}
function build_optimizer_spark() {
local IMAGE_REF=apache/amoro-spark-optimizer
local IMAGE_TAG=$AMORO_TAG-spark${SPARK_MAJOR_VERSION}
print_image $IMAGE_REF $IMAGE_TAG
OPTIMIZER_JOB=${SPARK_OPTIMIZER_JOB}
if [ ! -f "${OPTIMIZER_JOB}" ]; then
BUILD_CMD="$MVN clean package -pl amoro-optimizer/amoro-optimizer-spark -am -e -DskipTests"
echo "spark optimizer job not exists in ${OPTIMIZER_JOB}"
echo "please check the file or run '${BUILD_CMD}' first. "
exit 1
fi
set -x
cd "$PROJECT_HOME" || exit
docker build -t ${IMAGE_REF}:${IMAGE_TAG} \
--build-arg SPARK_VERSION=$SPARK_VERSION \
--build-arg OPTIMIZER_JOB=$SPARK_OPTIMIZER_JOB_PATH \
--build-arg MAVEN_MIRROR=$MAVEN_MIRROR \
-f ./docker/optimizer-spark/Dockerfile .
}
function build_amoro() {
local IMAGE_REF=apache/amoro
local IMAGE_TAG=$AMORO_TAG
print_image $IMAGE_REF $IMAGE_TAG
local DIST_FILE=${PROJECT_HOME}/dist/target/apache-amoro-${AMORO_VERSION}-bin.tar.gz
if [ ! -f "${DIST_FILE}" ]; then
local BUILD_CMD="$MVN clean package -am -e -pl dist -DskipTests "
echo "Amoro dist package is not exists in ${DIST_FILE}"
echo "please check file or run '$BUILD_CMD' first"
exit 1
fi
set -x
cd "$PROJECT_HOME" || exit
docker build -t ${IMAGE_REF}:${IMAGE_TAG} \
--build-arg MAVEN_MIRROR=$MAVEN_MIRROR \
-f docker/amoro/Dockerfile .
return $?
}
case "$ACTION" in
amoro-flink-optimizer)
print_env
build_optimizer_flink
;;
amoro-spark-optimizer)
print_env
build_optimizer_spark
;;
amoro)
print_env
build_amoro
;;
*)
echo "Unknown image type: $ACTION"
exit 1
;;
esac