Add options to deploy Maven artifacts
authorMike Grimes <grimesmi@amazon.com>
Wed, 12 Sep 2018 04:33:17 +0000 (06:33 +0200)
committerEvans Ye <evansye@apache.org>
Sun, 16 Sep 2018 16:04:24 +0000 (00:04 +0800)
This adds options that can be passed to gradle to trigger specifically enabled builds to deploy maven artifacts, either
to their default remote repository, or to a user defined repo ID or URI:

- doMavenDeploy: flag to trigger deployment of maven artifacts
- mavenDeploySource: flag to add 'source:jars'
- mavenRepoId: repository ID, for getting credentials from Maven settings.xml
- mavenRepoUri: location of repository. Supports S3 URIs (see note)

These can all be passed to gradle using the -P flag.

S3 repo URIs are supported, via the org.springframework.build:aws-maven build extension.

Signed-off-by: Evans Ye <evansye@apache.org>
bigtop-packages/src/common/hadoop/do-component-build
bigtop-packages/src/common/hive/do-component-build
bigtop-packages/src/extensions/aws-maven.xml [new file with mode: 0644]
bigtop-packages/src/rpm/hadoop/SPECS/hadoop.spec
bigtop-packages/src/rpm/hive/SPECS/hive.spec
bigtop-packages/src/scripts/maven_deploy.sh [new file with mode: 0644]
packages.gradle

index c7d4e28..2a1a634 100644 (file)
@@ -126,7 +126,12 @@ fi
 # Build artifacts
 MAVEN_OPTS="-Dzookeeper.version=$ZOOKEEPER_VERSION"
 MAVEN_OPTS="$MAVEN_OPTS -DskipTests -DskipTest -DskipITs"
-mvn $ANT_OPTS $BUNDLE_SNAPPY -Pdist -Pnative -Psrc -Dtar ${MAVEN_OPTS} -Dtomcat.version=${BIGTOP_TOMCAT_VERSION} -Dtomcat.download.url="$BIGTOP_TOMCAT_DOWNLOAD_URL" install package "$@"
+
+# Include common Maven Deployment logic
+. $(dirname ${0})/maven_deploy.sh
+
+# Build artifacts
+mvn $ANT_OPTS $BUNDLE_SNAPPY -Pdist -Pnative -Psrc -Dtar ${MAVEN_OPTS} -Dtomcat.version=${BIGTOP_TOMCAT_VERSION} -Dtomcat.download.url="$BIGTOP_TOMCAT_DOWNLOAD_URL" install package ${EXTRA_GOALS} "$@"
 mvn site site:stage ${MAVEN_OPTS} $@
 
 (cd build ; tar --strip-components=1 -xzvf  ../hadoop-dist/target/hadoop-${HADOOP_VERSION}.tar.gz)
index 9223e8f..ea1b4d9 100644 (file)
@@ -26,8 +26,11 @@ HIVE_MAVEN_OPTS=" -Dhbase.version=$HBASE_VERSION \
 -Dspark.version=${SPARK_VERSION}
 "
 
-export MAVEN_OPTS="-Xmx1500m -Xms1500m"
-mvn ${HIVE_MAVEN_OPTS} clean install -Pdist "$@"
+# Include common Maven Deployment logic
+. $(dirname ${0})/maven_deploy.sh
+
+export MAVEN_OPTS="${MAVEN_OPTS} -Xmx1500m -Xms1500m"
+mvn ${HIVE_MAVEN_OPTS} clean install ${EXTRA_GOALS} -Pdist "$@"
 
 mkdir -p build/dist
 tar -C build/dist --strip-components=1 -xzf packaging/target/apache-hive-${HIVE_VERSION}-bin.tar.gz
