You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2018/05/09 12:44:27 UTC

[GitHub] csantanapr closed pull request #187: include Helm-based deployment in TravisCI matrix

csantanapr closed pull request #187: include Helm-based deployment in TravisCI matrix
URL: https://github.com/apache/incubator-openwhisk-deploy-kube/pull/187
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/.travis.yml b/.travis.yml
index 7b38ed4..35de9c9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,10 +5,11 @@ env:
   - secure: d7CuMXbhT83W2x78qiLwgogX1+3aPicd1PlTwwNNDN6QSkImbxareyKThnsqlHIiNj3o5l5DBuiYjy7wrF/xD1g8BQMmTwm99DRx5q3CI3Im3VCi/ZK8SaNjuOy24d7cf5k2tB/87Gk7zmKsMDYm+fpCl+GpgUmIEeIwthiAxuXSDWZ8eQPIptmxj56DeFRNouvXG+dEUtBfWiwN27UPxNKExCixFnegmdtffLbz6hhst7BHr5Ry9acbycre98PCwWZcu9lxFs+SJ1kvnzX2iue4otmDkF1WkJjxaOFPJVs/D3YItg+neLCSxjwBskPed+Fct8bOjcM/uVROJPNIq5icBmaPX2isH0lvtxOeVw/dmioWYXYPN9ygBOe4eO/vtPllN0bcAUo5xl9jXev8ciAozYrYpHVh9Fplfd81rcYTeYzALmRJBdoiWoc3KQGzwGc9sB1ffmy+KWgG9T0zbnS4fALSR4PSzyNlKSLXw9vuvdNP0OBYtO+6yTJXavIxqmDoj64Lb93n+uGPatnaIGPTKEEBMJTSjsgYVEfxzzZuxUT9Ldkf2lzqvN2PCllGoMqxkgsdb8i4v4QgRaMWBDbKa5Va4k0O4dnhRmtdbJavOSKN6fECJbyfoJlV1VvJGxk5znVLRznBmUPBKbNccyPZJULugKD3QIh4q8Q5jBU=
   - secure: CJtnU94HTDqd4A6uvhFl8IpnmU+wTdlzb8bPBFUl/lI/VKXiRrYpgJdKUro5xEoxFKuqMprLhbyf66niyWLTIeogjUAEu/h/o2dBVeGgSGKoqC0hQgqvnxKFeGlzFJ0XuEs3vbStJGRnQszGsfnnDrscJtR0x9X+1w4aBKI7iPyyuFtVkDD1UsmBbSi+M8FTeq7G7A0reMDaey7uog3CFCpIMl4geshcohQEcKEGbnXQZoLPFpb7cBOE83VXBJ7Y7Dgf/U4keiLovvnuJThGKZm/SVV2KlELmBmtmbx3rMT6Vb5k9ChSdRWapromNnnzmJBIQ5Scc2mwV3A93/SMha1F3IlYpDKs5djfTw8jZfVnuiou7HhTaRjHkmmcwP12/k30gLe2kw0Vezg1TCY4zgtOpcmCxc8RHEy0ceA74rKvRi8LbexTCwX+iAMQFn/pSrh/OqAq/50JbLyczcoO1zXWS38txUQNLW8i+XllhCg9pjkjyfBeGjOOcWiVIz9rWJd2XufjSXDcj6xoZHtkh1XDt1CnVkpsYKtyyZucQnhUM9ebmaWqbSW2+bpqC/2hI+G+kOyyCesGdB1q+VmN1augMMs6RgWjk4yw5dyLAshATSoUlE8KH2cDcJL19r4ECaQ99PSLwxoB89yfPoJiNc42vwxRdsLmB1BMNyPa81Y=
   matrix:
