From 8adac6f8ae5e889df1eefdecad5c64d228537642 Mon Sep 17 00:00:00 2001 From: "liheng.zms" Date: Wed, 30 Mar 2022 16:42:44 +0800 Subject: [PATCH] github workflow e2e test Signed-off-by: liheng.zms --- .github/workflows/e2e-1.23.yaml | 147 ++++++++++++++++++++++++++++++++ Makefile | 8 +- scripts/deploy_kind.sh | 15 ++++ temp | 0 test/kind-conf.yaml | 8 ++ 5 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/e2e-1.23.yaml create mode 100755 scripts/deploy_kind.sh delete mode 100644 temp create mode 100644 test/kind-conf.yaml diff --git a/.github/workflows/e2e-1.23.yaml b/.github/workflows/e2e-1.23.yaml new file mode 100644 index 00000000..250596c6 --- /dev/null +++ b/.github/workflows/e2e-1.23.yaml @@ -0,0 +1,147 @@ +name: E2E-1.23 + +on: + push: + branches: + - master + - release-* + pull_request: {} + workflow_dispatch: {} + +env: + # Common versions + GO_VERSION: '1.17' + KIND_IMAGE: 'kindest/node:v1.23.3' + KIND_CLUSTER_NAME: 'ci-testing' + +jobs: + + rollout: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@v1.2.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf.yaml + - name: Build image + run: | + export IMAGE="openkruise/kruise-rollout:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise Rollout + run: | + set -ex + kubectl cluster-info + IMG=openkruise/kruise-rollout:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh + for ((i=1;i<10;i++)); + do + set +e + PODS=$(kubectl get pod -n kruise-rollout | grep '1/1' | wc -l) + set -e + if [ "$PODS" -eq "1" ]; then + break + fi + sleep 3 + done + set +e + PODS=$(kubectl get pod -n kruise-rollout | grep '1/1' | wc -l) + kubectl get node -o yaml + kubectl get all -n kruise-rollout -o yaml + set -e + if [ "$PODS" -eq "1" ]; then + echo "Wait for kruise-rollout ready successfully" + else + echo "Timeout to wait for kruise-rollout ready" + exit 1 + fi + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + make ginkgo + set +e + ./bin/ginkgo -timeout 60m -v --focus='\[rollouts\] (Rollout)' test/e2e + retVal=$? + restartCount=$(kubectl get pod -n kruise-rollout --no-headers | awk '{print $4}') + if [ "${restartCount}" -eq "0" ];then + echo "Kruise-rollout has not restarted" + else + kubectl get pod -n kruise-rollout --no-headers + echo "Kruise-rollout has restarted, abort!!!" + kubectl get pod -n kruise-rollout --no-headers| awk '{print $1}' | xargs kubectl logs -p -n kruise-rollout + exit 1 + fi + exit $retVal + + batchrelease: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@v1.2.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf.yaml + - name: Build image + run: | + export IMAGE="openkruise/kruise-rollout:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise Rollout + run: | + set -ex + kubectl cluster-info + IMG=openkruise/kruise-rollout:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh + for ((i=1;i<10;i++)); + do + set +e + PODS=$(kubectl get pod -n kruise-rollout | grep '1/1' | wc -l) + set -e + if [ "$PODS" -eq "1" ]; then + break + fi + sleep 3 + done + set +e + PODS=$(kubectl get pod -n kruise-rollout | grep '1/1' | wc -l) + kubectl get node -o yaml + kubectl get all -n kruise-rollout -o yaml + set -e + if [ "$PODS" -eq "1" ]; then + echo "Wait for kruise-rollout ready successfully" + else + echo "Timeout to wait for kruise-rollout ready" + exit 1 + fi + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + make ginkgo + set +e + ./bin/ginkgo -timeout 60m -v --focus='\[rollouts\] (BatchRelease)' test/e2e + retVal=$? + restartCount=$(kubectl get pod -n kruise-rollout --no-headers | awk '{print $4}') + if [ "${restartCount}" -eq "0" ];then + echo "Kruise-rollout has not restarted" + else + kubectl get pod -n kruise-rollout --no-headers + echo "Kruise-rollout has restarted, abort!!!" + kubectl get pod -n kruise-rollout --no-headers| awk '{print $1}' | xargs kubectl logs -p -n kruise-rollout + exit 1 + fi + exit $retVal diff --git a/Makefile b/Makefile index 9c84adb6..7ae6bc00 100644 --- a/Makefile +++ b/Makefile @@ -62,7 +62,7 @@ build: manifests generate fmt vet ## Build manager binary. run: manifests generate fmt vet ## Run a controller from your host. go run ./main.go -docker-build: ## Build docker image with the manager. +docker-build: manifests generate fmt vet ## Build docker image with the manager. docker build -t ${IMG} . docker-push: ## Push docker image with the manager. @@ -97,6 +97,10 @@ KUSTOMIZE = $(shell pwd)/bin/kustomize kustomize: ## Download kustomize locally if necessary. $(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v3@v3.8.7) +GINKGO = $(shell pwd)/bin/ginkgo +ginkgo: ## Download ginkgo locally if necessary. + $(call go-get-tool,$(GINKGO),github.com/onsi/ginkgo/ginkgo@v1.16.4) + # go-get-tool will 'go get' any package $2 and install it to $1. PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) define go-get-tool @@ -106,7 +110,7 @@ TMP_DIR=$$(mktemp -d) ;\ cd $$TMP_DIR ;\ go mod init tmp ;\ echo "Downloading $(2)" ;\ -GOBIN=$(PROJECT_DIR)/bin go install $(2) ;\ +GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\ rm -rf $$TMP_DIR ;\ } endef diff --git a/scripts/deploy_kind.sh b/scripts/deploy_kind.sh new file mode 100755 index 00000000..741bd623 --- /dev/null +++ b/scripts/deploy_kind.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +if [ -z "$IMG" ]; then + echo "no found IMG env" + exit 1 +fi + +set -e + +make kustomize +KUSTOMIZE=$(pwd)/bin/kustomize +(cd config/manager && "${KUSTOMIZE}" edit set image controller="${IMG}") +"${KUSTOMIZE}" build config/default | sed -e 's/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g' > /tmp/rollout-kustomization.yaml +echo -e "resources:\n- manager.yaml" > config/manager/kustomization.yaml +kubectl apply -f /tmp/rollout-kustomization.yaml diff --git a/temp b/temp deleted file mode 100644 index e69de29b..00000000 diff --git a/test/kind-conf.yaml b/test/kind-conf.yaml new file mode 100644 index 00000000..bb854bff --- /dev/null +++ b/test/kind-conf.yaml @@ -0,0 +1,8 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: + - role: control-plane + - role: worker + - role: worker +featureGates: + EphemeralContainers: true