diff --git a/bigtop-packages/src/extensions/aws-maven.xml b/bigtop-packages/src/extensions/aws-maven.xml
new file mode 100644 (file)
index 0000000..bf11c0f
--- /dev/null
@@ -0,0 +1,26 @@
+<!--
+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.
+-->
+
+<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
+  <!-- Repository on Amazon S3 -->
+  <extension>
+    <groupId>org.springframework.build</groupId>
+    <artifactId>aws-maven</artifactId>
+    <version>5.0.0.RELEASE</version>
+  </extension>
+</extensions>
\ No newline at end of file
index 5431570..1223dea 100644 (file)
@@ -466,7 +466,14 @@ These projects (enumerated below) allow HDFS to be mounted (on most flavors of U
 # This assumes that you installed Java JDK 6 and set JAVA_HOME
 # This assumes that you installed Forrest and set FORREST_HOME
 
-env HADOOP_VERSION=%{hadoop_base_version} HADOOP_ARCH=%{hadoop_arch} bash %{SOURCE1}
+env \
+  HADOOP_VERSION=%{hadoop_base_version} \
+  HADOOP_ARCH=%{hadoop_arch} \
+  DO_MAVEN_DEPLOY=%{?do_maven_deploy} \
+  MAVEN_DEPLOY_SOURCE=%{?maven_deploy_source} \
+  MAVEN_REPO_ID=%{?maven_repo_id} \
+  MAVEN_REPO_URI=%{?maven_repo_uri} \
+bash %{SOURCE1}
 
 %clean
 %__rm -rf $RPM_BUILD_ROOT
index cada51c..722c9e3 100644 (file)
@@ -233,6 +233,11 @@ Init scripts for WebHcat server.
 #BIGTOP_PATCH_COMMANDS
 
 %build
+env \
+  DO_MAVEN_DEPLOY=%{?do_maven_deploy} \
+  MAVEN_DEPLOY_SOURCE=%{?maven_deploy_source} \
+  MAVEN_REPO_ID=%{?maven_repo_id} \
+  MAVEN_REPO_URI=%{?maven_repo_uri} \
 bash %{SOURCE1}
 
 #########################
diff --git a/bigtop-packages/src/scripts/maven_deploy.sh b/bigtop-packages/src/scripts/maven_deploy.sh
new file mode 100644 (file)
index 0000000..35df395
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/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.
+
+if [ "${DO_MAVEN_DEPLOY}" = "true" ]; then
+
+  SCHEME=${MAVEN_REPO_URI%%:*}
+  case ${SCHEME} in
+  http | https)
+    ;;
+  s3)
+    mkdir -p ./.mvn
+    cp $(dirname ${0})/aws-maven.xml ./.mvn/extensions.xml
+    ;;
+  *)
+    echo "Unsupported URI scheme \"${SCHEME}\""
+    exit 1
+    ;;
+  esac
+
+  if [ "${MAVEN_DEPLOY_SOURCE}" = "true" ]; then
+    EXTRA_GOALS+=" source:jar"
+  fi
+  if [ ! -z "${MAVEN_REPO_URI}" ]; then
+    MAVEN_OPTS+=" -DaltDeploymentRepository=${MAVEN_REPO_ID:-default}::default::${MAVEN_REPO_URI}"
+  fi
+  EXTRA_GOALS+=" deploy"
+  # Conditionally add Maven extension for S3 URIs
+fi
\ No newline at end of file
index 140a08b..79a0d73 100644 (file)
@@ -446,6 +446,11 @@ def genTasks = { target ->
     def RELEASE_DIST = "rpmbuild --eval '%{?dist}' 2>/dev/null".execute().text.trim().replaceAll("'",'')
     def SRCRPM="$PKG_OUTPUT_DIR/$PKG_NAME-${PKG_VERSION}-$BIGTOP_BUILD_STAMP${RELEASE_DIST}.src.rpm"
 
+    def final DO_MAVEN_DEPLOY = project.findProperty('doMavenDeploy') == 'true'
+    def final MAVEN_DEPLOY_SOURCE = project.findProperty('mavenDeploySource') == 'true'
+    def final MAVEN_REPO_ID = project.hasProperty('mavenRepoId') ? project.property('mavenRepoId') : 'default'
+    def final MAVEN_REPO_URI = project.hasProperty('mavenRepoUri') ? project.property('mavenRepoUri') : null
+
     def command = [
         '--define', "_topdir $PKG_BUILD_DIR/rpm/",
         '--define', "${NAME}_base_version $BASE_VERSION",
@@ -453,7 +458,15 @@ def genTasks = { target ->
         '--define', "${NAME}_version ${PKG_VERSION}",
         '--define', "${NAME}_release ${BIGTOP_BUILD_STAMP}%{?dist}",
         '--rebuild', SRCRPM,
+        '--define', "do_maven_deploy ${DO_MAVEN_DEPLOY}",
+        '--define', "maven_deploy_source ${MAVEN_DEPLOY_SOURCE}"
     ]
+
+   if (MAVEN_REPO_URI != null) {
+      command.addAll('--define', "maven_repo_uri ${MAVEN_REPO_URI}")
+      command.addAll('--define', "maven_repo_id ${MAVEN_REPO_ID}")
+    }
+
     exec {
       workingDir BASE_DIR
       executable 'rpmbuild'
@@ -503,6 +516,16 @@ def genTasks = { target ->
       from "${BASE_DIR}/bigtop-packages/src/templates/init.d.tmpl"
       into "$PKG_BUILD_DIR/rpm/SOURCES"
     }
+    copy {
+      from "${BASE_DIR}/bigtop-packages/src/extensions"
+      into "$PKG_BUILD_DIR/rpm/SOURCES"
+      include "*"
+    }
+    copy {
+      from "${BASE_DIR}/bigtop-packages/src/scripts"
+      into "$PKG_BUILD_DIR/rpm/SOURCES"
+      include "*"
+    }
     fileTree ("$BASE_DIR/bigtop-packages/src/common/$NAME") {
       include '**/*'
     }.copy { into "$PKG_BUILD_DIR/rpm/SOURCES" }