-    - OW_CONTAINER_FACTORY=docker TRAVIS_KUBE_VERSION=v1.7.4 TRAVIS_MINIKUBE_VERSION=v0.23.0
-    - OW_CONTAINER_FACTORY=docker TRAVIS_KUBE_VERSION=v1.8.0 TRAVIS_MINIKUBE_VERSION=v0.25.2
-    - OW_CONTAINER_FACTORY=docker TRAVIS_KUBE_VERSION=v1.9.0 TRAVIS_MINIKUBE_VERSION=v0.25.2
-    - OW_CONTAINER_FACTORY=kube   TRAVIS_KUBE_VERSION=v1.8.0 TRAVIS_MINIKUBE_VERSION=v0.25.2
+    - TRAVIS_USE_HELM=false OW_CONTAINER_FACTORY=docker TRAVIS_KUBE_VERSION=v1.7.4 TRAVIS_MINIKUBE_VERSION=v0.23.0
+    - TRAVIS_USE_HELM=false OW_CONTAINER_FACTORY=docker TRAVIS_KUBE_VERSION=v1.8.0 TRAVIS_MINIKUBE_VERSION=v0.25.2
+    - TRAVIS_USE_HELM=false OW_CONTAINER_FACTORY=docker TRAVIS_KUBE_VERSION=v1.9.0 TRAVIS_MINIKUBE_VERSION=v0.25.2
+    - TRAVIS_USE_HELM=true  OW_CONTAINER_FACTORY=docker TRAVIS_KUBE_VERSION=v1.9.0 TRAVIS_MINIKUBE_VERSION=v0.25.2
+    - TRAVIS_USE_HELM=false OW_CONTAINER_FACTORY=kube   TRAVIS_KUBE_VERSION=v1.8.0 TRAVIS_MINIKUBE_VERSION=v0.25.2
 
 services:
   - docker
@@ -26,9 +27,10 @@ before_install:
 
 script:
   - ./tools/travis/scancode.sh
+  - ./tools/travis/build-helm.sh
   - ./tools/travis/build.sh
   - ./tools/travis/collect-logs.sh
-  - ./tools/travis/box-upload.py "logs" "deploy-kube-$TRAVIS_BUILD_ID-$TRAVIS_BRANCH.tar.gz"
+  - ./tools/travis/box-upload.py "logs" "deploy-kube-$TRAVIS_BUILD_ID-$TRAVIS_BRANCH-$TRAVIS_JOB_NUMBER.tar.gz"
 
 deploy:
 - provider: script
