diff --git a/.travis.yml b/.travis.yml index 2a99da343..312f8524e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,21 +7,22 @@ jobs: env: - KUBERNETES_VERSION=v1.7.0 before_script: - - ./hack/test/setup-boulder.sh - script: - - set -e + # Install CLI dependencies - curl -Lo helm.tar.gz https://storage.googleapis.com/kubernetes-helm/helm-v2.6.1-linux-amd64.tar.gz && tar xvf helm.tar.gz && sudo mv linux-amd64/helm /usr/local/bin - curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$KUBERNETES_VERSION/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ - curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.21.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ # Install nsenter - - docker build -t ubuntu-nsenter ./hack/ubuntu-nsenter - - docker run -v /usr/local/bin:/hostbin ubuntu-nsenter cp /nsenter /hostbin/nsenter - # Create a cluster. We do this as root as we are using the 'docker' driver. - - sudo -E CHANGE_MINIKUBE_NONE_USER=true minikube start --vm-driver=none --kubernetes-version="$KUBERNETES_VERSION" - - sudo -E CHANGE_MINIKUBE_NONE_USER=true minikube addons enable ingress - - while true; do if kubectl get nodes; then break; fi; echo "Waiting 5s for kubernetes to be ready..."; sleep 5; done - # Setup service for nginx ingress controller. A DNS entry for *. - - make build image + - docker run -v /usr/local/bin:/hostbin munnerz/ubuntu-nsenter cp /nsenter /hostbin/nsenter + script: + # Setup e2e service dependencies + - ./hack/test/setup-boulder.sh + - ./hack/test/setup-minikube.sh + # Build images while we wait for services to start + - make build image APP_VERSION=build + # Wait for e2e service dependencies + - ./hack/test/wait-boulder.sh + - ./hack/test/wait-minikube.sh + # Setup service for nginx ingress controller. A DNS entry for *.certmanager.kubernetes.network has been setup to point to 10.0.0.15 for e2e tests - while true; do if kubectl get rc nginx-ingress-controller -n kube-system; then break; fi; echo "Waiting 5s for nginx-ingress-controller rc to be installed..."; sleep 5; done - kubectl expose -n kube-system --port 80 --target-port 80 --type ClusterIP rc nginx-ingress-controller --cluster-ip 10.0.0.15 - make e2e_test E2E_NGINX_CERTIFICATE_DOMAIN=certmanager.kubernetes.network diff --git a/hack/test/setup-boulder.sh b/hack/test/setup-boulder.sh index 1f9d3b760..ed15b1078 100755 --- a/hack/test/setup-boulder.sh +++ b/hack/test/setup-boulder.sh @@ -5,6 +5,7 @@ set -o nounset set -o pipefail BOULDER_REPO="github.com/letsencrypt/boulder" +BOULDER_URL="http://127.0.0.1:4000" echo "Fetching ${BOULDER_REPO}" go get -d github.com/letsencrypt/boulder || true @@ -17,11 +18,13 @@ sed -i 's/127.0.0.1:8053/10.0.0.10:53/' test/config/va.json sed -i 's/5002/80/' test/config/va.json # TODO: set ratelimits -docker-compose up & +function start { + if ! docker-compose up; then + echo "Error running boulder" + exit 1 + fi +} -while ! curl http://localhost:4000/ > /dev/null 2>&1 ; do - echo "Waiting for boulder API to be available..." - sleep 5 -done +start & -echo "Boulder API now available at http://localhost:4000/" \ No newline at end of file +echo "Started boulder process in background" diff --git a/hack/test/setup-minikube.sh b/hack/test/setup-minikube.sh new file mode 100755 index 000000000..75dbff889 --- /dev/null +++ b/hack/test/setup-minikube.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +# Create a cluster. We do this as root as we are using the 'docker' driver. +sudo -E CHANGE_MINIKUBE_NONE_USER=true minikube start --vm-driver=none --kubernetes-version="${KUBERNETES_VERSION}" +sudo -E CHANGE_MINIKUBE_NONE_USER=true minikube addons enable ingress diff --git a/hack/test/wait-boulder.sh b/hack/test/wait-boulder.sh new file mode 100755 index 000000000..2149d7df4 --- /dev/null +++ b/hack/test/wait-boulder.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +BOULDER_URL="http://127.0.0.1:4000" + +while ! curl "${BOULDER_URL}" > /dev/null 2>&1 ; do + echo "Waiting for boulder API to be available..." + sleep 5 +done + +echo "Boulder API now available at ${BOULDER_URL}" diff --git a/hack/test/wait-minikube.sh b/hack/test/wait-minikube.sh new file mode 100755 index 000000000..b97856d5f --- /dev/null +++ b/hack/test/wait-minikube.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +while true; do if kubectl get nodes; then break; fi; echo "Waiting 5s for kubernetes to be ready..."; sleep 5; done \ No newline at end of file diff --git a/pkg/issuer/acme/http/http.go b/pkg/issuer/acme/http/http.go index 74449577d..4ce21e533 100644 --- a/pkg/issuer/acme/http/http.go +++ b/pkg/issuer/acme/http/http.go @@ -321,7 +321,7 @@ func (s *Solver) ensurePod(crt *v1alpha1.Certificate, domain, token, key string, Name: "acmesolver", // TODO: use an image as specified as a config option Image: s.solverImage, - ImagePullPolicy: corev1.PullAlways, + ImagePullPolicy: corev1.PullIfNotPresent, // TODO: replace this with some kind of cmdline generator Args: []string{ fmt.Sprintf("--listen-port=%d", acmeSolverListenPort), diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index 090fcd1ea..c97649479 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -99,7 +99,7 @@ func (f *Framework) BeforeEach() { Expect(err).NotTo(HaveOccurred()) By("Creating a cert-manager pod") - pod, err := f.KubeClientSet.CoreV1().Pods(f.Namespace.Name).Create(util.NewCertManagerControllerPod(podName, "--cluster-resource-namespace="+f.Namespace.Name)) + pod, err := f.KubeClientSet.CoreV1().Pods(f.Namespace.Name).Create(util.NewCertManagerControllerPod(podName, "--cluster-resource-namespace="+f.Namespace.Name, "--v=4")) Expect(err).NotTo(HaveOccurred()) By("Waiting for cert-manager to be running")