common.sh 6.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/bin/bash

# Copyright 2016 The Kubernetes Authors All rights reserved.
#
# Licensed 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.


# This script downloads the test files from the build bucket and makes some executable.

X
Xinbo Weng 已提交
20
# The script expects the following env variables:
21
# OS_ARCH: The operating system and the architecture separated by a hyphen '-' (e.g. darwin-amd64, linux-amd64, windows-amd64)
M
Matt Rickard 已提交
22
# VM_DRIVER: the vm-driver to use for the test
23 24
# EXTRA_START_ARGS: additional flags to pass into minikube start
# EXTRA_ARGS: additional flags to pass into minikube
M
Matt Rickard 已提交
25
# JOB_NAME: the name of the logfile and check name to update on github
26 27
#

28

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
readonly TEST_ROOT="${HOME}/minikube-integration"
readonly TEST_HOME="${TEST_ROOT}/${OS_ARCH}-${VM_DRIVER}-${MINIKUBE_LOCATION}-$$-${COMMIT}"
echo ">> Starting at $(date)"
echo ""
echo "arch:      ${OS_ARCH}"
echo "build:     ${MINIKUBE_LOCATION}"
echo "driver:    ${VM_DRIVER}"
echo "job:       ${JOB_NAME}"
echo "test home: ${TEST_HOME}"
echo "sudo:      ${SUDO_PREFIX}"
echo "kernel:    $(uname -v)"
# Setting KUBECONFIG prevents the version ceck from erroring out due to permission issues
echo "kubectl:   $(env KUBECONFIG=${TEST_HOME} kubectl version --client --short=true)"
echo "docker:    $(docker version --format '{{ .Client.Version }}')"

case "${VM_DRIVER}" in
  kvm2)
    echo "virsh:     $(virsh --version)"
  ;;
  virtualbox)
    echo "vbox:      $(vboxmanage --version)"
  ;;
esac

echo ""
mkdir -p out/ testdata/ "${TEST_HOME}"
55 56

# Install gsutil if necessary.
57
if ! type -P gsutil >/dev/null; then
58 59 60 61
  if [[ ! -x "out/gsutil/gsutil" ]]; then
    echo "Installing gsutil to $(pwd)/out ..."
    curl -s https://storage.googleapis.com/pub/gsutil.tar.gz | tar -C out/ -zxf -
  fi
62
  PATH="$(pwd)/out/gsutil:$PATH"
63 64 65
fi

# Add the out/ directory to the PATH, for using new drivers.
66 67
PATH="$(pwd)/out/":$PATH
export PATH
68

69 70 71 72 73 74
echo ""
echo ">> Downloading test inputs from ${MINIKUBE_LOCATION} ..."
gsutil -qm cp \
  "gs://minikube-builds/${MINIKUBE_LOCATION}/minikube-${OS_ARCH}" \
  "gs://minikube-builds/${MINIKUBE_LOCATION}/docker-machine-driver"-* \
  "gs://minikube-builds/${MINIKUBE_LOCATION}/e2e-${OS_ARCH}" out
D
dlorenc 已提交
75

