aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/jenkins
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-09-30 07:15:05 -0700
committerGravatar Craig Tiller <ctiller@google.com>2015-09-30 07:15:05 -0700
commit32ba3439e317cc900d7e4bf1478f57807090316d (patch)
tree70f8ec9dded48620975d8011113a305490c4c4d1 /tools/jenkins
parent3ba6bf57d70e17e8c172dab6f9f352f15cd8b26b (diff)
parentbd7682fe9954200e9806fd6714ca420fd6d35916 (diff)
Merge pull request #3373 from jtattermusch/spawn_interop_server
Simplify running of cloud_to_cloud interop tests.
Diffstat (limited to 'tools/jenkins')
-rwxr-xr-xtools/jenkins/build_docker_and_run_interop_tests.sh111
-rwxr-xr-xtools/jenkins/docker_prepare_interop_tests.sh79
-rwxr-xr-xtools/jenkins/docker_run_interop_servers.sh50
-rwxr-xr-xtools/jenkins/docker_run_interop_tests.sh39
-rwxr-xr-xtools/jenkins/docker_run_tests.sh3
-rwxr-xr-xtools/jenkins/run_distribution.sh2
-rwxr-xr-xtools/jenkins/run_jenkins.sh9
7 files changed, 288 insertions, 5 deletions
diff --git a/tools/jenkins/build_docker_and_run_interop_tests.sh b/tools/jenkins/build_docker_and_run_interop_tests.sh
new file mode 100755
index 0000000000..d2d56d947b
--- /dev/null
+++ b/tools/jenkins/build_docker_and_run_interop_tests.sh
@@ -0,0 +1,111 @@
+#!/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 run_interop_tests.py to accommodate
+# "interop tests under docker" scenario. You should never need to call this
+# script on your own.
+
+set -ex
+
+cd `dirname $0`/../..
+git_root=`pwd`
+cd -
+
+mkdir -p /tmp/ccache
+
+# Use image name based on Dockerfile checksum
+DOCKER_IMAGE_NAME=grpc_jenkins_slave${docker_suffix}_`sha1sum tools/jenkins/grpc_jenkins_slave/Dockerfile | cut -f1 -d\ `
+
+# Make sure docker image has been built. Should be instantaneous if so.
+docker build -t $DOCKER_IMAGE_NAME tools/jenkins/grpc_jenkins_slave$docker_suffix
+
+# Create a local branch so the child Docker script won't complain
+git branch -f jenkins-docker
+
+# Make sure the CID files are gone.
+rm -f prepare.cid server.cid client.cid
+
+# Prepare image for interop tests
+docker run \
+ -e CCACHE_DIR=/tmp/ccache \
+ -i $TTY_FLAG \
+ -v "$git_root:/var/local/jenkins/grpc" \
+ -v /tmp/ccache:/tmp/ccache \
+ --cidfile=prepare.cid \
+ $DOCKER_IMAGE_NAME \
+ bash -l /var/local/jenkins/grpc/tools/jenkins/docker_prepare_interop_tests.sh || DOCKER_FAILED="true"
+
+PREPARE_CID=`cat prepare.cid`
+
+# Create image from the container, we will spawn one docker for clients
+# and one for servers.
+INTEROP_IMAGE=interop_`uuidgen`
+docker commit $PREPARE_CID $INTEROP_IMAGE
+# remove container, possibly killing it first
+docker rm -f $PREPARE_CID || true
+echo "Successfully built image $INTEROP_IMAGE"
+
+# run interop servers under docker in the background
+docker run \
+ -d -i \
+ $SERVERS_DOCKER_EXTRA_ARGS \
+ --cidfile=server.cid \
+ $INTEROP_IMAGE bash -l /var/local/git/grpc/tools/jenkins/docker_run_interop_servers.sh
+
+SERVER_CID=`cat server.cid`
+
+SERVER_PORTS=""
+for tuple in $SERVER_PORT_TUPLES
+do
+ # lookup under which port docker exposes given internal port
+ exposed_port=`docker port $SERVER_CID ${tuple#*:} | awk -F ":" '{print $NF}'`
+
+ # override the port for corresponding cloud_to_cloud server
+ SERVER_PORTS+=" --override_server ${tuple%:*}=localhost:$exposed_port"
+ echo "${tuple%:*} server is exposed under port $exposed_port"
+done
+
+# run interop clients
+docker run \
+ -e "RUN_TESTS_COMMAND=$RUN_TESTS_COMMAND $SERVER_PORTS" \
+ -w /var/local/git/grpc \
+ -i $TTY_FLAG \
+ --net=host \
+ --cidfile=client.cid \
+ $INTEROP_IMAGE bash -l /var/local/git/grpc/tools/jenkins/docker_run_interop_tests.sh || DOCKER_FAILED="true"
+
+CLIENT_CID=`cat client.cid`
+
+echo "killing and removing server container $SERVER_CID"
+docker rm -f $SERVER_CID || true
+
+docker cp $CLIENT_CID:/var/local/git/grpc/report.xml $git_root
+docker rm -f $CLIENT_CID || true
+docker rmi -f $DOCKER_IMAGE_NAME || true
diff --git a/tools/jenkins/docker_prepare_interop_tests.sh b/tools/jenkins/docker_prepare_interop_tests.sh
new file mode 100755
index 0000000000..a1fe0b72d2
--- /dev/null
+++ b/tools/jenkins/docker_prepare_interop_tests.sh
@@ -0,0 +1,79 @@
+#!/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 run_jekins.sh. It contains the test logic
+# that should run inside a docker container.
+set -e
+
+mkdir -p /var/local/git
+git clone --recursive /var/local/jenkins/grpc /var/local/git/grpc
+
+cd /var/local/git/grpc
+nvm use 0.12
+rvm use ruby-2.1
+
+# TODO(jtattermusch): use cleaner way to install root certs
+mkdir -p /usr/local/share/grpc
+cp etc/roots.pem /usr/local/share/grpc/
+
+# build C++ interop client & server
+make interop_client interop_server
+
+# build C# interop client & server
+make install_grpc_csharp_ext
+(cd src/csharp && mono /var/local/NuGet.exe restore Grpc.sln)
+(cd src/csharp && xbuild Grpc.sln)
+
+# build Node interop client & server
+npm install -g node-gyp
+make install_c -C /var/local/git/grpc
+(cd src/node && npm install && node-gyp rebuild)
+
+# build Ruby interop client and server
+(cd src/ruby && gem update bundler && bundle && rake compile:grpc)
+
+# TODO(jtattermusch): add python
+
+# build PHP interop client
+# TODO(jtattermusch): prerequisites for PHP should be installed sooner than here.
+# Install composer
+curl -sS https://getcomposer.org/installer | php
+mv composer.phar /usr/local/bin/composer
+# Download the patched PHP protobuf so that PHP gRPC clients can be generated
+# from proto3 schemas.
+git clone https://github.com/stanley-cheung/Protobuf-PHP.git /var/local/git/protobuf-php
+(cd src/php/ext/grpc && phpize && ./configure && make)
+rvm all do gem install ronn rake
+(cd third_party/protobuf && make install)
+(cd /var/local/git/protobuf-php \
+ && rvm all do rake pear:package version=1.0 \
+ && pear install Protobuf-1.0.tgz)
+(cd src/php && composer install)
+(cd src/php && protoc-gen-php -i tests/interop/ -o tests/interop/ tests/interop/test.proto)
diff --git a/tools/jenkins/docker_run_interop_servers.sh b/tools/jenkins/docker_run_interop_servers.sh
new file mode 100755
index 0000000000..9f29a65aaa
--- /dev/null
+++ b/tools/jenkins/docker_run_interop_servers.sh
@@ -0,0 +1,50 @@
+#!/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 run_jekins.sh. It contains the test logic
+# that should run inside a docker container.
+set -e
+
+cd /var/local/git/grpc
+nvm use 0.12
+rvm use ruby-2.1
+
+# If port env variable is set, run corresponding interop server on given port in background.
+# TODO(jtattermusch): ideally, run_interop_tests.py would generate the commands to run servers.
+
+[ -z "${SERVER_PORT_cxx}" ] || bins/opt/interop_server --enable_ssl --port=${SERVER_PORT_cxx} &
+
+[ -z "${SERVER_PORT_node}" ] || node src/node/interop/interop_server.js --use_tls=true --port=${SERVER_PORT_node} &
+
+[ -z "${SERVER_PORT_ruby}" ] || ruby src/ruby/bin/interop/interop_server.rb --use_tls --port=${SERVER_PORT_ruby} &
+
+[ -z "${SERVER_PORT_csharp}" ] || (cd src/csharp/Grpc.IntegrationTesting.Server/bin/Debug && mono Grpc.IntegrationTesting.Server.exe --use_tls --port=${SERVER_PORT_csharp}) &
+
+sleep infinity
diff --git a/tools/jenkins/docker_run_interop_tests.sh b/tools/jenkins/docker_run_interop_tests.sh
new file mode 100755
index 0000000000..29970afb25
--- /dev/null
+++ b/tools/jenkins/docker_run_interop_tests.sh
@@ -0,0 +1,39 @@
+#!/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 build_docker_and_run_interop_tests.sh inside
+# a docker container. You should never need to call this script on your own.
+set -e
+
+nvm use 0.12
+rvm use ruby-2.1
+
+# run the cloud-to-prod interop tests
+$RUN_TESTS_COMMAND
diff --git a/tools/jenkins/docker_run_tests.sh b/tools/jenkins/docker_run_tests.sh
index 781bff26b9..3595a95f5c 100755
--- a/tools/jenkins/docker_run_tests.sh
+++ b/tools/jenkins/docker_run_tests.sh
@@ -28,8 +28,9 @@
# (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 build_docker_and_run_tests.py inside a docker
+# This script is invoked by build_docker_and_run_tests.sh inside a docker
# container. You should never need to call this script on your own.
+
set -e
export CONFIG=$config
diff --git a/tools/jenkins/run_distribution.sh b/tools/jenkins/run_distribution.sh
index 49b7d306d1..64c60f1502 100755
--- a/tools/jenkins/run_distribution.sh
+++ b/tools/jenkins/run_distribution.sh
@@ -54,7 +54,7 @@ if [ "$platform" == "linux" ]; then
docker build -t $DOCKER_IMAGE_NAME tools/jenkins/grpc_linuxbrew
# run per-language homebrew installation script
- docker run $DOCKER_IMAGE_NAME bash -l \
+ docker run --rm=true $DOCKER_IMAGE_NAME bash -l \
-c "nvm use 0.12; \
npm set unsafe-perm true; \
rvm use ruby-2.1; \
diff --git a/tools/jenkins/run_jenkins.sh b/tools/jenkins/run_jenkins.sh
index c4a01a7d66..f79e739f6a 100755
--- a/tools/jenkins/run_jenkins.sh
+++ b/tools/jenkins/run_jenkins.sh
@@ -56,9 +56,6 @@ then
./tools/run_tests/run_tests.py --use_docker -t -l $language -c $config -x report.xml $@ || true
-elif [ "$platform" == "interop" ]
-then
- python tools/run_tests/run_interops.py --language=$language $@
elif [ "$platform" == "windows" ]
then
echo "building $language on Windows"
@@ -83,6 +80,12 @@ then
echo "building $language on FreeBSD"
MAKE=gmake ./tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || true
+
+elif [ "$platform" == "interop" ]
+then
+ echo "building interop tests for language $language"
+
+ ./tools/run_tests/run_interop_tests.py --use_docker -t -l $language --cloud_to_prod --server all || true
else
echo "Unknown platform $platform"
exit 1