diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index a2545c17..52009600 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -19,6 +19,7 @@ jobs: - nginx - traefik - gloo + - skipper - kubernetes steps: - name: Checkout diff --git a/test/skipper/install.sh b/test/skipper/install.sh new file mode 100755 index 00000000..bc5820f8 --- /dev/null +++ b/test/skipper/install.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -o errexit + +KUSTOMIZE_VERSION=3.8.2 +REPO_ROOT=$(git rev-parse --show-toplevel) + +mkdir -p ${REPO_ROOT}/bin + +echo '>>> Installing Kustomize' +cd ${REPO_ROOT}/bin && kustomize_url=https://github.com/kubernetes-sigs/kustomize/releases/download && \ +curl -sL ${kustomize_url}/kustomize%2Fv${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz | \ +tar xz + +echo '>>> Installing Skipper' +${REPO_ROOT}/bin/kustomize build ${REPO_ROOT}/test/skipper | kubectl apply -f - + +kubectl -n kube-system rollout status deployment/skipper-ingress + +echo '>>> Installing Flagger' +kubectl -n flagger-system set image deployment/flagger flagger=test/flagger:latest + +kubectl -n flagger-system rollout status deployment/flagger +kubectl -n flagger-system rollout status deployment/flagger-prometheus \ No newline at end of file diff --git a/test/skipper/run.sh b/test/skipper/run.sh new file mode 100755 index 00000000..67153fa9 --- /dev/null +++ b/test/skipper/run.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -o errexit + +REPO_ROOT=$(git rev-parse --show-toplevel) +DIR="$(cd "$(dirname "$0")" && pwd)" + +"$DIR"/install.sh + +"$REPO_ROOT"/test/workloads/init.sh +"$DIR"/test-canary.sh diff --git a/test/skipper/test-canary.sh b/test/skipper/test-canary.sh new file mode 100755 index 00000000..a72fb60a --- /dev/null +++ b/test/skipper/test-canary.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash + +# This script runs e2e tests for Skipper canary initialization, analysis and promotion + +set -o errexit + +REPO_ROOT=$(git rev-parse --show-toplevel) + +echo '>>> Creating ingress' +cat <>> Creating canary' +cat <>> Waiting for primary to be ready' +retries=50 +count=0 +ok=false +until ${ok}; do + kubectl -n test get canary/podinfo | grep 'Initialized' && ok=true || ok=false + sleep 5 + count=$(($count + 1)) + if [[ ${count} -eq ${retries} ]]; then + kubectl -n flagger-system logs deployment/flagger + echo "No more retries left" + exit 1 + fi +done + +echo '✔ Canary initialization test passed' + +echo '>>> Triggering canary deployment' +kubectl -n test set image deployment/podinfo podinfod=stefanprodan/podinfo:3.1.1 + +echo '>>> Waiting for canary promotion' +retries=50 +count=0 +ok=false +until ${ok}; do + kubectl -n test describe deployment/podinfo-primary | grep '3.1.1' && ok=true || ok=false + sleep 10 + kubectl -n flagger-system logs deployment/flagger --tail 1 + count=$(($count + 1)) + if [[ ${count} -eq ${retries} ]]; then + kubectl -n test describe deployment/podinfo + kubectl -n test describe deployment/podinfo-primary + kubectl -n flagger-system logs deployment/flagger + echo "No more retries left" + exit 1 + fi +done + +echo '✔ Canary promotion test passed'