76
gsutil -qm cp "gs://minikube-builds/${MINIKUBE_LOCATION}/testdata"/* testdata/
D
dlorenc 已提交
77

78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
# Set the executable bit on the e2e binary and out binary
export MINIKUBE_BIN="out/minikube-${OS_ARCH}"
export E2E_BIN="out/e2e-${OS_ARCH}"
chmod +x "${MINIKUBE_BIN}" "${E2E_BIN}" out/docker-machine-driver-*

echo ""
echo ">> Cleaning up after previous test runs ..."

# Cleanup stale test outputs.
pgrep minikube && echo "WARNING: other instances of minikube may be running"

for stale_dir in "${TEST_ROOT}"/*; do
  echo "* Cleaning stale test: ${stale_dir}"
  export MINIKUBE_HOME="${stale_dir}/.minikube"
  export KUBECONFIG="${stale_dir}/kubeconfig"

  if [[ -d "${MINIKUBE_HOME}" ]]; then
    echo "Shutting down stale minikube instance ..."
    if [[ -w "${MINIKUBE_HOME}" ]]; then
        "${MINIKUBE_BIN}" delete || true
        rm -Rf "${MINIKUBE_HOME}"
    else
      sudo -E "${MINIKUBE_BIN}" delete || true
      sudo rm -Rf "${MINIKUBE_HOME}"
    fi
  fi
M
Matt Rickard 已提交
104

105 106 107 108 109 110 111
  if [[ -f "${KUBECONFIG}" ]]; then
    if [[ -w "${KUBECONFIG}" ]]; then
      rm -f "${KUBECONFIG}"
    else
      sudo rm -f "${KUBECONFIG}" || true
    fi
  fi
D
dlorenc 已提交
112

113 114
  rmdir "${stale_dir}" || true
done
115

116 117 118 119 120 121 122
if type -P virsh; then
  virsh -c qemu:///system list --all
  virsh -c qemu:///system list --all \
    | grep minikube \
    | awk '{ print $2 }' \
    | xargs -I {} sh -c "virsh -c qemu:///system destroy {}; virsh -c qemu:///system undefine {}"
fi
123

124 125 126 127 128 129 130 131 132 133 134 135
if type -P vboxmanage; then
  vboxmanage list vms
  vboxmanage list vms \
    | cut -d'"' -f2 \
    | xargs -I {} sh -c "vboxmanage startvm {} --type emergencystop; vboxmanage unregistervm {} --delete" \
    || true
fi

if type -P hdiutil; then
  hdiutil info | grep -E "/dev/disk[1-9][^s]"
  hdiutil info \
      | grep -E "/dev/disk[1-9][^s]" \
136
      | awk '{print $1}' \
137 138
      | xargs -I {} sh -c "hdiutil detach {}" \
      || true
139
fi
140

141 142 143 144 145 146 147
if [[ "${OS_ARCH}" == "Darwin" ]]; then
  pgrep xhyve | xargs kill || true
  if [[ -e out/docker-machine-driver-hyperkit ]]; then
    sudo chown root:wheel out/docker-machine-driver-hyperkit || true
   sudo chmod u+s out/docker-machine-driver-hyperkit || true
  fi
fi
D
dlorenc 已提交
148

149 150 151
if pgrep kubectl; then
  echo "stale kubectl processes found: $(pgrep kubectl)"
  pgrep kubectl | xargs kill
D
dlorenc 已提交
152
fi
M
Matt Rickard 已提交
153

154 155 156 157 158 159
# Respected by minikube
export MINIKUBE_HOME="${TEST_HOME}/.minikube"
export MINIKUBE_WANTREPORTERRORPROMPT=False

# Respected by kubectl
export KUBECONFIG="${TEST_HOME}/kubeconfig"
160

161 162 163 164
# Display the default image URL
echo ""
echo ">> ISO URL"
"${MINIKUBE_BIN}" start -h | grep iso-url
M
Matt Rickard 已提交
165

166 167 168
echo ""
echo ">> Starting ${E2E_BIN} at $(date)"
${SUDO_PREFIX}${E2E_BIN} \
169 170
  -minikube-start-args="--vm-driver=${VM_DRIVER} ${EXTRA_START_ARGS}" \
  -minikube-args="--v=10 --logtostderr ${EXTRA_ARGS}" \
171 172 173
  -test.v -test.timeout=30m -binary="${MINIKUBE_BIN}" && result=$? || result=$?
echo ">> ${E2E_BIN} exited with ${result} at $(date)"
echo ""
174

M
Matt Rickard 已提交
175 176
if [[ $result -eq 0 ]]; then
  status="success"
177
  echo "minikube: SUCCESS"
M
Matt Rickard 已提交
178 179
else
  status="failure"
180
  echo "minikube: FAIL"
181
  source print-debug-info.sh
M
Matt Rickard 已提交
182 183
fi

184 185 186 187 188 189 190
echo ">> Cleaning up after ourselves ..."
${SUDO_PREFIX}${MINIKUBE_BIN} delete >/dev/null 2>/dev/null || true
${SUDO_PREFIX} rm -Rf "${MINIKUBE_HOME}"
${SUDO_PREFIX} rm -f "${KUBECONFIG}"
rmdir "${TEST_HOME}"
echo ">> ${TEST_HOME} completed at $(date)"

191 192 193
if [[ "${MINIKUBE_LOCATION" != "master" ]]; then
  readonly target_url="https://storage.googleapis.com/minikube-builds/logs/${MINIKUBE_LOCATION}/${JOB_NAME}.txt"
  curl "https://api.github.com/repos/kubernetes/minikube/statuses/${COMMIT}?access_token=$access_token" \
M
Matt Rickard 已提交
194 195 196
  -H "Content-Type: application/json" \
  -X POST \
  -d "{\"state\": \"$status\", \"description\": \"Jenkins\", \"target_url\": \"$target_url\", \"context\": \"${JOB_NAME}\"}"
197
fi
198
exit $result