diff --git a/tools/travis/build-helm.sh b/tools/travis/build-helm.sh
new file mode 100755
index 0000000..495f7fc
--- /dev/null
+++ b/tools/travis/build-helm.sh
@@ -0,0 +1,189 @@
+#!/bin/bash
+
+#################
+# Helper functions for verifying pod creation
+#################
+
+deploymentHealthCheck () {
+  if [ -z "$1" ]; then
+    echo "Error, component health check called without a component parameter"
+    exit 1
+  fi
+
+  PASSED=false
+  TIMEOUT=0
+  until $PASSED || [ $TIMEOUT -eq $TIMEOUT_STEP_LIMIT ]; do
+    KUBE_DEPLOY_STATUS=$(kubectl -n openwhisk get pods -l name="$1" -o wide | grep "$1" | awk '{print $3}')
+    if [ "$KUBE_DEPLOY_STATUS" == "Running" ]; then
+      PASSED=true
+      break
+    fi
+
+    kubectl get pods --all-namespaces -o wide --show-all
+
+    let TIMEOUT=TIMEOUT+1
+    sleep 10
+  done
+
+  if [ "$PASSED" = false ]; then
+    echo "Failed to finish deploying $1"
+
+    kubectl -n openwhisk logs $(kubectl -n openwhisk get pods -l name="$1" -o wide | grep "$1" | awk '{print $1}')
+    exit 1
+  fi
+
+  echo "$1 is up and running"
+}
+
+statefulsetHealthCheck () {
+  if [ -z "$1" ]; then
+    echo "Error, StatefulSet health check called without a parameter"
+    exit 1
+  fi
+
+  PASSED=false
+  TIMEOUT=0
+  until $PASSED || [ $TIMEOUT -eq $TIMEOUT_STEP_LIMIT ]; do
+    KUBE_DEPLOY_STATUS=$(kubectl -n openwhisk get pods -l name="$1" -o wide | grep "$1"-0 | awk '{print $3}')
+    if [ "$KUBE_DEPLOY_STATUS" == "Running" ]; then
+      PASSED=true
+      break
+    fi
+
+    kubectl get pods --all-namespaces -o wide --show-all
+
+    let TIMEOUT=TIMEOUT+1
+    sleep 10
+  done
+
+  if [ "$PASSED" = false ]; then
+    echo "Failed to finish deploying $1"
+
+    kubectl -n openwhisk logs $(kubectl -n openwhisk get pods -o wide | grep "$1"-0 | awk '{print $1}')
+    exit 1
+  fi
+
+  echo "$1-0 is up and running"
+
+}
+
+jobHealthCheck () {
+  if [ -z "$1" ]; then
+    echo "Error, job health check called without a component parameter"
+    exit 1
+  fi
+
+  PASSED=false
+  TIMEOUT=0
+  until $PASSED || [ $TIMEOUT -eq $TIMEOUT_STEP_LIMIT ]; do
+    KUBE_SUCCESSFUL_JOB=$(kubectl -n openwhisk get jobs -o wide | grep "$1" | awk '{print $3}')
+    if [ "$KUBE_SUCCESSFUL_JOB" == "1" ]; then
+      PASSED=true
+      break
+    fi
+
+    kubectl get jobs --all-namespaces -o wide --show-all
+
+    let TIMEOUT=TIMEOUT+1
+    sleep 10
+  done
+
+  if [ "$PASSED" = false ]; then
+    echo "Failed to finish running $1"
+
+    kubectl -n openwhisk logs jobs/$1
+    exit 1
+  fi
+
+  echo "$1 completed"
+}
+
+
+#################
+# Main body of script -- deploy OpenWhisk
+#################
+
+set -x
+
+SCRIPTDIR=$(cd $(dirname "$0") && pwd)
+ROOTDIR="$SCRIPTDIR/../../"
+
+# If TRAVIS and !TRAVIS_USE_HELM, just exit (don't test HELM deploy)
+if [[ "$TRAVIS" = "true" ]] && [[ "$TRAVIS_USE_HELM" = "false" ]]; then
+    exit 0
+fi
+
+# Default to docker container factory if not specified
+OW_CONTAINER_FACTORY=${OW_CONTAINER_FACTORY:="docker"}
+
+# Default timeout limit to 60 steps
+TIMEOUT_STEP_LIMIT=${TIMEOUT_STEP_LIMIT:=60}
+
+# Label invoker nodes (needed for DockerContainerFactory-based invoker deployment)
+echo "Labeling invoker node"
+kubectl label nodes --all openwhisk-role=invoker
+kubectl describe nodes
+
+# Create namespace
+echo "Create openwhisk namespace"
+kubectl create namespace openwhisk
+
+# configure Ingress and wsk CLI
+#
+# FIXME: Helm deploy hardwires ports to specific values -- need to make this less fragile!
+WSK_PORT=31001
+APIGW_PORT=31004
+WSK_HOST=$(kubectl describe nodes | grep Hostname: | awk '{print $2}')
+if [ "$WSK_HOST" = "minikube" ]; then
+    WSK_HOST=$(minikube ip)
+fi
+wsk property set --auth `cat $ROOTDIR/kubernetes/cluster-setup/auth.guest` --apihost $WSK_HOST:$WSK_PORT
+
+# Deploy OpenWhisk using Helm
+cd $ROOTDIR/helm
+
+cat > mycluster.yaml <<EOF
+whisk:
+  ingress:
+    api_host: $WSK_HOST:$WSK_PORT
+    apigw_url: $WSK_HOST:$APIGW_PORT
+EOF
+
+cat mycluster.yaml
+
+helm install . --namespace=openwhisk --name=ow4travis -f mycluster.yaml
+
+# Wait for controller and invoker to be up
+statefulsetHealthCheck "controller"
+deploymentHealthCheck "invoker"
+
+#################
+# Sniff test: create and invoke a simple Hello world action
+#################
+
+# create wsk action
+cat > hello.js << EOL
+function main() {
+  return {payload: 'Hello world'};
+}
+EOL
+
+wsk -i action create hello hello.js
+
+sleep 5
+
+# run the new hello world action
+RESULT=$(wsk -i action invoke --blocking hello | grep "\"status\": \"success\"")
+
+if [ -z "$RESULT" ]; then
+  echo "FAILED! Could not invoked custom action"
+
+  echo " ----------------------------- controller logs ---------------------------"
+  kubectl -n openwhisk logs controller-0
+
+  echo " ----------------------------- invoker logs ---------------------------"
+  kubectl -n openwhisk logs -l name=invoker
+  exit 1
+fi
+
+echo "PASSED! Deployed openwhisk and invoked Hello action"
diff --git a/tools/travis/build.sh b/tools/travis/build.sh
index d023c38..edec5bf 100755
--- a/tools/travis/build.sh
+++ b/tools/travis/build.sh
@@ -135,6 +135,11 @@ set -x
 SCRIPTDIR=$(cd $(dirname "$0") && pwd)
 ROOTDIR="$SCRIPTDIR/../../"
 
