blob: 5ced02858df12ec7858837030ac3b9e9d3cd80c0 [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.
*/
// FIXME: it would be nice to extract the following from bigtop.mk on the fly
def bigtopComponents = ["bigtop-groovy", "bigtop-jsvc", "bigtop-tomcat", "bigtop-utils",
"zookeeper", "hadoop", "hbase", "hive", "pig", "crunch", "datafu",
"flume", "giraph", "ignite-hadoop", "mahout", "oozie", "phoenix",
"solr", "spark", "sqoop", "alluxio", "whirr"]
// FIXME: it would be nice to extract the following from some static configuration file
def targetOS = ["fedora-20", "opensuse-12.3", "ubuntu-14.04"]
def gitUrl = "https://git-wip-us.apache.org/repos/asf/bigtop.git"
def gitBranch = "master"
def dockerLabel = "docker"
def jobPrefix="Bigtop"
def pkgTestsuites =["TestPackagesBasicsWithRM", "TestPackagesPseudoDistributedServices",
"TestPackagesPseudoDistributedDependency", "TestPackagesPseudoDistributedFileContents",
"TestPackagesPseudoDistributedWithRM", "TestPackagesBasics"]
job {
name "${jobPrefix}-${gitBranch}-All"
description "Top level job that kicks off everything for a complete Bigtop CI run on branch ${gitBranch}"
logRotator(7 /*days to keep */, 10 /* # of builds */, 7 /*days to keep */, 10 /* # of builds */)
label('master')
triggers {
cron("0 3 * * *")
}
steps {
downstreamParameterized {
trigger("${jobPrefix}-${gitBranch}-" + bigtopComponents.join("-pkg,${jobPrefix}-${gitBranch}-") + "-pkg",
'UNSTABLE_OR_BETTER', true, ["buildStepFailure": "FAILURE", "failure": "FAILURE", "unstable": "UNSTABLE"]) {
currentBuild()
}
trigger("${jobPrefix}-${gitBranch}-Repository",
'UNSTABLE_OR_BETTER', true, ["buildStepFailure": "FAILURE", "failure": "FAILURE", "unstable": "UNSTABLE"]) {
currentBuild()
}
trigger("${jobPrefix}-${gitBranch}-Packagetest",
'UNSTABLE_OR_BETTER', true, ["buildStepFailure": "FAILURE", "failure": "FAILURE", "unstable": "UNSTABLE"]) {
currentBuild()
}
}
}
}
job(type: Matrix) {
name "${jobPrefix}-${gitBranch}-Repository"
description "Top level job that creates final repository from packages built off of ${gitBranch} branch for all the matrix"
logRotator(2 /*days to keep */, 2 /* # of builds */, 2 /*days to keep */, 2 /* # of builds */)
label('master')
steps {
shell('''
#!/bin/bash -ex
env
rm -rf * /var/tmp/* || :
# By default Jenkins uses an internal (unresolvable) EC2 DNS name
JOB_URL="${JOB_URL/#*:/http://bigtop01.cloudera.org:}"
export PROJECTS="''' + bigtopComponents.join(' ') + '''"
mkdir -p packages
pushd packages
for project in $PROJECTS; do
mkdir -p ${project}
pushd ${project}
wget "http://bigtop01.cloudera.org:8080/job/${jobPrefix}-${gitBranch}-${project}-pkg/TARGET_OS=${TARGET_OS},slaves=docker/lastSuccessfulBuild/artifact/*zip*/archive.zip"
unzip archive.zip
rm archive.zip
popd
done
popd
if [ -n "find packages -iname '*.src.rpm'`" ] ; then
mkdir -p repo/{RPMS,SRPMS}
mv `find packages -iname "*.src.rpm"` repo/SRPMS/
mv `find packages -iname "*.rpm"` repo/RPMS/
pushd repo
createrepo .
popd
cat > repo/bigtop.repo << __EOT__
[bigtop]
name=Bigtop
enabled=1
gpgcheck=0
type=NONE
baseurl=${JOB_URL}/lastSuccessfulBuild/artifact/repo/
__EOT__
else
mkdir -p repo/conf
cat > repo/conf/distributions <<__EOT__
Origin: Bigtop
Label: Bigtop
Suite: stable
Codename: bigtop
Version: 0.3
Architectures: i386 amd64 source
Components: contrib
Description: Bigtop
__EOT__
for i in `find packages -name \\*.changes` ; do
reprepro -Vb repo include bigtop $i
done
echo "deb ${JOB_URL}/lastSuccessfulBuild/artifact/repo/ bigtop contrib" > repo/bigtop.list
fi
''')
}
publishers {
archiveArtifacts('repo/**/*')
}
axes {
text('TARGET_OS', targetOS)
label('slaves', dockerLabel)
}
}
job(type: Matrix) {
name "${jobPrefix}-${gitBranch}-Packagetest"
description "Runs smoke tests on all packages built off of ${gitBranch} branch for all the matrix"
logRotator(4 /*days to keep */, 4 /* # of builds */, 4 /*days to keep */, 4 /* # of builds */)
label('master')
parameters {
choiceParam("PKG_SUITE", pkgTestsuites)
}
scm {
git { node -> // is hudson.plugins.git.GitSCM
// node / gitConfigName('Bigtop')
// node / gitConfigEmail('dev@bigtop.apache.org')
remote {
name(gitBranch)
url(gitUrl)
}
branch(gitBranch)
}
}
steps {
shell('''
#!/bin/bash
# Working around SuSE madness
rm -f /etc/zypp/repos.d/*Cloud* || :
export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_CONF_DIR=/etc/hadoop/conf
export REPO_FILE_URL="http://bigtop01.cloudera.org:8080/view/Bigtop-trunk/job/Bigtop-trunk-Repository/label=${label/-slave/}/lastSuccessfulBuild/artifact/repo/bigtop"
export REPO_KEY_URL="http://archive.apache.org/dist/incubator/bigtop/bigtop-0.3.0-incubating/repos/GPG-KEY-bigtop"
if [ "$label" = "precise-slave" -o "$label" = "quetzal-slave" -o "$label" = "trusty-slave" ]; then
REPO_FILE_URL="${REPO_FILE_URL}.list"
else
REPO_FILE_URL="${REPO_FILE_URL}.repo"
fi
docker run -u `id -u` -e HOME=/var/lib/jenkins -e BIGTOP_BUILD_STAMP=.${BUILD_NUMBER} \\
-v `pwd`/build/home:/var/lib/jenkins \\
-v `pwd`:/ws bigtop/slaves:$TARGET_OS \\
bash -c '. /etc/profile.d/bigtop.sh; cd /ws ; mvn \\
-f bigtop-tests/test-execution/package/pom.xml \\
clean verify \\
-Dbigtop.repo.file.url="'${REPO_FILE_URL}'" \\
-Dorg.apache.bigtop.itest.log4j.level=TRACE \\
-Dlog4j.debug=true \\
-Dorg.apache.maven-failsafe-plugin.testInclude="**/'${PKG_SUITE}'.*"
''')
}
publishers {
archiveJunit('**/bigtop-tests/test-execution/package/target/failsafe-reports/*.xml') {
retainLongStdout()
}
}
axes {
text('TARGET_OS', targetOS)
label('slaves', dockerLabel)
}
}
bigtopComponents.each { comp->
job(type: Matrix) {
println comp
name "${jobPrefix}-${gitBranch}-${comp}-pkg"
description "Builds packages on every platform of the matrix according to the ${gitBranch} branch"
logRotator(7 /*days to keep */, 10 /* # of builds */, 7 /*days to keep */, 10 /* # of builds */)
label('master')
scm {
git { node -> // is hudson.plugins.git.GitSCM
// node / gitConfigName('Bigtop')
// node / gitConfigEmail('dev@bigtop.apache.org')
remote {
name(gitBranch)
url(gitUrl)
}
branch(gitBranch)
}
}
// export JAVA_OPTS="-Xmx1536m -Xms256m -XX:MaxPermSize=256m"
// export MAVEN_OPTS="-Xmx1536m -Xms256m -XX:MaxPermSize=256m"
//
// if [ -e /etc/SuSE-release ] ; then
// export LDFLAGS="-lrt"
// fi
steps {
shell('''
mkdir -p build/home || :
docker run -u `id -u` -e HOME=/var/lib/jenkins -e BIGTOP_BUILD_STAMP=.${BUILD_NUMBER} \\
-v `pwd`/build/home:/var/lib/jenkins \\
-v `pwd`:/ws bigtop/slaves:$TARGET_OS \\
bash -c '. /etc/profile.d/bigtop.sh; cd /ws ; gradle ''' + "'\"${comp}-pkg\"")
}
publishers {
archiveArtifacts('output/**/*/*')
}
axes {
text('TARGET_OS', targetOS)
label('slaves', dockerLabel)
}
}
}