diff --git a/java/images.yml b/java/images.yml index ad00d689..e03a99a2 100644 --- a/java/images.yml +++ b/java/images.yml @@ -8,6 +8,7 @@ fish-pepper: config: base: jboss: + withGradle: true from: "jboss/base-jdk:8" user: "jboss" home: "/opt/jboss" @@ -18,6 +19,7 @@ config: jolokia: "1.5.0" jmxexporter: "0.1.0" rhel: + withGradle: false from: "jboss/openjdk18-rhel7:1.1-7" user: "jboss" home: "/home/jboss" diff --git a/java/images/jboss/s2i/assemble b/java/images/jboss/s2i/assemble index 27c4afe6..75f3c325 100644 --- a/java/images/jboss/s2i/assemble +++ b/java/images/jboss/s2i/assemble @@ -17,7 +17,7 @@ function check_error() { fi } -function get_output_dir() { +function get_maven_output_dir() { local dir="" # If multi module build and no ARTIFACT_DIR is set --> error @@ -74,7 +74,6 @@ function copy_artifacts() { } function setup_maven() { - if [ -n "$HTTP_PROXY_HOST" -a -n "$HTTP_PROXY_PORT" ]; then xml="\ genproxy\ @@ -131,7 +130,6 @@ function build_maven() { fi echo "Found pom.xml ... " - echo "Running 'mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND}'" local old_dir=$(pwd) cd ${S2I_SOURCE_DIR} @@ -139,6 +137,7 @@ function build_maven() { # ========= # Run Maven + echo "Running 'mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND}'" mvn ${maven_env_args} --version mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND} check_error "Maven build" $? @@ -160,14 +159,83 @@ function build_maven() { cd ${old_dir} } + +# ========================================================================= +# Gradle support + +function get_gradle_output_dir() { + local dir="" + + # If multi module build and no ARTIFACT_DIR is set --> error + if [ x"${ARTIFACT_DIR}" = x ]; then + dir="${S2I_SOURCE_DIR}/build/libs" + else + if [ "${ARTIFACT_DIR:0:1}" = "/" ]; then + echo "ARTIFACT_DIR \"${ARTIFACT_DIR}\" must not be absolute but relative to the source directory" + exit 1 + fi + dir="${S2I_SOURCE_DIR}/${ARTIFACT_DIR}" + fi + + echo ${dir} +} + +function build_gradle() { + # Where artifacts are created during build + local build_dir=$1 + + # Where to put the artifacts + local app_dir=$2 + + # Default args + local gradle_args=${GRADLE_ARGS:-build -x test} + + # If there is no user provided GRADLE_OPTS, use options from run-java.sh + if [ -f ${RUN_JAVA_DIR}/run-java.sh -a -z "${GRADLE_OPTS}" ]; then + export GRADLE_OPTS=$(${RUN_JAVA_DIR}/run-java.sh options) + fi + + if [ ! -z "${GRADLE_OPTS}" ]; then + echo "Using GRADLE_OPTS '${GRADLE_OPTS}'" + fi + + local old_dir=$(pwd) + cd ${S2I_SOURCE_DIR} + check_error "changing directory to ${S2I_SOURCE_DIR}" $? + + # ========= + # Run Gradle + echo "Running './gradlew ${gradle_args} ${GRADLE_ARGS_APPEND}'" + ./gradlew ${gradle_args} ${GRADLE_ARGS_APPEND} + check_error "Gradle build" $? + + # ============== + # Copy artifacts + echo "Copying Gradle artifacts from ${build_dir} to ${app_dir} ..." + copy_artifacts ${build_dir} ${app_dir} + check_error "copying artifacts from ${build_dir} to ${app_dir}" $? + + # ====================== + # Remove repo if desired + if [ "x${GRADLE_CLEAR_REPO}" != "x" ]; then + rm -rf "${S2I_ARTIFACTS_DIR}/gradle" + check_error "Cannot remove local Gradle repository ${S2I_ARTIFACTS_DIR}/gradle" $? + fi + + cd ${old_dir} +} + + + # ========================================================================= # Main echo "==================================================================" echo "Starting S2I Java Build ....." +mkdir -p ${DEPLOYMENTS_DIR} if [ -f "${S2I_SOURCE_DIR}/pom.xml" ]; then echo "S2I source build for Maven detected" - build_dir=$(get_output_dir) + build_dir=$(get_maven_output_dir) check_error "Cannot get output dir: $build_dir" $? # If a pom.xml is present use maven setup_maven @@ -188,6 +256,13 @@ elif [ -f "${S2I_SOURCE_DIR}/Dockerfile" ]; then echo "Copying binaries from ${binary_dir} to ${DEPLOYMENTS_DIR} ..." copy_dir ${binary_dir} ${DEPLOYMENTS_DIR} check_error "copying ${binary_dir} to ${DEPLOYMENTS_DIR}" $? + +elif ls ${S2I_SOURCE_DIR}/*.gradle* &> /dev/null; then + echo "S2I source build for Gradle detected, due to presence of a *.gradle* in ${S2I_SOURCE_DIR}" + build_dir=$(get_gradle_output_dir) + check_error "Cannot get output dir: $build_dir" $? + build_gradle ${build_dir} ${DEPLOYMENTS_DIR} + else echo "S2I source build with plain binaries detected" if [ -d "${S2I_SOURCE_DIR}/deployments" ]; then diff --git a/java/images/jboss/s2i/s2i-setup b/java/images/jboss/s2i/s2i-setup index c3b675c3..fef03cb2 100644 --- a/java/images/jboss/s2i/s2i-setup +++ b/java/images/jboss/s2i/s2i-setup @@ -2,5 +2,5 @@ S2I_DESTINATION=${S2I_DESTINATION:-/tmp} S2I_SOURCE_DIR="${S2I_DESTINATION}/src" S2I_ARTIFACTS_DIR="${S2I_DESTINATION}/artifacts" -DEPLOYMENTS_DIR="/deployments" +DEPLOYMENTS_DIR="${DEPLOYMENTS_DIR:-/deployments}" RUN_JAVA_DIR=/opt/run-java diff --git a/java/images/rhel/s2i/assemble b/java/images/rhel/s2i/assemble index 27c4afe6..4738d822 100644 --- a/java/images/rhel/s2i/assemble +++ b/java/images/rhel/s2i/assemble @@ -17,7 +17,7 @@ function check_error() { fi } -function get_output_dir() { +function get_maven_output_dir() { local dir="" # If multi module build and no ARTIFACT_DIR is set --> error @@ -74,7 +74,6 @@ function copy_artifacts() { } function setup_maven() { - if [ -n "$HTTP_PROXY_HOST" -a -n "$HTTP_PROXY_PORT" ]; then xml="\ genproxy\ @@ -131,7 +130,6 @@ function build_maven() { fi echo "Found pom.xml ... " - echo "Running 'mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND}'" local old_dir=$(pwd) cd ${S2I_SOURCE_DIR} @@ -139,6 +137,7 @@ function build_maven() { # ========= # Run Maven + echo "Running 'mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND}'" mvn ${maven_env_args} --version mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND} check_error "Maven build" $? @@ -160,14 +159,18 @@ function build_maven() { cd ${old_dir} } + + + # ========================================================================= # Main echo "==================================================================" echo "Starting S2I Java Build ....." +mkdir -p ${DEPLOYMENTS_DIR} if [ -f "${S2I_SOURCE_DIR}/pom.xml" ]; then echo "S2I source build for Maven detected" - build_dir=$(get_output_dir) + build_dir=$(get_maven_output_dir) check_error "Cannot get output dir: $build_dir" $? # If a pom.xml is present use maven setup_maven @@ -188,6 +191,7 @@ elif [ -f "${S2I_SOURCE_DIR}/Dockerfile" ]; then echo "Copying binaries from ${binary_dir} to ${DEPLOYMENTS_DIR} ..." copy_dir ${binary_dir} ${DEPLOYMENTS_DIR} check_error "copying ${binary_dir} to ${DEPLOYMENTS_DIR}" $? + else echo "S2I source build with plain binaries detected" if [ -d "${S2I_SOURCE_DIR}/deployments" ]; then diff --git a/java/images/rhel/s2i/s2i-setup b/java/images/rhel/s2i/s2i-setup index c3b675c3..fef03cb2 100644 --- a/java/images/rhel/s2i/s2i-setup +++ b/java/images/rhel/s2i/s2i-setup @@ -2,5 +2,5 @@ S2I_DESTINATION=${S2I_DESTINATION:-/tmp} S2I_SOURCE_DIR="${S2I_DESTINATION}/src" S2I_ARTIFACTS_DIR="${S2I_DESTINATION}/artifacts" -DEPLOYMENTS_DIR="/deployments" +DEPLOYMENTS_DIR="${DEPLOYMENTS_DIR:-/deployments}" RUN_JAVA_DIR=/opt/run-java diff --git a/java/templates/s2i/assemble b/java/templates/s2i/assemble index 27c4afe6..d4431f81 100755 --- a/java/templates/s2i/assemble +++ b/java/templates/s2i/assemble @@ -17,7 +17,7 @@ function check_error() { fi } -function get_output_dir() { +function get_maven_output_dir() { local dir="" # If multi module build and no ARTIFACT_DIR is set --> error @@ -74,7 +74,6 @@ function copy_artifacts() { } function setup_maven() { - if [ -n "$HTTP_PROXY_HOST" -a -n "$HTTP_PROXY_PORT" ]; then xml="\ genproxy\ @@ -131,7 +130,6 @@ function build_maven() { fi echo "Found pom.xml ... " - echo "Running 'mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND}'" local old_dir=$(pwd) cd ${S2I_SOURCE_DIR} @@ -139,6 +137,7 @@ function build_maven() { # ========= # Run Maven + echo "Running 'mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND}'" mvn ${maven_env_args} --version mvn ${maven_env_args} ${maven_args} ${MAVEN_ARGS_APPEND} check_error "Maven build" $? @@ -160,14 +159,83 @@ function build_maven() { cd ${old_dir} } +{{? fp.config.base.withGradle }} +# ========================================================================= +# Gradle support + +function get_gradle_output_dir() { + local dir="" + + # If multi module build and no ARTIFACT_DIR is set --> error + if [ x"${ARTIFACT_DIR}" = x ]; then + dir="${S2I_SOURCE_DIR}/build/libs" + else + if [ "${ARTIFACT_DIR:0:1}" = "/" ]; then + echo "ARTIFACT_DIR \"${ARTIFACT_DIR}\" must not be absolute but relative to the source directory" + exit 1 + fi + dir="${S2I_SOURCE_DIR}/${ARTIFACT_DIR}" + fi + + echo ${dir} +} + +function build_gradle() { + # Where artifacts are created during build + local build_dir=$1 + + # Where to put the artifacts + local app_dir=$2 + + # Default args + local gradle_args=${GRADLE_ARGS:-build -x test} + + # If there is no user provided GRADLE_OPTS, use options from run-java.sh + if [ -f ${RUN_JAVA_DIR}/run-java.sh -a -z "${GRADLE_OPTS}" ]; then + export GRADLE_OPTS=$(${RUN_JAVA_DIR}/run-java.sh options) + fi + + if [ ! -z "${GRADLE_OPTS}" ]; then + echo "Using GRADLE_OPTS '${GRADLE_OPTS}'" + fi + + local old_dir=$(pwd) + cd ${S2I_SOURCE_DIR} + check_error "changing directory to ${S2I_SOURCE_DIR}" $? + + # ========= + # Run Gradle + echo "Running './gradlew ${gradle_args} ${GRADLE_ARGS_APPEND}'" + ./gradlew ${gradle_args} ${GRADLE_ARGS_APPEND} + check_error "Gradle build" $? + + # ============== + # Copy artifacts + echo "Copying Gradle artifacts from ${build_dir} to ${app_dir} ..." + copy_artifacts ${build_dir} ${app_dir} + check_error "copying artifacts from ${build_dir} to ${app_dir}" $? + + # ====================== + # Remove repo if desired + if [ "x${GRADLE_CLEAR_REPO}" != "x" ]; then + rm -rf "${S2I_ARTIFACTS_DIR}/gradle" + check_error "Cannot remove local Gradle repository ${S2I_ARTIFACTS_DIR}/gradle" $? + fi + + cd ${old_dir} +} +{{?}} + + # ========================================================================= # Main echo "==================================================================" echo "Starting S2I Java Build ....." +mkdir -p ${DEPLOYMENTS_DIR} if [ -f "${S2I_SOURCE_DIR}/pom.xml" ]; then echo "S2I source build for Maven detected" - build_dir=$(get_output_dir) + build_dir=$(get_maven_output_dir) check_error "Cannot get output dir: $build_dir" $? # If a pom.xml is present use maven setup_maven @@ -188,6 +256,13 @@ elif [ -f "${S2I_SOURCE_DIR}/Dockerfile" ]; then echo "Copying binaries from ${binary_dir} to ${DEPLOYMENTS_DIR} ..." copy_dir ${binary_dir} ${DEPLOYMENTS_DIR} check_error "copying ${binary_dir} to ${DEPLOYMENTS_DIR}" $? +{{? fp.config.base.withGradle }} +elif ls ${S2I_SOURCE_DIR}/*.gradle* &> /dev/null; then + echo "S2I source build for Gradle detected, due to presence of a *.gradle* in ${S2I_SOURCE_DIR}" + build_dir=$(get_gradle_output_dir) + check_error "Cannot get output dir: $build_dir" $? + build_gradle ${build_dir} ${DEPLOYMENTS_DIR} +{{?}} else echo "S2I source build with plain binaries detected" if [ -d "${S2I_SOURCE_DIR}/deployments" ]; then diff --git a/java/templates/s2i/s2i-setup b/java/templates/s2i/s2i-setup index c3b675c3..fef03cb2 100644 --- a/java/templates/s2i/s2i-setup +++ b/java/templates/s2i/s2i-setup @@ -2,5 +2,5 @@ S2I_DESTINATION=${S2I_DESTINATION:-/tmp} S2I_SOURCE_DIR="${S2I_DESTINATION}/src" S2I_ARTIFACTS_DIR="${S2I_DESTINATION}/artifacts" -DEPLOYMENTS_DIR="/deployments" +DEPLOYMENTS_DIR="${DEPLOYMENTS_DIR:-/deployments}" RUN_JAVA_DIR=/opt/run-java