You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2015/04/13 23:05:13 UTC
mesos git commit: Added Jenkins build script to build Mesos inside
Docker container.
Repository: mesos
Updated Branches:
refs/heads/vinod/jenkins_docker [created] 797bfb5ae
Added Jenkins build script to build Mesos inside Docker container.
Review: https://reviews.apache.org/r/33045
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/797bfb5a
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/797bfb5a
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/797bfb5a
Branch: refs/heads/vinod/jenkins_docker
Commit: 797bfb5ae126b99c9a548f5a6b1115d5d8300ecc
Parents: a5a2833
Author: Vinod Kone <vi...@gmail.com>
Authored: Wed Apr 8 23:26:50 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Mon Apr 13 14:05:03 2015 -0700
----------------------------------------------------------------------
support/jenkins_build.sh | 116 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 116 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/797bfb5a/support/jenkins_build.sh
----------------------------------------------------------------------
diff --git a/support/jenkins_build.sh b/support/jenkins_build.sh
new file mode 100755
index 0000000..bf95db6
--- /dev/null
+++ b/support/jenkins_build.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+set -xe
+
+# This is the script used by ASF Jenkins to build and check Mesos for
+# a given OS and compiler combination.
+
+# Require the following environment variables to be set.
+: ${OS:?"Environment variable 'OS' must be set"}
+: ${COMPILER:?"Environment variable 'COMPILER' must be set"}
+
+# Change to the root of Mesos repo for docker build context.
+MESOS_DIRECTORY=$( cd "$( dirname "$0" )/.." && pwd )
+cd $MESOS_DIRECTORY
+
+# TODO(vinod): Once ASF CI supports Docker 1.5 use a custom name for
+# Dockerfile to avoid overwriting Dockerfile (if it exists) at the root
+# of the repo.
+DOCKERFILE="Dockerfile"
+
+rm -f $DOCKERFILE # Just in case a stale one exists.
+
+# Helper function that appends instructions to docker file.
+function append_dockerfile {
+ echo $1 >> $DOCKERFILE
+}
+
+
+# TODO(vinod): Add support for Fedora and Debian.
+case $OS in
+ centos*)
+ # NOTE: Currently we only support CentOS7+ due to the
+ # compiler versions needed to compile Mesos.
+
+ append_dockerfile "FROM $OS"
+
+ # Install dependencies.
+
+ append_dockerfile "RUN yum groupinstall -y 'Development Tools'"
+ append_dockerfile "RUN yum install -y epel-release" # Needed for clang.
+ append_dockerfile "RUN yum install -y clang git maven"
+ append_dockerfile "RUN yum install -y java-1.7.0-openjdk-devel python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-utils-devel"
+
+ # Add an unprivileged user.
+ append_dockerfile "RUN adduser mesos"
+ ;;
+ ubuntu*)
+ # NOTE: Currently we only support Ubuntu13.10+ due to the
+ # compiler versions needed to compile Mesos.
+
+ append_dockerfile "FROM $OS"
+
+ # Install dependencies.
+ append_dockerfile "RUN apt-get update"
+ append_dockerfile "RUN apt-get -y install build-essential clang git maven autoconf libtool"
+ append_dockerfile "RUN apt-get -y install openjdk-7-jdk python-dev python-boto libcurl4-nss-dev libsasl2-dev libapr1-dev libsvn-dev"
+
+ # Add an unpriviliged user.
+ append_dockerfile "RUN adduser --disabled-password --gecos '' mesos"
+
+ # Disable any tests failing on Ubuntu.
+ append_dockerfile "ENV GTEST_FILTER '*FileSystemTableRead*'"
+ ;;
+ *)
+ echo "Unknown OS $OS"
+ exit 1
+ ;;
+esac
+
+case $COMPILER in
+ gcc)
+ append_dockerfile "ENV CC gcc"
+ append_dockerfile "ENV CXX g++"
+ ;;
+ clang)
+ append_dockerfile "ENV CC clang"
+ append_dockerfile "ENV CXX clang++"
+ ;;
+ *)
+ echo "Unknown Compiler $COMPILER"
+ exit 1
+ ;;
+esac
+
+# Set working directory.
+append_dockerfile "WORKDIR mesos"
+
+# Copy Mesos source tree into the image.
+append_dockerfile "COPY . /mesos/"
+
+# NOTE: We run all the tests as unprivileged 'mesos' user because
+# Docker on ASF Jenkins doesn't support privileged access to run
+# cgroups related tests. Also, certain tests (e.g., ContainerizerTest)
+# enable cgroups isolation if the user is 'root'.
+# TODO(vinod): Fix this if/when docker privileged access is supported
+# on ASF Jenkins.
+append_dockerfile "RUN chown -R mesos /mesos"
+append_dockerfile "USER mesos"
+
+# Build and check Mesos.
+# TODO(vinod): Add support for non-default configuration options.
+append_dockerfile "CMD ./bootstrap && ./configure && GLOG_v=1 MESOS_VERBOSE=1 make distcheck"
+
+# Generate a random image tag.
+TAG=mesos-`date +%s`-$RANDOM
+
+# Build the Docker imeage.
+# TODO(vinod): Instead of building Docker images on the fly host the
+# images on DockerHub and use them.
+docker build -t $TAG .
+
+# Set a trap to delete the image on exit.
+trap "docker rmi $TAG" EXIT
+
+# Now run the image.
+docker run --rm $TAG