diff --git a/Makefile b/Makefile index 91a5541314..10dacf71f6 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ default: help VERSION ?= 1.4.0 RELEASE_SRC = apache-apisix-ingress-controller-${VERSION}-src -LOCAL_REGISTRY="localhost:5000" +REGISTRY ?="localhost:5000" IMAGE_TAG ?= dev GITSHA ?= "no-git-module" @@ -63,14 +63,19 @@ lint: unit-test: go test -cover -coverprofile=coverage.txt ./... -### e2e-test: Run e2e test cases (kind is required) +### e2e-test: Run e2e test cases (in existing clusters directly) .PHONY: e2e-test -e2e-test: ginkgo-check push-images-to-kind +e2e-test: ginkgo-check push-images kubectl apply -k $(PWD)/samples/deploy/crd cd test/e2e \ && go mod download \ + && export REGISTRY=$(REGISTRY) \ && ACK_GINKGO_RC=true ginkgo -cover -coverprofile=coverage.txt -r --randomizeSuites --randomizeAllSpecs --trace --nodes=$(E2E_CONCURRENCY) +### e2e-test-local: Run e2e test cases (kind is required) +.PHONY: e2e-test-local +e2e-test-local: kind-up e2e-test + .PHONY: ginkgo-check ginkgo-check: ifeq ("$(wildcard $(GINKGO))", "") @@ -78,37 +83,37 @@ ifeq ("$(wildcard $(GINKGO))", "") exit 1 endif -### push-images-to-kind: Push images used in e2e test suites to kind. -.PHONY: push-images-to-kind -push-images-to-kind: kind-up +### push-images: Push images used in e2e test suites to kind or custom registry. +.PHONY: push-images +push-images: ifeq ($(E2E_SKIP_BUILD), 0) docker pull apache/apisix:2.12.0-alpine - docker tag apache/apisix:2.12.0-alpine $(LOCAL_REGISTRY)/apache/apisix:dev - docker push $(LOCAL_REGISTRY)/apache/apisix:dev + docker tag apache/apisix:2.12.0-alpine $(REGISTRY)/apache/apisix:dev + docker push $(REGISTRY)/apache/apisix:dev docker pull bitnami/etcd:3.4.14-debian-10-r0 - docker tag bitnami/etcd:3.4.14-debian-10-r0 $(LOCAL_REGISTRY)/bitnami/etcd:3.4.14-debian-10-r0 - docker push $(LOCAL_REGISTRY)/bitnami/etcd:3.4.14-debian-10-r0 + docker tag bitnami/etcd:3.4.14-debian-10-r0 $(REGISTRY)/bitnami/etcd:3.4.14-debian-10-r0 + docker push $(REGISTRY)/bitnami/etcd:3.4.14-debian-10-r0 docker pull kennethreitz/httpbin - docker tag kennethreitz/httpbin $(LOCAL_REGISTRY)/kennethreitz/httpbin - docker push $(LOCAL_REGISTRY)/kennethreitz/httpbin + docker tag kennethreitz/httpbin $(REGISTRY)/kennethreitz/httpbin + docker push $(REGISTRY)/kennethreitz/httpbin docker build -t test-backend:$(IMAGE_TAG) --build-arg ENABLE_PROXY=true ./test/e2e/testbackend - docker tag test-backend:$(IMAGE_TAG) $(LOCAL_REGISTRY)/test-backend:$(IMAGE_TAG) - docker push $(LOCAL_REGISTRY)/test-backend:$(IMAGE_TAG) + docker tag test-backend:$(IMAGE_TAG) $(REGISTRY)/test-backend:$(IMAGE_TAG) + docker push $(REGISTRY)/test-backend:$(IMAGE_TAG) docker build -t apache/apisix-ingress-controller:$(IMAGE_TAG) --build-arg ENABLE_PROXY=true . - docker tag apache/apisix-ingress-controller:$(IMAGE_TAG) $(LOCAL_REGISTRY)/apache/apisix-ingress-controller:$(IMAGE_TAG) - docker push $(LOCAL_REGISTRY)/apache/apisix-ingress-controller:$(IMAGE_TAG) + docker tag apache/apisix-ingress-controller:$(IMAGE_TAG) $(REGISTRY)/apache/apisix-ingress-controller:$(IMAGE_TAG) + docker push $(REGISTRY)/apache/apisix-ingress-controller:$(IMAGE_TAG) docker pull jmalloc/echo-server:latest - docker tag jmalloc/echo-server:latest $(LOCAL_REGISTRY)/jmalloc/echo-server:latest - docker push $(LOCAL_REGISTRY)/jmalloc/echo-server:latest + docker tag jmalloc/echo-server:latest $(REGISTRY)/jmalloc/echo-server:latest + docker push $(REGISTRY)/jmalloc/echo-server:latest docker pull busybox:1.28 - docker tag busybox:1.28 $(LOCAL_REGISTRY)/busybox:1.28 - docker push $(LOCAL_REGISTRY)/busybox:1.28 + docker tag busybox:1.28 $(REGISTRY)/busybox:1.28 + docker push $(REGISTRY)/busybox:1.28 endif ### kind-up: Launch a Kubernetes cluster with a image registry by Kind. diff --git a/test/e2e/README.md b/test/e2e/README.md index c986b7a079..be5ddd79ee 100644 --- a/test/e2e/README.md +++ b/test/e2e/README.md @@ -46,12 +46,14 @@ Test caes inside `features` directory test some features about APISIX, such as t Quick Start ----------- -Run `make e2e-test` to run the e2e test suites in your development environment, a several stuffs that this command will do: +Run `make e2e-test-local` to run the e2e test suites in your development environment, a several stuffs that this command will do: 1. Create a Kubernetes cluster by [kind](https://kind.sigs.k8s.io/), please installing in advance. 2. Build and push all related images to this cluster. 3. Run e2e test suites. +Run `make e2e-test` to run the e2e test suites in an existing cluster, you can specify custom registry by passing REGISTRY(eg docker.io). + Step `1` and `2` can be skipped by passing `E2E_SKIP_BUILD=1` to this directive, also, you can customize the running concurrency of e2e test suites by passing `E2E_CONCURRENCY=X` where `X` is the desired number of cases running in parallel. diff --git a/test/e2e/scaffold/apisix.go b/test/e2e/scaffold/apisix.go index 53b01bbdd0..36140997dd 100644 --- a/test/e2e/scaffold/apisix.go +++ b/test/e2e/scaffold/apisix.go @@ -141,7 +141,7 @@ func (s *Scaffold) newAPISIX() (*corev1.Service, error) { if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, configData); err != nil { return nil, err } - if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, _apisixDeployment); err != nil { + if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, s.FormatRegistry(_apisixDeployment)); err != nil { return nil, err } if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, _apisixService); err != nil { diff --git a/test/e2e/scaffold/etcd.go b/test/e2e/scaffold/etcd.go index c0559bb69a..3b9301eab5 100644 --- a/test/e2e/scaffold/etcd.go +++ b/test/e2e/scaffold/etcd.go @@ -92,7 +92,7 @@ spec: ) func (s *Scaffold) newEtcd() (*corev1.Service, error) { - if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, etcdDeployment); err != nil { + if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, s.FormatRegistry(etcdDeployment)); err != nil { return nil, err } if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, etcdService); err != nil { diff --git a/test/e2e/scaffold/httpbin.go b/test/e2e/scaffold/httpbin.go index b508e94b28..b2aaaa99a4 100644 --- a/test/e2e/scaffold/httpbin.go +++ b/test/e2e/scaffold/httpbin.go @@ -89,7 +89,7 @@ spec: ) func (s *Scaffold) newHTTPBIN() (*corev1.Service, error) { - httpbinDeployment := fmt.Sprintf(_httpbinDeploymentTemplate, 1) + httpbinDeployment := fmt.Sprintf(s.FormatRegistry(_httpbinDeploymentTemplate), 1) if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, httpbinDeployment); err != nil { return nil, err } @@ -105,7 +105,7 @@ func (s *Scaffold) newHTTPBIN() (*corev1.Service, error) { // ScaleHTTPBIN scales the number of HTTPBIN pods to desired. func (s *Scaffold) ScaleHTTPBIN(desired int) error { - httpbinDeployment := fmt.Sprintf(_httpbinDeploymentTemplate, desired) + httpbinDeployment := fmt.Sprintf(s.FormatRegistry(_httpbinDeploymentTemplate), desired) if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, httpbinDeployment); err != nil { return err } diff --git a/test/e2e/scaffold/ingress.go b/test/e2e/scaffold/ingress.go index 6c5181cecd..d551eb4fc2 100644 --- a/test/e2e/scaffold/ingress.go +++ b/test/e2e/scaffold/ingress.go @@ -407,9 +407,9 @@ func (s *Scaffold) newIngressAPISIXController() error { var ingressAPISIXDeployment string label := fmt.Sprintf("apisix.ingress.watch=%s", s.namespace) if s.opts.EnableWebhooks { - ingressAPISIXDeployment = fmt.Sprintf(_ingressAPISIXDeploymentTemplate, s.opts.IngressAPISIXReplicas, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, _volumeMounts, _webhookCertSecret) + ingressAPISIXDeployment = fmt.Sprintf(s.FormatRegistry(_ingressAPISIXDeploymentTemplate), s.opts.IngressAPISIXReplicas, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, _volumeMounts, _webhookCertSecret) } else { - ingressAPISIXDeployment = fmt.Sprintf(_ingressAPISIXDeploymentTemplate, s.opts.IngressAPISIXReplicas, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, "", _webhookCertSecret) + ingressAPISIXDeployment = fmt.Sprintf(s.FormatRegistry(_ingressAPISIXDeploymentTemplate), s.opts.IngressAPISIXReplicas, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, "", _webhookCertSecret) } err = k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, ingressAPISIXDeployment) @@ -515,9 +515,9 @@ func (s *Scaffold) ScaleIngressController(desired int) error { var ingressDeployment string label := fmt.Sprintf("apisix.ingress.watch=%s", s.namespace) if s.opts.EnableWebhooks { - ingressDeployment = fmt.Sprintf(_ingressAPISIXDeploymentTemplate, desired, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, _volumeMounts, _webhookCertSecret) + ingressDeployment = fmt.Sprintf(s.FormatRegistry(_ingressAPISIXDeploymentTemplate), desired, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, _volumeMounts, _webhookCertSecret) } else { - ingressDeployment = fmt.Sprintf(_ingressAPISIXDeploymentTemplate, desired, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, "", _webhookCertSecret) + ingressDeployment = fmt.Sprintf(s.FormatRegistry(_ingressAPISIXDeploymentTemplate), desired, s.namespace, label, s.opts.APISIXRouteVersion, s.opts.APISIXPublishAddress, "", _webhookCertSecret) } if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, ingressDeployment); err != nil { return err diff --git a/test/e2e/scaffold/scaffold.go b/test/e2e/scaffold/scaffold.go index 7d5fa0875f..0963e9aded 100644 --- a/test/e2e/scaffold/scaffold.go +++ b/test/e2e/scaffold/scaffold.go @@ -461,6 +461,16 @@ func (s *Scaffold) renderConfig(path string) (string, error) { return buf.String(), nil } +// FormatRegistry replace default registry to custom registry if exist +func (s *Scaffold) FormatRegistry(workloadTemplate string) string { + customRegistry, isExist := os.LookupEnv("REGISTRY") + if isExist { + return strings.Replace(workloadTemplate, "localhost:5000", customRegistry, -1) + } else { + return workloadTemplate + } +} + func waitExponentialBackoff(condFunc func() (bool, error)) error { backoff := wait.Backoff{ Duration: 500 * time.Millisecond, diff --git a/test/e2e/scaffold/test_backend.go b/test/e2e/scaffold/test_backend.go index 2a1f71932e..f1b6850285 100644 --- a/test/e2e/scaffold/test_backend.go +++ b/test/e2e/scaffold/test_backend.go @@ -121,7 +121,7 @@ spec: ) func (s *Scaffold) newTestBackend() (*corev1.Service, error) { - backendDeployment := fmt.Sprintf(_testBackendDeploymentTemplate, 1) + backendDeployment := fmt.Sprintf(s.FormatRegistry(_testBackendDeploymentTemplate), 1) if err := k8s.KubectlApplyFromStringE(s.t, s.kubectlOptions, backendDeployment); err != nil { return nil, err }