This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch branch-2.6
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.6 by this push:
new 0e401c372d5 Revert "HBASE-29930 Separate packaging and integration
check in nightly job to new jenkins job"
0e401c372d5 is described below
commit 0e401c372d529a933ba29da251e091520951da72
Author: Duo Zhang <[email protected]>
AuthorDate: Mon Mar 2 09:27:26 2026 +0800
Revert "HBASE-29930 Separate packaging and integration check in nightly job
to new jenkins job"
This reverts commit 5f9b458ce01dc8e330573a7d98b45dc4d1289a14.
---
dev-support/Jenkinsfile | 223 ++++++++++++
...sh => hbase_nightly_pseudo-distributed-test.sh} | 10 +-
...rtifact.sh => hbase_nightly_source-artifact.sh} | 12 +-
.../integration-test/integration-test.Jenkinsfile | 395 ---------------------
.../{integration-test => }/patch-hadoop3.sh | 2 +-
5 files changed, 233 insertions(+), 409 deletions(-)
diff --git a/dev-support/Jenkinsfile b/dev-support/Jenkinsfile
index 023d72cc79a..c550272cc3f 100644
--- a/dev-support/Jenkinsfile
+++ b/dev-support/Jenkinsfile
@@ -899,6 +899,224 @@ pipeline {
} //script
} //steps
} //stage ('yetus jdk17 hadoop3 backwards compatibility checks')
+
+ // This is meant to mimic what a release manager will do to create RCs.
+ // See http://hbase.apache.org/book.html#maven.release
+ // TODO (HBASE-23870): replace this with invocation of the release tool
+ stage ('packaging and integration') {
+ agent {
+ node {
+ label 'hbase'
+ }
+ }
+ environment {
+ BASEDIR = "${env.WORKSPACE}/component"
+ BRANCH = "${env.BRANCH_NAME}"
+ }
+ steps {
+ dir('component') {
+ checkout scm
+ }
+ sh '''#!/bin/bash -e
+ echo "Setting up directories"
+ rm -rf "output-srctarball" && mkdir "output-srctarball"
+ rm -rf "output-integration" && mkdir "output-integration"
"output-integration/hadoop-2" "output-integration/hadoop-3"
"output-integration/hadoop-3-shaded"
+ rm -rf "unpacked_src_tarball" && mkdir "unpacked_src_tarball"
+ rm -rf "hbase-install" && mkdir "hbase-install"
+ rm -rf "hbase-client" && mkdir "hbase-client"
+ rm -rf "hbase-hadoop3-install"
+ rm -rf "hbase-hadoop3-client"
+ rm -rf "hadoop-2" && mkdir "hadoop-2"
+ rm -rf "hadoop-3" && mkdir "hadoop-3"
+ rm -rf ".m2-for-repo" && mkdir ".m2-for-repo"
+ rm -rf ".m2-for-src" && mkdir ".m2-for-src"
+ # remove old hadoop tarballs in workspace
+ rm -rf hadoop-2*.tar.gz
+ rm -rf hadoop-3*.tar.gz
+ rm -f "output-integration/commentfile"
+ '''
+ sh '''#!/usr/bin/env bash
+ set -e
+ rm -rf "output-srctarball/machine" && mkdir
"output-srctarball/machine"
+ "${BASEDIR}/dev-support/gather_machine_environment.sh"
"output-srctarball/machine"
+ echo "got the following saved stats in
'output-srctarball/machine'"
+ ls -lh "output-srctarball/machine"
+ '''
+ sh '''#!/bin/bash -e
+ echo "Checking the steps for an RM to make a source artifact,
then a binary artifact."
+ docker build -t hbase-integration-test -f
"${BASEDIR}/dev-support/docker/Dockerfile" .
+ docker run --rm -v "${WORKSPACE}":/hbase -v
/etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \
+ -u `id -u`:`id -g` -e JAVA_HOME="/usr/lib/jvm/java-17"
--workdir=/hbase hbase-integration-test \
+ "component/dev-support/hbase_nightly_source-artifact.sh" \
+ --intermediate-file-dir output-srctarball \
+ --unpack-temp-dir unpacked_src_tarball \
+ --maven-m2-initial .m2-for-repo \
+ --maven-m2-src-build .m2-for-src \
+ --clean-source-checkout \
+ component
+ if [ $? -eq 0 ]; then
+ echo '(/) {color:green}+1 source release artifact{color}\n--
See build output for details.' >output-srctarball/commentfile
+ else
+ echo '(x) {color:red}-1 source release artifact{color}\n-- See
build output for details.' >output-srctarball/commentfile
+ exit 1
+ fi
+ '''
+ echo "unpacking the hbase bin tarball into 'hbase-install' and the
client tarball into 'hbase-client'"
+ sh '''#!/bin/bash -e
+ if [ 2 -ne $(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-bin.tar.gz |
grep -v hadoop3 | wc -l) ]; then
+ echo '(x) {color:red}-1 testing binary artifact{color}\n--
source tarball did not produce the expected binaries.'
>>output-srctarball/commentfile
+ exit 1
+ fi
+ install_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-bin.tar.gz |
grep -v client-bin | grep -v hadoop3)
+ tar --strip-component=1 -xzf "${install_artifact}" -C
"hbase-install"
+ client_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-client-bin.tar.gz
| grep -v hadoop3)
+ tar --strip-component=1 -xzf "${client_artifact}" -C
"hbase-client"
+ if [ 2 -eq $(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-hadoop3-*-bin.tar.gz
| wc -l) ]; then
+ echo "hadoop3 artifacts available, unpacking the hbase hadoop3
bin tarball into 'hbase-hadoop3-install' and the client hadoop3 tarball into
'hbase-hadoop3-client'"
+ mkdir hbase-hadoop3-install
+ mkdir hbase-hadoop3-client
+ hadoop3_install_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-hadoop3-*-bin.tar.gz
| grep -v client-bin)
+ tar --strip-component=1 -xzf "${hadoop3_install_artifact}" -C
"hbase-hadoop3-install"
+ hadoop3_client_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-hadoop3-*-client-bin.tar.gz)
+ tar --strip-component=1 -xzf "${hadoop3_client_artifact}" -C
"hbase-hadoop3-client"
+ fi
+ '''
+ unstash 'hadoop-2'
+ sh '''#!/bin/bash -xe
+ if [[ "${BRANCH}" == *"branch-2"* ]]; then
+ echo "Attempting to use run an instance on top of Hadoop 2."
+ artifact=$(ls -1 "${WORKSPACE}"/hadoop-2*.tar.gz | head -n 1)
+ tar --strip-components=1 -xzf "${artifact}" -C "hadoop-2"
+ docker build -t hbase-integration-test -f
"${BASEDIR}/dev-support/docker/Dockerfile" .
+ docker run --rm -v "${WORKSPACE}":/hbase -v
/etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \
+ -u `id -u`:`id -g` -e JAVA_HOME="/usr/lib/jvm/java-8"
--workdir=/hbase hbase-integration-test \
+
component/dev-support/hbase_nightly_pseudo-distributed-test.sh \
+ --single-process \
+ --working-dir output-integration/hadoop-2 \
+ --hbase-client-install "hbase-client" \
+ hbase-install \
+ hadoop-2/bin/hadoop \
+ hadoop-2/share/hadoop/yarn/timelineservice \
+
hadoop-2/share/hadoop/yarn/test/hadoop-yarn-server-tests-*-tests.jar \
+
hadoop-2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar \
+ hadoop-2/bin/mapred \
+ >output-integration/hadoop-2.log 2>&1
+ if [ $? -ne 0 ]; then
+ echo "(x) {color:red}-1 client integration
test{color}\n--Failed when running client tests on top of Hadoop 2. [see log
for details|${BUILD_URL}/artifact/output-integration/hadoop-2.log]. (note that
this means we didn't run on Hadoop 3)" >output-integration/commentfile
+ exit 2
+ fi
+ echo "(/) {color:green}+1 client integration test for HBase 2
{color}" >output-integration/commentfile
+ else
+ echo "Skipping to run against Hadoop 2 for branch ${BRANCH}"
+ fi
+ '''
+ script {
+ for (hadoop3_version in hadoop3_versions) {
+ env.HADOOP3_VERSION = hadoop3_version;
+ echo "env.HADOOP3_VERSION" + env.hadoop3_version;
+ stage ("packaging and integration Hadoop 3 inner stage ") {
+ unstash "hadoop-" + env.HADOOP3_VERSION
+ sh '''#!/bin/bash -e
+ echo "Attempting to use run an instance on top of Hadoop
${HADOOP3_VERSION}."
+ # Clean up any previous tested Hadoop3 files before
unpacking the current one
+ rm -rf hadoop-3/*
+ # Create working dir
+ rm -rf "output-integration/hadoop-${HADOOP3_VERSION}" &&
mkdir "output-integration/hadoop-${HADOOP3_VERSION}"
+ rm -rf
"output-integration/hadoop-${HADOOP3_VERSION}-shaded" && mkdir
"output-integration/hadoop-${HADOOP3_VERSION}-shaded"
+ artifact=$(ls -1
"${WORKSPACE}"/hadoop-${HADOOP3_VERSION}-bin.tar.gz | head -n 1)
+ tar --strip-components=1 -xzf "${artifact}" -C "hadoop-3"
+ # we need to patch some files otherwise minicluster will
fail to start, see MAPREDUCE-7471
+ ${BASEDIR}/dev-support/patch-hadoop3.sh hadoop-3
+ hbase_install_dir="hbase-install"
+ hbase_client_dir="hbase-client"
+ if [ -d "hbase-hadoop3-install" ]; then
+ echo "run hadoop3 client integration test against hbase
hadoop3 binaries"
+ hbase_install_dir="hbase-hadoop3-install"
+ hbase_client_dir="hbase-hadoop3-client"
+ fi
+ docker build -t hbase-integration-test -f
"${BASEDIR}/dev-support/docker/Dockerfile" .
+ docker run --rm -v "${WORKSPACE}":/hbase -v
/etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \
+ -u `id -u`:`id -g` -e JAVA_HOME="/usr/lib/jvm/java-17"
\
+ -e HADOOP_OPTS="--add-opens
java.base/java.lang=ALL-UNNAMED" \
+ --workdir=/hbase hbase-integration-test \
+
component/dev-support/hbase_nightly_pseudo-distributed-test.sh \
+ --single-process \
+ --working-dir
output-integration/hadoop-${HADOOP3_VERSION} \
+ --hbase-client-install ${hbase_client_dir} \
+ ${hbase_install_dir} \
+ hadoop-3/bin/hadoop \
+ hadoop-3/share/hadoop/yarn/timelineservice \
+
hadoop-3/share/hadoop/yarn/test/hadoop-yarn-server-tests-*-tests.jar \
+
hadoop-3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar \
+ hadoop-3/bin/mapred \
+ >output-integration/hadoop-${HADOOP3_VERSION}.log 2>&1
+ if [ $? -ne 0 ]; then
+ echo "(x) {color:red}-1 client integration
test{color}\n--Failed when running client tests on top of Hadoop
${HADOOP3_VERSION}. [see log for
details|${BUILD_URL}/artifact/output-integration/hadoop-${HADOOP3_VERSION}.log].
(note that this means we didn't check the Hadoop ${HADOOP3_VERSION} shaded
client)" >> output-integration/commentfile
+ exit 2
+ fi
+ echo "Attempting to use run an instance on top of Hadoop
${HADOOP3_VERSION}, relying on the Hadoop client artifacts for the example
client program."
+ docker run --rm -v "${WORKSPACE}":/hbase -v
/etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \
+ -u `id -u`:`id -g` -e JAVA_HOME="/usr/lib/jvm/java-17"
\
+ -e HADOOP_OPTS="--add-opens
java.base/java.lang=ALL-UNNAMED" \
+ --workdir=/hbase hbase-integration-test \
+
component/dev-support/hbase_nightly_pseudo-distributed-test.sh \
+ --single-process \
+ --hadoop-client-classpath
hadoop-3/share/hadoop/client/hadoop-client-api-*.jar:hadoop-3/share/hadoop/client/hadoop-client-runtime-*.jar
\
+ --working-dir
output-integration/hadoop-${HADOOP3_VERSION}-shaded \
+ --hbase-client-install ${hbase_client_dir} \
+ ${hbase_install_dir} \
+ hadoop-3/bin/hadoop \
+ hadoop-3/share/hadoop/yarn/timelineservice \
+
hadoop-3/share/hadoop/yarn/test/hadoop-yarn-server-tests-*-tests.jar \
+
hadoop-3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar \
+ hadoop-3/bin/mapred \
+
>output-integration/hadoop-${HADOOP3_VERSION}-shaded.log 2>&1
+ if [ $? -ne 0 ]; then
+ echo "(x) {color:red}-1 client integration
test{color}\n--Failed when running client tests on top of Hadoop
${HADOOP3_VERSION} using Hadoop's shaded client. [see log for
details|${BUILD_URL}/artifact/output-integration/hadoop-${HADOOP3_VERSION}-shaded.log]."
>> output-integration/commentfile
+ exit 2
+ fi
+ echo "(/) {color:green}+1 client integration test for
${HADOOP3_VERSION} {color}" >> output-integration/commentfile
+ '''
+ } //stage ("packaging and integration Hadoop 3 inner stage ")
+ } //for
+ } // script
+ } //steps
+ post {
+ always {
+ sh '''#!/bin/bash -e
+ if [ ! -f "output-integration/commentfile" ]; then
+ echo "(x) {color:red}-1 source release artifact{color}\n--
Something went wrong with this stage, [check relevant console
output|${BUILD_URL}/console]." >output-srctarball/commentfile
+ echo "(x) {color:red}-1 client integration test{color}\n--
Something went wrong with this stage, [check relevant console
output|${BUILD_URL}/console]." >output-integration/commentfile
+ fi
+ '''
+ stash name: 'srctarball-result', includes:
"output-srctarball/commentfile,output-integration/commentfile"
+ sshPublisher(publishers: [
+ sshPublisherDesc(configName: 'Nightlies',
+ transfers: [
+ sshTransfer(remoteDirectory:
"hbase/${JOB_NAME}/${BUILD_NUMBER}",
+ sourceFiles: "output-srctarball/hbase-src.tar.gz"
+ )
+ ]
+ )
+ ])
+ // remove the big src tarball, store the nightlies url in
hbase-src.html
+ sh '''#!/bin/bash -e
+ SRC_TAR="${WORKSPACE}/output-srctarball/hbase-src.tar.gz"
+ if [ -f "${SRC_TAR}" ]; then
+ echo "Remove ${SRC_TAR} for saving space"
+ rm -rf "${SRC_TAR}"
+ python3 ${BASEDIR}/dev-support/gen_redirect_html.py
"${ASF_NIGHTLIES_BASE}/output-srctarball" >
"${WORKSPACE}/output-srctarball/hbase-src.html"
+ else
+ echo "No hbase-src.tar.gz, skipping"
+ fi
+ '''
+ archiveArtifacts artifacts: 'output-srctarball/*'
+ archiveArtifacts artifacts: 'output-srctarball/**/*'
+ archiveArtifacts artifacts: 'output-integration/*'
+ archiveArtifacts artifacts: 'output-integration/**/*'
+ } //always
+ } //post
+ } //stage packaging
} // parallel
} //stage:_health checks
} //stages
@@ -916,12 +1134,15 @@ pipeline {
rm -rf ${OUTPUT_DIR_RELATIVE_JDK11_HADOOP3}
rm -rf ${OUTPUT_DIR_RELATIVE_JDK17_HADOOP3}
rm -rf ${OUTPUT_DIR_RELATIVE_JDK17_HADOOP3_BACKWARDS}-*
+ rm -rf output-srctarball
+ rm -rf output-integration
'''
unstash 'general-result'
unstash 'jdk8-hadoop2-result'
unstash 'jdk8-hadoop3-result'
unstash 'jdk11-hadoop3-result'
unstash 'jdk17-hadoop3-result'
+ unstash 'srctarball-result'
def results = ["${env.OUTPUT_DIR_RELATIVE_GENERAL}/commentfile",
"${env.OUTPUT_DIR_RELATIVE_JDK8_HADOOP2}/commentfile",
@@ -936,6 +1157,8 @@ pipeline {
unstash("jdk17-hadoop3-backwards-result-${hadoop3_version}")
results.add("${env.OUTPUT_DIR_RELATIVE_JDK17_HADOOP3_BACKWARDS}-${hadoop3_version}/commentfile")
}
+ results.add('output-srctarball/commentfile')
+ results.add('output-integration/commentfile')
echo env.BRANCH_NAME
echo env.BUILD_URL
echo currentBuild.result
diff --git a/dev-support/integration-test/pseudo-distributed-test.sh
b/dev-support/hbase_nightly_pseudo-distributed-test.sh
similarity index 98%
rename from dev-support/integration-test/pseudo-distributed-test.sh
rename to dev-support/hbase_nightly_pseudo-distributed-test.sh
index ea0ef6d30d6..75f0ab9a9f8 100755
--- a/dev-support/integration-test/pseudo-distributed-test.sh
+++ b/dev-support/hbase_nightly_pseudo-distributed-test.sh
@@ -308,11 +308,7 @@ fi
if [ "${hadoop_version%.*.*}" -gt 2 ]; then
echo "Verifying configs"
- hadoop_conf_files=""
- for f in "${working_dir}"/hbase-conf/*-site.xml; do
- hadoop_conf_files="$hadoop_conf_files -conffile $f"
- done
- "${hadoop_exec}" --config "${working_dir}/hbase-conf/" conftest
$hadoop_conf_files
+ "${hadoop_exec}" --config "${working_dir}/hbase-conf/" conftest
fi
if [ -n "${clean}" ]; then
@@ -417,7 +413,7 @@ HADOOP_CLASSPATH="${hbase_dep_classpath}" redirect_and_run
"${working_dir}/mr-im
EOF
echo "Verifying row count from import."
-import_rowcount=$(echo 'count "test:example"' | "${hbase_client}/bin/hbase"
--config "${working_dir}/hbase-conf/" shell --noninteractive 2>/dev/null | grep
"row(s)" | awk '{print $1}')
+import_rowcount=$(echo 'count "test:example"' | "${hbase_client}/bin/hbase"
--config "${working_dir}/hbase-conf/" shell --noninteractive 2>/dev/null | tail
-n 1)
if [ ! "${import_rowcount}" -eq 48 ]; then
echo "ERROR: Instead of finding 48 rows, we found ${import_rowcount}."
exit 2
@@ -530,7 +526,7 @@ echo "Checking on results of example program."
EOF
echo "Verifying row count from example."
-example_rowcount=$(echo 'count "test:example"' | "${hbase_client}/bin/hbase"
--config "${working_dir}/hbase-conf/" shell --noninteractive 2>/dev/null | grep
"row(s)" | awk '{print $1}')
+example_rowcount=$(echo 'count "test:example"' | "${hbase_client}/bin/hbase"
--config "${working_dir}/hbase-conf/" shell --noninteractive 2>/dev/null | tail
-n 1)
if [ "${example_rowcount}" -gt "1050" ]; then
echo "Found ${example_rowcount} rows, which is enough to cover 48 for
import, 1000 example's use of user table regions, 2 for example's use of
meta/namespace regions, and 1 for example's count record"
else
diff --git a/dev-support/integration-test/source-artifact.sh
b/dev-support/hbase_nightly_source-artifact.sh
similarity index 98%
rename from dev-support/integration-test/source-artifact.sh
rename to dev-support/hbase_nightly_source-artifact.sh
index da48ad07de2..372c39b8f88 100755
--- a/dev-support/integration-test/source-artifact.sh
+++ b/dev-support/hbase_nightly_source-artifact.sh
@@ -34,8 +34,6 @@ function usage {
exit 1
}
-set -e
-
MVN="mvn"
if ! command -v mvn &>/dev/null; then
MVN=$MAVEN_HOME/bin/mvn
@@ -160,6 +158,7 @@ echo "Checking against things we don't expect to include in
the source tarball (
# e.g. prior to HBASE-19152 we'd have the following lines (ignoring the bash
comment marker):
#Only in .: .gitattributes
#Only in .: .gitignore
+#Only in .: hbase-native-client
cat >known_excluded <<END
Only in .: .git
END
@@ -219,10 +218,8 @@ function build_tarball {
cd "${unpack_dir}"
-if ${MVN} -Dmaven.repo.local="${m2_tarbuild}" help:active-profiles | grep -q
hadoop-3.0; then
- echo "The hadoop-3.0 profile is activated by default, build a default
tarball."
- build_tarball 0
-else
+${MVN} -Dmaven.repo.local="${m2_tarbuild}" help:active-profiles | grep -q
hadoop-3.0
+if [ $? -ne 0 ]; then
echo "The hadoop-3.0 profile is not activated by default, build a default
tarball first."
# use java 8 to build with hadoop2
JAVA_HOME="/usr/lib/jvm/java-8" build_tarball 0
@@ -239,4 +236,7 @@ else
fi
# move tarballs back
mv "${unpack_dir}"/hbase-*-bin.tar.gz "${unpack_dir}"/hbase-assembly/target/
+else
+ echo "The hadoop-3.0 profile is activated by default, build a default
tarball."
+ build_tarball 0
fi
diff --git a/dev-support/integration-test/integration-test.Jenkinsfile
b/dev-support/integration-test/integration-test.Jenkinsfile
deleted file mode 100644
index b684b953d8e..00000000000
--- a/dev-support/integration-test/integration-test.Jenkinsfile
+++ /dev/null
@@ -1,395 +0,0 @@
-// 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.
-pipeline {
- agent {
- node {
- label 'hbase'
- }
- }
- triggers {
- cron('@daily')
- }
- options {
- buildDiscarder(logRotator(numToKeepStr: '20'))
- timeout (time: 16, unit: 'HOURS')
- timestamps()
- skipDefaultCheckout()
- disableConcurrentBuilds()
- }
- environment {
- HADOOP_VERSIONS = "2.10.2,3.2.4,3.3.5,3.3.6,3.4.0,3.4.1,3.4.2,3.4.3"
- BASEDIR = "${env.WORKSPACE}/component"
- }
- parameters {
- booleanParam(name: 'DEBUG', defaultValue: false, description: 'Produce a
lot more meta-information.')
- }
- stages {
- stage('scm-checkout') {
- steps {
- dir('component') {
- checkout scm
- }
- }
- }
- // This is meant to mimic what a release manager will do to create RCs.
- // See http://hbase.apache.org/book.html#maven.release
- // TODO (HBASE-23870): replace this with invocation of the release tool
- stage ('packaging test') {
- steps {
- sh '''#!/bin/bash -e
- echo "Setting up directories"
- rm -rf "output-srctarball" && mkdir "output-srctarball"
- rm -rf "unpacked_src_tarball" && mkdir "unpacked_src_tarball"
- rm -rf ".m2-for-repo" && mkdir ".m2-for-repo"
- rm -rf ".m2-for-src" && mkdir ".m2-for-src"
- '''
- sh '''#!/bin/bash -e
- rm -rf "output-srctarball/machine" && mkdir
"output-srctarball/machine"
- "${BASEDIR}/dev-support/gather_machine_environment.sh"
"output-srctarball/machine"
- echo "got the following saved stats in 'output-srctarball/machine'"
- ls -lh "output-srctarball/machine"
- '''
- sh '''#!/bin/bash -e
- echo "Checking the steps for an RM to make a source artifact, then a
binary artifact."
- docker build -t hbase-integration-test -f
"${BASEDIR}/dev-support/docker/Dockerfile" .
- docker run --rm -v "${WORKSPACE}":/hbase -v
/etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \
- -u `id -u`:`id -g` -e JAVA_HOME="/usr/lib/jvm/java-17"
--workdir=/hbase hbase-integration-test \
- "component/dev-support/integration-test/source-artifact.sh" \
- --intermediate-file-dir output-srctarball \
- --unpack-temp-dir unpacked_src_tarball \
- --maven-m2-initial .m2-for-repo \
- --maven-m2-src-build .m2-for-src \
- --clean-source-checkout \
- component
- if [ $? -eq 0 ]; then
- echo '(/) {color:green}+1 source release artifact{color}\n-- See
build output for details.' >output-srctarball/commentfile
- else
- echo '(x) {color:red}-1 source release artifact{color}\n-- See
build output for details.' >output-srctarball/commentfile
- exit 1
- fi
- '''
- echo "make sure we have proper hbase tarballs under hbase-assembly"
- sh '''#!/bin/bash -e
- if [ 2 -ne $(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-bin.tar.gz |
grep -v hadoop3 | wc -l) ]; then
- echo '(x) {color:red}-1 testing binary artifact{color}\n-- source
tarball did not produce the expected binaries.' >>output-srctarball/commentfile
- exit 1
- fi
- if [[ "${BRANCH_NAME}" == *"branch-2"* ]]; then
- if [ 2 -eq $(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-hadoop3-*-bin.tar.gz
| wc -l) ]; then
- echo '(x) {color:red}-1 testing binary artifact{color}\n--
source tarball did not produce the expected hadoop3 binaries.'
>>output-srctarball/commentfile
- exit 1
- fi
- fi
- '''
- stash name: 'hbase-install', includes:
"unpacked_src_tarball/hbase-assembly/target/hbase-*-bin.tar.gz"
- } // steps
- post {
- always {
- script {
- def srcFile = "${env.WORKSPACE}/output-srctarball/hbase-src.tar.gz"
- if (fileExists(srcFile)) {
- echo "upload hbase-src.tar.gz to nightlies"
- sshPublisher(publishers: [
- sshPublisherDesc(configName: 'Nightlies',
- transfers: [
- sshTransfer(remoteDirectory:
"hbase/${JOB_NAME}/${BUILD_NUMBER}",
- sourceFiles: srcFile
- )
- ]
- )
- ])
- // remove the big src tarball, store the nightlies url in
hbase-src.html
- sh '''#!/bin/bash -e
- SRC_TAR="${WORKSPACE}/output-srctarball/hbase-src.tar.gz"
- echo "Remove ${SRC_TAR} for saving space"
- rm -rf "${SRC_TAR}"
- python3 ${BASEDIR}/dev-support/gen_redirect_html.py
"${ASF_NIGHTLIES_BASE}/output-srctarball" >
"${WORKSPACE}/output-srctarball/hbase-src.html"
- '''
- }
- }
- archiveArtifacts artifacts: 'output-srctarball/*'
- archiveArtifacts artifacts: 'output-srctarball/**/*'
- }
- }
- } // packaging test
- stage ('integration test matrix') {
- matrix {
- agent {
- node {
- label 'hbase'
- }
- }
- axes {
- axis {
- name 'HADOOP_VERSION'
- // matrix does not support dynamic axis values, so here we need to
keep align with the
- // above environment
- values
"2.10.2","3.2.4","3.3.5","3.3.6","3.4.0","3.4.1","3.4.2","3.4.3"
- }
- }
- environment {
- BASEDIR = "${env.WORKSPACE}/component"
- OUTPUT_DIR = "output-integration-hadoop-${env.HADOOP_VERSION}"
- }
- when {
- expression {
- if (HADOOP_VERSION == '2.10.2') {
- // only branch-2/branch-2.x need to run against hadoop2, here we
also includes
- // HBASE-XXXXX-branch-2 feature branch
- return env.BRANCH_NAME.contains('branch-2')
- }
- if (HADOOP_VERSION == '3.2.4') {
- // only branch-2.5 need to run against hadoop 3.2.4, here we
also includes
- // HBASE-XXXXX-branch-2.5 feature branch
- return env.BRANCH_NAME.contains('branch-2.5')
- }
- return true
- }
- }
- stages {
- stage('scm-checkout') {
- steps {
- sh '''#!/bin/bash -e
- echo "Setting up directories"
- rm -rf "${OUTPUT_DIR}" && mkdir "${OUTPUT_DIR}"
- echo "(x) {color:red}-1 client integration test for
${HADOOP_VERSION}{color}\n-- Something went wrong with this stage, [check
relevant console output|${BUILD_URL}/console]." >${OUTPUT_DIR}/commentfile
- rm -rf "unpacked_src_tarball"
- rm -rf "hbase-install" && mkdir "hbase-install"
- rm -rf "hbase-client" && mkdir "hbase-client"
- rm -rf "hadoop-install" && mkdir "hadoop-install"
- rm -rf "hbase-hadoop3-install"
- rm -rf "hbase-hadoop3-client"
- # remove old hadoop tarballs in workspace
- rm -rf hadoop-*.tar.gz
- '''
- dir('component') {
- checkout scm
- }
- } // steps
- } // scm-checkout
- stage('install hadoop') {
- steps {
- dir("downloads-hadoop") {
- sh '''#!/bin/bash -e
- echo "Make sure we have a directory for downloading
dependencies: $(pwd)"
- '''
- sh '''#!/bin/bash -e
- echo "Ensure we have a copy of Hadoop ${HADOOP_VERSION}"
-
"${WORKSPACE}/component/dev-support/jenkins-scripts/cache-apache-project-artifact.sh"
\
- --working-dir "${WORKSPACE}/downloads-hadoop" \
- --keys 'https://downloads.apache.org/hadoop/common/KEYS' \
- --verify-tar-gz \
- "${WORKSPACE}/hadoop-${HADOOP_VERSION}-bin.tar.gz" \
-
"hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz"
- for stale in $(ls -1 "${WORKSPACE}"/hadoop-*.tar.gz | grep
-v ${HADOOP_VERSION}); do
- echo "Delete stale hadoop cache ${stale}"
- rm -rf $stale
- done
- artifact=$(ls -1
"${WORKSPACE}"/hadoop-${HADOOP_VERSION}-bin.tar.gz | head -n 1)
- tar --strip-components=1 -xzf "${artifact}" -C
"${WORKSPACE}/hadoop-install"
- if [[ ${HADOOP_VERSION} == 3.* ]]; then
- # we need to patch some files otherwise minicluster will
fail to start, see MAPREDUCE-7471
- ${BASEDIR}/dev-support/integration-test/patch-hadoop3.sh
"${WORKSPACE}/hadoop-install"
- fi
- '''
- } // dir
- } // steps
- } // install hadoop
- stage('install hbase') {
- steps {
- unstash 'hbase-install'
- sh'''#!/bin/bash -e
- install_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-bin.tar.gz |
grep -v client-bin | grep -v hadoop3)
- tar --strip-component=1 -xzf "${install_artifact}" -C
"hbase-install"
- client_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-client-bin.tar.gz
| grep -v hadoop3)
- tar --strip-component=1 -xzf "${client_artifact}" -C
"hbase-client"
- if ls
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-hadoop3-*-bin.tar.gz
&>/dev/null; then
- echo "hadoop3 artifacts available, unpacking the hbase
hadoop3 bin tarball into 'hbase-hadoop3-install' and the client hadoop3 tarball
into 'hbase-hadoop3-client'"
- mkdir hbase-hadoop3-install
- mkdir hbase-hadoop3-client
- hadoop3_install_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-hadoop3-*-bin.tar.gz
| grep -v client-bin)
- tar --strip-component=1 -xzf "${hadoop3_install_artifact}"
-C "hbase-hadoop3-install"
- hadoop3_client_artifact=$(ls -1
"${WORKSPACE}"/unpacked_src_tarball/hbase-assembly/target/hbase-*-hadoop3-*-client-bin.tar.gz)
- tar --strip-component=1 -xzf "${hadoop3_client_artifact}" -C
"hbase-hadoop3-client"
- fi
- '''
- } // steps
- }
- stage('integration test ') {
- steps {
- sh '''#!/bin/bash -e
- hbase_install_dir="hbase-install"
- hbase_client_dir="hbase-client"
- if [[ ${HADOOP_VERSION} == 3.* ]] && [[ -d
"hbase-hadoop3-install" ]]; then
- echo "run hadoop3 client integration test against hbase
hadoop3 binaries"
- hbase_install_dir="hbase-hadoop3-install"
- hbase_client_dir="hbase-hadoop3-client"
- fi
- java_home="/usr/lib/jvm/java-17"
- if [[ ${HADOOP_VERSION} == 2.* ]]; then
- java_home="/usr/lib/jvm/java-8"
- fi
- echo "Attempting to run an instance on top of Hadoop
${HADOOP_VERSION}."
- # Create working dir
- rm -rf "${OUTPUT_DIR}/non-shaded" && mkdir
"${OUTPUT_DIR}/non-shaded"
- docker build -t hbase-integration-test -f
"${BASEDIR}/dev-support/docker/Dockerfile" .
- docker run --rm -v "${WORKSPACE}":/hbase -v
/etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \
- -u `id -u`:`id -g` -e JAVA_HOME="${java_home}" \
- -e HADOOP_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
\
- --workdir=/hbase hbase-integration-test \
-
component/dev-support/integration-test/pseudo-distributed-test.sh \
- --single-process \
- --working-dir ${OUTPUT_DIR}/non-shaded \
- --hbase-client-install ${hbase_client_dir} \
- ${hbase_install_dir} \
- hadoop-install/bin/hadoop \
- hadoop-install/share/hadoop/yarn/timelineservice \
-
hadoop-install/share/hadoop/yarn/test/hadoop-yarn-server-tests-*-tests.jar \
-
hadoop-install/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar
\
- hadoop-install/bin/mapred \
- >${OUTPUT_DIR}/hadoop.log 2>&1
- if [ $? -ne 0 ]; then
- echo "(x) {color:red}-1 client integration test for
${HADOOP_VERSION}{color}\n--Failed when running client tests on top of Hadoop
${HADOOP_VERSION}. [see log for
details|${BUILD_URL}/artifact/${OUTPUT_DIR}/hadoop.log]. (note that this means
we didn't check the Hadoop ${HADOOP_VERSION} shaded client)"
>${OUTPUT_DIR}/commentfile
- exit 2
- fi
- echo "(/) {color:green}+1 client integration test for
${HADOOP_VERSION} {color}" >${OUTPUT_DIR}/commentfile
- if [[ ${HADOOP_VERSION} == 2.* ]] || [[ ${HADOOP_VERSION} ==
3.2.* ]]; then
- echo "skip running shaded hadoop client test for
${HADOOP_VERSION}"
- exit 0
- fi
- # Create working dir
- rm -rf "${OUTPUT_DIR}/shaded" && mkdir "${OUTPUT_DIR}/shaded"
- echo "Attempting to run an instance on top of Hadoop
${HADOOP_VERSION}, relying on the Hadoop client artifacts for the example
client program."
- docker run --rm -v "${WORKSPACE}":/hbase -v
/etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \
- -u `id -u`:`id -g` -e JAVA_HOME="${java_home}" \
- -e HADOOP_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
\
- --workdir=/hbase hbase-integration-test \
-
component/dev-support/integration-test/pseudo-distributed-test.sh \
- --single-process \
- --hadoop-client-classpath
hadoop-install/share/hadoop/client/hadoop-client-api-*.jar:hadoop-install/share/hadoop/client/hadoop-client-runtime-*.jar
\
- --working-dir ${OUTPUT_DIR}/shaded \
- --hbase-client-install ${hbase_client_dir} \
- ${hbase_install_dir} \
- hadoop-install/bin/hadoop \
- hadoop-install/share/hadoop/yarn/timelineservice \
-
hadoop-install/share/hadoop/yarn/test/hadoop-yarn-server-tests-*-tests.jar \
-
hadoop-install/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar
\
- hadoop-install/bin/mapred \
- >${OUTPUT_DIR}/hadoop-shaded.log 2>&1
- if [ $? -ne 0 ]; then
- echo "(x) {color:red}-1 client integration testfor
${HADOOP_VERSION}{color}\n--Failed when running client tests on top of Hadoop
${HADOOP_VERSION} using Hadoop's shaded client. [see log for
details|${BUILD_URL}/artifact/${OUTPUT_DIR}/hadoop-shaded.log]." >>
${OUTPUT_DIR}/commentfile
- exit 2
- fi
- echo "(/) {color:green}+1 client integration test for
${HADOOP_VERSION} with shaded hadoop client{color}" >> ${OUTPUT_DIR}/commentfile
- '''
- } // steps
- post {
- always {
- stash name: "test-result-${env.HADOOP_VERSION}", includes:
"${env.OUTPUT_DIR}/commentfile"
- archiveArtifacts artifacts: "${env.OUTPUT_DIR}/*"
- archiveArtifacts artifacts: "${env.OUTPUT_DIR}/**/*"
- } // always
- } // post
- } // integration test
- } // stages
- } // matrix
- } // integration test matrix
- } // stages
- post {
- always {
- script {
- def results = []
- results.add('output-srctarball/commentfile')
- for (hadoopVersion in getHadoopVersions(env.HADOOP_VERSIONS)) {
- try {
- unstash "test-result-${hadoopVersion}"
-
results.add("output-integration-hadoop-${hadoopVersion}/commentfile")
- } catch (e) {
- echo "unstash ${hadoopVersion} failed, ignore"
- }
- }
- echo env.BRANCH_NAME
- echo env.BUILD_URL
- echo currentBuild.result
- echo currentBuild.durationString
- def comment = "Results for branch ${env.BRANCH_NAME}\n"
- comment += "\t[build ${currentBuild.displayName} on
builds.a.o|${env.BUILD_URL}]: "
- if (currentBuild.result == null || currentBuild.result == "SUCCESS") {
- comment += "(/) *{color:green}+1 overall{color}*\n"
- } else {
- comment += "(x) *{color:red}-1 overall{color}*\n"
- // Ideally get the committer our of the change and @ mention them in
the per-jira comment
- }
- comment += "----\ndetails (if available):\n\n"
- echo ""
- echo "[DEBUG] trying to aggregate step-wise results"
- comment += results.collect { fileExists(file: it) ? readFile(file: it)
: "" }.join("\n\n")
- echo "[INFO] Comment:"
- echo comment
- echo ""
- echo "[DEBUG] checking to see if feature branch"
- def jiras = getJirasToComment(env.BRANCH_NAME, [])
- if (jiras.isEmpty()) {
- echo "[DEBUG] non-feature branch, checking change messages for jira
keys."
- echo "[INFO] There are ${currentBuild.changeSets.size()} change
sets."
- jiras = getJirasToCommentFromChangesets(currentBuild)
- }
- jiras.each { currentIssue ->
- jiraComment issueKey: currentIssue, body: comment
- }
- } // script
- } // always
- } // post
-}
-
-@NonCPS
-List<String> getHadoopVersions(String versions) {
- return versions.split(',').collect { it.trim() }.findAll { it } as String[]
-}
-
-import org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
-@NonCPS
-List<String> getJirasToCommentFromChangesets(RunWrapper thisBuild) {
- def seenJiras = []
- thisBuild.changeSets.each { cs ->
- cs.getItems().each { change ->
- CharSequence msg = change.msg
- echo "change: ${change}"
- echo " ${msg}"
- echo " ${change.commitId}"
- echo " ${change.author}"
- echo ""
- seenJiras = getJirasToComment(msg, seenJiras)
- }
- }
- return seenJiras
-}
-
-@NonCPS
-List<String> getJirasToComment(CharSequence source, List<String> seen) {
- source.eachMatch("HBASE-[0-9]+") { currentIssue ->
- echo "[DEBUG] found jira key: ${currentIssue}"
- if (currentIssue in seen) {
- echo "[DEBUG] already commented on ${currentIssue}."
- } else {
- echo "[INFO] commenting on ${currentIssue}."
- seen << currentIssue
- }
- }
- return seen
-}
-
diff --git a/dev-support/integration-test/patch-hadoop3.sh
b/dev-support/patch-hadoop3.sh
similarity index 83%
rename from dev-support/integration-test/patch-hadoop3.sh
rename to dev-support/patch-hadoop3.sh
index b4c51ca9487..fed5a535bcd 100755
--- a/dev-support/integration-test/patch-hadoop3.sh
+++ b/dev-support/patch-hadoop3.sh
@@ -20,5 +20,5 @@
hadoop_dir=$1
sed -i
"s/HADOOP_TOOLS_DIR=\${HADOOP_TOOLS_DIR:-\"share\/hadoop\/tools\"}/HADOOP_TOOLS_DIR=\${HADOOP_TOOLS_DIR:-\"\$HADOOP_TOOLS_HOME\/share\/hadoop\/tools\"}/g"
"$hadoop_dir/libexec/hadoop-functions.sh"
-sed -i
"/HADOOP_CLASSNAME=org.apache.hadoop.mapreduce.MiniHadoopClusterManager/a
mockitojar=\$(echo
\"\${HADOOP_TOOLS_LIB_JARS_DIR}\"\/mockito-core-[0-9]*.jar)\nhadoop_add_classpath
\"\${mockitojar}\"" "$hadoop_dir/bin/mapred"
+sed -i "/hadoop_add_classpath \"\${junitjar}\"/a mockitojar=\$(echo
\"\${HADOOP_TOOLS_LIB_JARS_DIR}\"\/mockito-core-[0-9]*.jar)\nhadoop_add_classpath
\"\${mockitojar}\"" "$hadoop_dir/bin/mapred"
curl
https://repo1.maven.org/maven2/org/mockito/mockito-core/2.28.2/mockito-core-2.28.2.jar
-o "$hadoop_dir/share/hadoop/tools/lib/mockito-core-2.28.2.jar"