+# If TRAVIS and TRAVIS_USE_HELM, just exit (don't test non-HELM deploy)
+if [[ "$TRAVIS" = "true" ]] && [[ "$TRAVIS_USE_HELM" = "true" ]]; then
+    exit 0
+fi
+
 # Default to docker container factory if not specified
 OW_CONTAINER_FACTORY=${OW_CONTAINER_FACTORY:="docker"}
 
diff --git a/tools/travis/setup.sh b/tools/travis/setup.sh
index d952477..cd40d29 100755
--- a/tools/travis/setup.sh
+++ b/tools/travis/setup.sh
@@ -3,6 +3,33 @@
 
 set -x
 
+#check_or_build_nsenter derived from https://github.com/bitnami/kubernetes-travis/blob/master/scripts/cluster-up-minikube.sh (Apache 2.0 License)
+check_or_build_nsenter() {
+    which nsenter >/dev/null && return 0
+    echo "INFO: Building 'nsenter' ..."
+cat <<-EOF | docker run -i --rm -v "$(pwd):/build" ubuntu:14.04 >& nsenter.build.log
+        apt-get update
+        apt-get install -qy git bison build-essential autopoint libtool automake autoconf gettext pkg-config
+        git clone --depth 1 git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git /tmp/util-linux
+        cd /tmp/util-linux
+        ./autogen.sh
+        ./configure --without-python --disable-all-programs --enable-nsenter
+        make nsenter
+        cp -pfv nsenter /build
+EOF
+    if [ ! -f ./nsenter ]; then
+        echo "ERROR: nsenter build failed, log:"
+        cat nsenter.build.log
+        return 1
+    fi
+    echo "INFO: nsenter build OK, installing ..."
+    sudo install -v nsenter /usr/local/bin
+}
+
+# helm on minikube's vm-driver=none requires nsenter
+check_or_build_nsenter
+
+
 # download and install the wsk cli
 wget -q https://github.com/apache/incubator-openwhisk-cli/releases/download/latest/OpenWhisk_CLI-latest-linux-amd64.tgz
 tar xzf OpenWhisk_CLI-latest-linux-amd64.tgz
@@ -46,3 +73,35 @@ fi
 
 echo "minikube is deployed and reachable"
 /usr/local/bin/kubectl describe nodes
+
+minikube update-context
+
+# Download and install helm
+curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
+chmod +x get_helm.sh
+./get_helm.sh
+
+# Install tiller
+/usr/local/bin/helm init --service-account default
+
+# Wait for tiller to be ready
+TIMEOUT=0
+TIMEOUT_COUNT=20
+until [ $TIMEOUT -eq $TIMEOUT_COUNT ]; do
+  TILLER_STATUS=$(/usr/local/bin/kubectl -n kube-system get pods -o wide | grep tiller-deploy | awk '{print $3}')
+  if [ "$TILLER_STATUS" == "Running" ]; then
+    break
+  fi
+  echo "Waiting for tiller to be ready"
+  /usr/local/bin/kubectl -n kube-system get pods -o wide
+  let TIMEOUT=TIMEOUT+1
+  sleep 5
+done
+
+if [ $TIMEOUT -eq $TIMEOUT_COUNT ]; then
+  echo "Failed to install tiller"
+  exit 1
+fi
+
+# Create privileged RBAC for tiller
+/usr/local/bin/kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services