diff --git a/.travis.yml b/.travis.yml index 941f42ecb..be5b25a04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,21 +20,18 @@ env: - RELEASE="ci-${TRAVIS_BUILD_ID}" - DOCKER=docker -before_script: - - export PATH=$PATH:$PWD/controllers/nginx/e2e/e2e-internal - jobs: include: - stage: Static Check script: - go get github.com/golang/lint/golint - make fmt lint vet - - stage: Coverage - script: - - go get github.com/mattn/goveralls - - go get github.com/modocache/gover - - if ! go get github.com/golang/tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi - - make cover +# - stage: Coverage +# script: +# - go get github.com/mattn/goveralls +# - go get github.com/modocache/gover +# - if ! go get github.com/golang/tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi +# - make cover - stage: e2e script: - make test-e2e diff --git a/controllers/nginx/e2e/default-backend.yaml b/controllers/nginx/e2e/default-backend.yaml index 3c40989a3..739ae2758 100644 --- a/controllers/nginx/e2e/default-backend.yaml +++ b/controllers/nginx/e2e/default-backend.yaml @@ -4,7 +4,6 @@ metadata: name: default-http-backend labels: k8s-app: default-http-backend - namespace: kube-system spec: replicas: 1 template: @@ -40,7 +39,6 @@ apiVersion: v1 kind: Service metadata: name: default-http-backend - namespace: kube-system labels: k8s-app: default-http-backend spec: diff --git a/controllers/nginx/e2e/e2e-internal/e2e-env.sh b/controllers/nginx/e2e/e2e-internal/e2e-env.sh index adc0c7e98..b6d3a6a97 100755 --- a/controllers/nginx/e2e/e2e-internal/e2e-env.sh +++ b/controllers/nginx/e2e/e2e-internal/e2e-env.sh @@ -3,31 +3,35 @@ export MINIKUBE_VERSION=0.22.0 export K8S_VERSION=v1.7.5 -export PWD=`pwd` -export BASEDIR="$(dirname ${BASH_SOURCE})" -export KUBECTL="${BASEDIR}/kubectl" -export MINIKUBE="${BASEDIR}/minikube" +export KUBECTL="/usr/local/bin/kubectl" +export MINIKUBE="/usr/local/bin/minikube" +export WAIT_FOR_DEPLOYMENT="/usr/local/bin/wait-for-deployment" + export GOOS="${GOOS:-linux}" export MINIKUBE_WANTUPDATENOTIFICATION=false export MINIKUBE_WANTREPORTERRORPROMPT=false export MINIKUBE_HOME=$HOME export CHANGE_MINIKUBE_NONE_USER=true +export MINIKUBE_PROFILE="ingress-e2e" export KUBECONFIG=$HOME/.kube/config -export MINIKUBE_PROFILE="ingress-e2e" - -export PATH=$PATH:$BASEDIR - if [ ! -e ${KUBECTL} ]; then - echo "kubectl binary is missing. downloading..." - curl -sSL http://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/${GOOS}/amd64/kubectl -o ${KUBECTL} - chmod u+x ${KUBECTL} + echo "kubectl binary is missing. downloading binary to ${KUBECTL}" + sudo curl -sSL http://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/${GOOS}/amd64/kubectl -o ${KUBECTL} + sudo chmod +x ${KUBECTL} fi if [ ! -e ${MINIKUBE} ]; then - echo "minikube binary is missing. downloading..." - curl -sSLo ${MINIKUBE} https://storage.googleapis.com/minikube/releases/v${MINIKUBE_VERSION}/minikube-linux-amd64 - chmod +x ${MINIKUBE} + echo "minikube binary is missing. downloading binary to ${MINIKUBE}" + sudo curl -sSLo ${MINIKUBE} https://storage.googleapis.com/minikube/releases/v${MINIKUBE_VERSION}/minikube-linux-amd64 + sudo chmod +x ${MINIKUBE} +fi + +if [ ! -e ${WAIT_FOR_DEPLOYMENT} ]; then + echo "wait-for-deployment script is missing. downloading binary to ${WAIT_FOR_DEPLOYMENT}" + # https://github.com/timoreimann/kubernetes-scripts + sudo curl -sSLo ${WAIT_FOR_DEPLOYMENT} https://raw.githubusercontent.com/timoreimann/kubernetes-scripts/master/wait-for-deployment + sudo chmod +x ${WAIT_FOR_DEPLOYMENT} fi diff --git a/controllers/nginx/e2e/e2e-internal/e2e-up.sh b/controllers/nginx/e2e/e2e-internal/e2e-up.sh index 00275e86c..ee4b650cb 100755 --- a/controllers/nginx/e2e/e2e-internal/e2e-up.sh +++ b/controllers/nginx/e2e/e2e-internal/e2e-up.sh @@ -1,7 +1,5 @@ #!/usr/bin/env bash -set -eof pipefail - . ./e2e/e2e-internal/e2e-env.sh mkdir -p $HOME/.kube @@ -16,10 +14,11 @@ fi # this for loop waits until kubectl can access the api server that minikube has created for i in {1..150} # timeout for 5 minutes do - $KUBECTL get po &> /dev/null + $($KUBECTL get pods &> /dev/null) || true if [ $? -ne 1 ]; then break fi + echo -n "." sleep 10 done diff --git a/controllers/nginx/e2e/e2e-internal/run-e2e.sh b/controllers/nginx/e2e/e2e-internal/run-e2e.sh index 8678a468b..4318cc001 100755 --- a/controllers/nginx/e2e/e2e-internal/run-e2e.sh +++ b/controllers/nginx/e2e/e2e-internal/run-e2e.sh @@ -7,9 +7,23 @@ set -eof pipefail echo "Creating test tag for image $IMAGE:$TAG" docker tag $IMAGE:$TAG $IMAGE:test -echo "Uploading test image to minikube" -dockerenv=$(${MINIKUBE} --profile ${MINIKUBE_PROFILE} docker-env | sed 's/export//g' | sed 's/^#.*$//g' | sed 's/"//g') -docker save $IMAGE:test | env -i $dockerenv docker load +if [ "$TRAVIS" = true ] ; then + echo "Using local docker graph as source for $IMAGE:test" +else + echo "Uploading test image to minikube" + dockerenv=$(${MINIKUBE} --profile ${MINIKUBE_PROFILE} docker-env | sed 's/export//g' | sed 's/^#.*$//g' | sed 's/"//g') + docker save $IMAGE:test | env -i $dockerenv docker load +fi + +report_error() { + echo "unexpected error waiting for nginx ingress controller pod" + echo "LOGS:" + ${KUBECTL} logs -l k8s-app=nginx-ingress-controller +} + +trap 'report_error $LINENO' ERR +${WAIT_FOR_DEPLOYMENT} nginx-ingress-controller +notrap echo "Running tests..." go test -v k8s.io/ingress/controllers/nginx/e2e/... -run ^TestIngressSuite$ --args --alsologtostderr --v=10 diff --git a/controllers/nginx/e2e/e2e.go b/controllers/nginx/e2e/e2e.go index ccce1d0ea..5edb9ecc9 100644 --- a/controllers/nginx/e2e/e2e.go +++ b/controllers/nginx/e2e/e2e.go @@ -285,11 +285,5 @@ func finishRunning(stepName string, cmd *exec.Cmd) error { func kubectlCmd(arg ...string) *exec.Cmd { args := []string{"--context", "ingress-e2e"} args = append(args, arg...) - - kb := os.Getenv("KUBECTL") - if kb == "" { - kb = "./e2e/e2e-internal/kubectl" - } - - return exec.Command(kb, args...) + return exec.Command("kubectl", args...) } diff --git a/controllers/nginx/e2e/nginx-ingress-controller.yaml b/controllers/nginx/e2e/nginx-ingress-controller.yaml index e04351e0b..91e789f95 100644 --- a/controllers/nginx/e2e/nginx-ingress-controller.yaml +++ b/controllers/nginx/e2e/nginx-ingress-controller.yaml @@ -4,7 +4,6 @@ metadata: name: nginx-ingress-controller labels: k8s-app: nginx-ingress-controller - namespace: kube-system spec: replicas: 1 template: @@ -30,9 +29,7 @@ spec: timeoutSeconds: 1 ports: - containerPort: 80 - hostPort: 80 - containerPort: 443 - hostPort: 443 env: - name: POD_NAME valueFrom: