Refactor e2e setup into scripts. Speed up e2e tests.

Build images whilst services are starting

Exit on setup boulder errors

Install nsenter

Don't build nsenter

Turn up e2e pod verbosity

Set pullPolicy IfNotPresent on HTTP challenge solver
This commit is contained in:
James Munnelly 2017-10-16 00:44:50 +01:00
parent 0ecb17bb6d
commit 1f278d659b
7 changed files with 53 additions and 19 deletions

View File

@ -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

View File

@ -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/"
echo "Started boulder process in background"

9
hack/test/setup-minikube.sh Executable file
View File

@ -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

14
hack/test/wait-boulder.sh Executable file
View File

@ -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}"

7
hack/test/wait-minikube.sh Executable file
View File

@ -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

View File

@ -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),

View File

@ -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")