From 9359522032b83ded9e828e132e2c591660f5a631 Mon Sep 17 00:00:00 2001 From: Stanley Cheung Date: Thu, 9 Jul 2015 17:29:35 -0700 Subject: [PATCH 1/2] Add homebrew testing to jenkins --- tools/jenkins/grpc_linuxbrew/Dockerfile | 82 +++++++++++++++++++++++++ tools/jenkins/run_linuxbrew.sh | 41 +++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 tools/jenkins/grpc_linuxbrew/Dockerfile create mode 100644 tools/jenkins/run_linuxbrew.sh diff --git a/tools/jenkins/grpc_linuxbrew/Dockerfile b/tools/jenkins/grpc_linuxbrew/Dockerfile new file mode 100644 index 00000000000..039b12d49ec --- /dev/null +++ b/tools/jenkins/grpc_linuxbrew/Dockerfile @@ -0,0 +1,82 @@ +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# A work-in-progress Dockerfile that allows running gRPC homebrew +# installations inside docker containers +FROM debian:jessie + +# Core dependencies +RUN apt-get update && apt-get install -y \ + bzip2 curl g++ gawk git m4 make patch ruby tcl wget + +# Install linuxbrew +WORKDIR /home/linuxbrew +ENV PATH /home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH +ENV SHELL /bin/bash +RUN git clone https://github.com/Homebrew/linuxbrew.git /home/linuxbrew/.linuxbrew +RUN brew doctor || true + +# Install gRPC via linuxbrew +RUN curl -fsSL https://goo.gl/getgrpc | bash - + + +# NodeJS dependency +RUN curl -sL https://deb.nodesource.com/setup | bash - +RUN apt-get install -y nodejs + +# Install gRPC NodeJS via linuxbrew +RUN curl -fsSL https://goo.gl/getgrpc | bash -s nodejs + + +# Ruby dependency +RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 +RUN /bin/bash -l -c "\curl -sSL https://get.rvm.io | bash -s stable" +RUN /bin/bash -l -c "rvm install ruby-2.1" +RUN /bin/bash -l -c "echo 'export PATH=/home/linuxbrew/.linuxbrew/bin:$PATH' > ~/.bashrc" +RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.1' >> ~/.bashrc" + +# Install gRPC Ruby via linuxbrew +RUN /bin/bash -l -c "curl -fsSL https://goo.gl/getgrpc | bash -s ruby" + + +# PHP dependency +RUN apt-get update && apt-get install -y \ + php5 php5-dev phpunit unzip + +# Install gRPC PHP via linuxbrew +RUN curl -fsSL https://goo.gl/getgrpc | bash -s php + + +# Python dependency +RUN apt-get update && apt-get install -y \ + python-dev +RUN curl https://bootstrap.pypa.io/get-pip.py | python + +# Install gRPC Python via linuxbrew +RUN curl -fsSL https://goo.gl/getgrpc | bash -s python diff --git a/tools/jenkins/run_linuxbrew.sh b/tools/jenkins/run_linuxbrew.sh new file mode 100644 index 00000000000..74e7c78c3bc --- /dev/null +++ b/tools/jenkins/run_linuxbrew.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# This script is invoked by Jenkins and triggers a test run based on +# env variable settings. +set -ex + +sha1=$(sha1sum tools/jenkins/grpc_linuxbrew/Dockerfile | cut -f1 -d\ ) +DOCKER_IMAGE_NAME=grpc_linuxbrew_$sha1 + +docker build -t $DOCKER_IMAGE_NAME tools/jenkins/grpc_linuxbrew \ + >> report.xml || DOCKER_FAILED="true" + +echo "finished" From 1ad5ea59635248e9790965f45dd00e07a1686ce0 Mon Sep 17 00:00:00 2001 From: Stanley Cheung Date: Fri, 10 Jul 2015 16:07:44 -0700 Subject: [PATCH 2/2] jenkins linuxbrew: review changes --- tools/jenkins/grpc_linuxbrew/Dockerfile | 40 +++++++------------------ tools/jenkins/run_linuxbrew.sh | 24 +++++++++++---- 2 files changed, 29 insertions(+), 35 deletions(-) diff --git a/tools/jenkins/grpc_linuxbrew/Dockerfile b/tools/jenkins/grpc_linuxbrew/Dockerfile index 039b12d49ec..9b76e3cea0b 100644 --- a/tools/jenkins/grpc_linuxbrew/Dockerfile +++ b/tools/jenkins/grpc_linuxbrew/Dockerfile @@ -33,50 +33,30 @@ FROM debian:jessie # Core dependencies RUN apt-get update && apt-get install -y \ - bzip2 curl g++ gawk git m4 make patch ruby tcl wget + bzip2 curl git ruby wget # Install linuxbrew -WORKDIR /home/linuxbrew ENV PATH /home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH -ENV SHELL /bin/bash RUN git clone https://github.com/Homebrew/linuxbrew.git /home/linuxbrew/.linuxbrew RUN brew doctor || true -# Install gRPC via linuxbrew -RUN curl -fsSL https://goo.gl/getgrpc | bash - - +# Python dependency +RUN apt-get update && apt-get install -y python-dev +RUN curl https://bootstrap.pypa.io/get-pip.py | python # NodeJS dependency -RUN curl -sL https://deb.nodesource.com/setup | bash - -RUN apt-get install -y nodejs - -# Install gRPC NodeJS via linuxbrew -RUN curl -fsSL https://goo.gl/getgrpc | bash -s nodejs - +RUN touch .profile +RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash +RUN /bin/bash -l -c "nvm install 0.12" # Ruby dependency RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 RUN /bin/bash -l -c "\curl -sSL https://get.rvm.io | bash -s stable" RUN /bin/bash -l -c "rvm install ruby-2.1" -RUN /bin/bash -l -c "echo 'export PATH=/home/linuxbrew/.linuxbrew/bin:$PATH' > ~/.bashrc" -RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.1' >> ~/.bashrc" - -# Install gRPC Ruby via linuxbrew -RUN /bin/bash -l -c "curl -fsSL https://goo.gl/getgrpc | bash -s ruby" - # PHP dependency -RUN apt-get update && apt-get install -y \ - php5 php5-dev phpunit unzip - -# Install gRPC PHP via linuxbrew -RUN curl -fsSL https://goo.gl/getgrpc | bash -s php - +RUN apt-get update && apt-get install -y php5 php5-dev phpunit unzip -# Python dependency -RUN apt-get update && apt-get install -y \ - python-dev -RUN curl https://bootstrap.pypa.io/get-pip.py | python +RUN /bin/bash -l -c "echo 'export PATH=/home/linuxbrew/.linuxbrew/bin:\$PATH' >> ~/.bashrc" -# Install gRPC Python via linuxbrew -RUN curl -fsSL https://goo.gl/getgrpc | bash -s python +CMD ["bash"] diff --git a/tools/jenkins/run_linuxbrew.sh b/tools/jenkins/run_linuxbrew.sh index 74e7c78c3bc..10c41b4099d 100644 --- a/tools/jenkins/run_linuxbrew.sh +++ b/tools/jenkins/run_linuxbrew.sh @@ -28,14 +28,28 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# This script is invoked by Jenkins and triggers a test run based on -# env variable settings. +# This script is invoked by Jenkins and triggers a test run of +# linuxbrew installation of a selected language set -ex sha1=$(sha1sum tools/jenkins/grpc_linuxbrew/Dockerfile | cut -f1 -d\ ) DOCKER_IMAGE_NAME=grpc_linuxbrew_$sha1 -docker build -t $DOCKER_IMAGE_NAME tools/jenkins/grpc_linuxbrew \ - >> report.xml || DOCKER_FAILED="true" +docker build -t $DOCKER_IMAGE_NAME tools/jenkins/grpc_linuxbrew -echo "finished" +supported="python nodejs ruby php" + +if [ "$language" == "core" ]; then + command="curl -fsSL https://goo.gl/getgrpc | bash -" +elif [[ "$supported" =~ "$language" ]]; then + command="curl -fsSL https://goo.gl/getgrpc | bash -s $language" +else + echo "unsupported language $language" + exit 1 +fi + +docker run $DOCKER_IMAGE_NAME bash -l \ + -c "nvm use 0.12; \ + npm set unsafe-perm true; \ + rvm use ruby-2.1; \ + $command"