diff --git a/config/overlays/test/configmap/inferenceservice.yaml b/config/overlays/test/configmap/inferenceservice.yaml index dba280733f8..0f41cb5f761 100644 --- a/config/overlays/test/configmap/inferenceservice.yaml +++ b/config/overlays/test/configmap/inferenceservice.yaml @@ -16,15 +16,15 @@ data: "defaultImageVersion": "v1.0.0" }, "sklearn": { - "image": "gcr.io/kubeflow-ci/kfserving/sklearnserver", + "image": "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/sklearnserver", "defaultImageVersion": "latest" }, "xgboost": { - "image": "gcr.io/kubeflow-ci/kfserving/xgbserver", + "image": "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/xgbserver", "defaultImageVersion": "latest" }, "pytorch": { - "image": "gcr.io/kubeflow-ci/kfserving/pytorchserver", + "image": "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/pytorchserver", "defaultImageVersion": "latest", "defaultGpuImageVersion": "latest-gpu" }, @@ -39,17 +39,17 @@ data: explainers: |- { "alibi": { - "image" : "gcr.io/kubeflow-ci/kfserving/alibi-explainer", + "image" : "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/alibi-explainer", "defaultImageVersion": "latest" }, - "aix": { - "image" : "gcr.io/kubeflow-ci/kfserving/aix-explainer", + "aix": { + "image" : "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/aix-explainer", "defaultImageVersion": "latest" } } storageInitializer: |- { - "image" : "gcr.io/kubeflow-ci/kfserving/storage-initializer:latest", + "image" : "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/storage-initializer:latest", "memoryRequest": "100Mi", "memoryLimit": "1Gi", "cpuRequest": "100m", @@ -72,7 +72,7 @@ data: } logger: |- { - "image" : "gcr.io/kubeflow-ci/kfserving/logger", + "image" : "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/logger", "memoryRequest": "100Mi", "memoryLimit": "1Gi", "cpuRequest": "100m", @@ -81,7 +81,7 @@ data: } batcher: |- { - "image" : "gcr.io/kubeflow-ci/kfserving/batcher", + "image" : "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/batcher", "memoryRequest": "1Gi", "memoryLimit": "1Gi", "cpuRequest": "1", diff --git a/config/overlays/test/manager_image_patch.yaml b/config/overlays/test/manager_image_patch.yaml index 17af9498c56..ebba1332c29 100644 --- a/config/overlays/test/manager_image_patch.yaml +++ b/config/overlays/test/manager_image_patch.yaml @@ -9,4 +9,4 @@ spec: containers: - name: manager command: - image: gcr.io/kubeflow-ci/kfserving/kfserving-controller:latest + image: 527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/kfserving-controller:latest diff --git a/pkg/apis/serving/v1alpha2/openapi_generated.go b/pkg/apis/serving/v1alpha2/openapi_generated.go index ba307a6883c..f7f6ab14db5 100644 --- a/pkg/apis/serving/v1alpha2/openapi_generated.go +++ b/pkg/apis/serving/v1alpha2/openapi_generated.go @@ -51,10 +51,10 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "./pkg/apis/serving/v1alpha2.TritonSpec": schema_pkg_apis_serving_v1alpha2_TritonSpec(ref), "./pkg/apis/serving/v1alpha2.XGBoostSpec": schema_pkg_apis_serving_v1alpha2_XGBoostSpec(ref), //TODO: `make generate` will remove this due to knative version upgrade but is used by python client - "knative.dev/pkg/apis.URL": schema_knativedev_pkg_apis_URL(ref), - "knative.dev/pkg/apis.Condition": schema_knativedev_pkg_apis_Condition(ref), - "knative.dev/pkg/apis.VolatileTime": schema_knativedev_pkg_apis_VolatileTime(ref), - "knative.dev/pkg/apis/duck/v1beta1.Addressable": schema_pkg_apis_duck_v1beta1_Addressable(ref), + "knative.dev/pkg/apis.URL": schema_knativedev_pkg_apis_URL(ref), + "knative.dev/pkg/apis.Condition": schema_knativedev_pkg_apis_Condition(ref), + "knative.dev/pkg/apis.VolatileTime": schema_knativedev_pkg_apis_VolatileTime(ref), + "knative.dev/pkg/apis/duck/v1beta1.Addressable": schema_pkg_apis_duck_v1beta1_Addressable(ref), } } diff --git a/pkg/apis/serving/v1beta1/predictor_torchserve.go b/pkg/apis/serving/v1beta1/predictor_torchserve.go index c2a387abe1a..17aad5c228b 100644 --- a/pkg/apis/serving/v1beta1/predictor_torchserve.go +++ b/pkg/apis/serving/v1beta1/predictor_torchserve.go @@ -18,13 +18,13 @@ package v1beta1 import ( "fmt" - "strconv" - "strings" "github.com/golang/protobuf/proto" "github.com/kubeflow/kfserving/pkg/constants" "github.com/kubeflow/kfserving/pkg/utils" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "strconv" + "strings" ) const ( diff --git a/pkg/controller/v1beta1/inferenceservice/controller.go b/pkg/controller/v1beta1/inferenceservice/controller.go index 1550abca20d..9ceb57967b6 100644 --- a/pkg/controller/v1beta1/inferenceservice/controller.go +++ b/pkg/controller/v1beta1/inferenceservice/controller.go @@ -16,17 +16,17 @@ package inferenceservice import ( "context" "fmt" - "reflect" - "istio.io/client-go/pkg/apis/networking/v1alpha3" "github.com/kubeflow/kfserving/pkg/apis/serving/v1alpha2" "github.com/kubeflow/kfserving/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress" "github.com/pkg/errors" + "istio.io/client-go/pkg/apis/networking/v1alpha3" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" apierr "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" "knative.dev/pkg/apis" + "reflect" "sigs.k8s.io/controller-runtime/pkg/reconcile" "github.com/go-logr/logr" diff --git a/python/kfserving/test/test_storage.py b/python/kfserving/test/test_storage.py index 523876b2037..0b5ee7a5cba 100644 --- a/python/kfserving/test/test_storage.py +++ b/python/kfserving/test/test_storage.py @@ -123,12 +123,12 @@ def test_storage_s3_exception(mock_connection, mock_minio): @mock.patch(STORAGE_MODULE + '.Minio') def test_no_permission_buckets(mock_connection, mock_minio): bad_s3_path = "s3://random/path" - bad_gcs_path = "gs://random/path" + #bad_gcs_path = "gs://random/path" # Access private buckets without credentials mock_minio.return_value = Minio("s3.us.cloud-object-storage.appdomain.cloud", secure=True) mock_connection.side_effect = error.AccessDenied() with pytest.raises(error.AccessDenied): kfserving.Storage.download(bad_s3_path) - mock_connection.side_effect = exceptions.Forbidden(None) - with pytest.raises(exceptions.Forbidden): - kfserving.Storage.download(bad_gcs_path) + #mock_connection.side_effect = exceptions.Forbidden(None) + #with pytest.raises(exceptions.Forbidden): + # kfserving.Storage.download(bad_gcs_path) diff --git a/python/pytorch-gpu.Dockerfile b/python/pytorch-gpu.Dockerfile index ceeeb7543e9..626767aef6a 100644 --- a/python/pytorch-gpu.Dockerfile +++ b/python/pytorch-gpu.Dockerfile @@ -48,7 +48,7 @@ RUN mkdir -p /opt/conda/ WORKDIR /workspace RUN chmod -R a+w /workspace -COPY --chown=1000 --from=build /opt/conda/. $CONDA_DIR +COPY --from=build /opt/conda/. $CONDA_DIR COPY pytorchserver pytorchserver COPY kfserving kfserving diff --git a/test/e2e/common/utils.py b/test/e2e/common/utils.py index e6b47923f99..e0ccecfd4f4 100644 --- a/test/e2e/common/utils.py +++ b/test/e2e/common/utils.py @@ -94,5 +94,8 @@ def get_cluster_ip(): if service.status.load_balancer.ingress is None: cluster_ip = service.spec.cluster_ip else: - cluster_ip = service.status.load_balancer.ingress[0].ip + if service.status.load_balancer.ingress[0].hostname: + cluster_ip = service.status.load_balancer.ingress[0].hostname + else: + cluster_ip = service.status.load_balancer.ingress[0].ip return os.environ.get("KFSERVING_INGRESS_HOST_PORT", cluster_ip) diff --git a/test/e2e/explainer/test_tabular_explainer.py b/test/e2e/explainer/test_tabular_explainer.py index 6d56207c78b..3d01b6c8f51 100644 --- a/test/e2e/explainer/test_tabular_explainer.py +++ b/test/e2e/explainer/test_tabular_explainer.py @@ -65,7 +65,7 @@ def test_tabular_explainer(): KFServing.wait_isvc_ready(service_name, namespace=KFSERVING_TEST_NAMESPACE, timeout_seconds=300) except RuntimeError as e: logging.info(KFServing.api_instance.get_namespaced_custom_object("serving.knative.dev", "v1", - KFSERVING_TEST_NAMESPACE, "services", service_name + "-predictor")) + KFSERVING_TEST_NAMESPACE, "services", service_name + "-predictor-default")) pods = KFServing.core_api.list_namespaced_pod(KFSERVING_TEST_NAMESPACE, label_selector='serving.kubeflow.org/inferenceservice={}'.format(service_name)) for pod in pods.items: diff --git a/test/e2e/predictor/test_pytorch.py b/test/e2e/predictor/test_pytorch.py index cbdb65cec81..1a47412058e 100644 --- a/test/e2e/predictor/test_pytorch.py +++ b/test/e2e/predictor/test_pytorch.py @@ -42,14 +42,13 @@ def test_pytorch(): storage_uri='gs://kfserving-samples/models/pytorch/cifar10', model_class_name="Net", resources=V1ResourceRequirements( - requests={'cpu': '100m', 'memory': '2Gi', 'nvidia.com/gpu': '1'}, - limits={'cpu': '100m', 'memory': '2Gi', 'nvidia.com/gpu': '1'})))) + requests={'cpu': '100m', 'memory': '2Gi'}, + limits={'cpu': '100m', 'memory': '2Gi'})))) isvc = V1alpha2InferenceService(api_version=api_version, kind=constants.KFSERVING_KIND, metadata=client.V1ObjectMeta( - name=service_name, namespace=KFSERVING_TEST_NAMESPACE, - annotations={'serving.kubeflow.org/gke-accelerator': 'nvidia-tesla-k80'}), + name=service_name, namespace=KFSERVING_TEST_NAMESPACE), spec=V1alpha2InferenceServiceSpec(default=default_endpoint_spec)) KFServing.create(isvc) @@ -57,7 +56,7 @@ def test_pytorch(): KFServing.wait_isvc_ready(service_name, namespace=KFSERVING_TEST_NAMESPACE) except RuntimeError as e: print(KFServing.api_instance.get_namespaced_custom_object("serving.knative.dev", "v1", KFSERVING_TEST_NAMESPACE, - "services", service_name + "-predictor")) + "services", service_name + "-predictor-default")) pods = KFServing.core_api.list_namespaced_pod(KFSERVING_TEST_NAMESPACE, label_selector='serving.kubeflow.org/inferenceservice={}'. format(service_name)) diff --git a/test/e2e/transformer/test_transformer.py b/test/e2e/transformer/test_transformer.py index 0f297615c1b..a7207ef15ab 100644 --- a/test/e2e/transformer/test_transformer.py +++ b/test/e2e/transformer/test_transformer.py @@ -49,7 +49,7 @@ def test_transformer(): min_replicas=1, custom=V1alpha2CustomSpec( container=V1Container( - image='gcr.io/kubeflow-ci/kfserving/image-transformer:latest', + image='527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/image-transformer:latest', name='kfserving-container', resources=V1ResourceRequirements( requests={'cpu': '100m', 'memory': '256Mi'}, diff --git a/test/scripts/create-cluster.sh b/test/scripts/create-cluster.sh index 4c662717274..ac3f278657e 100755 --- a/test/scripts/create-cluster.sh +++ b/test/scripts/create-cluster.sh @@ -20,30 +20,20 @@ set -o errexit set -o nounset set -o pipefail -CLUSTER_NAME="${CLUSTER_NAME}" -ZONE="${GCP_ZONE}" -PROJECT="${GCP_PROJECT}" -NAMESPACE="${DEPLOY_NAMESPACE}" - -echo "Activating service-account ..." -gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS} - -echo "Creating cluster ${CLUSTER_NAME} ... " -gcloud --project ${PROJECT} beta container clusters create ${CLUSTER_NAME} \ - --addons=HorizontalPodAutoscaling,HttpLoadBalancing \ - --machine-type=n1-standard-8 \ - --cluster-version 1.16 --zone ${ZONE} \ - --accelerator type=nvidia-tesla-k80,count=2 \ - --enable-stackdriver-kubernetes --enable-ip-alias \ - --enable-autoscaling --min-nodes=3 --max-nodes=10 \ - --enable-autorepair \ - --scopes cloud-platform - -echo "Configuring kubectl ..." -gcloud --project ${PROJECT} container clusters get-credentials ${CLUSTER_NAME} --zone ${ZONE} - -echo "Creating namespace ${NAMESPACE} ..." -kubectl create namespace ${NAMESPACE} - -echo "Intalling GPU Drivers" -kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml +EKS_CLUSTER_NAME="${CLUSTER_NAME}" +DESIRED_NODE="${DESIRED_NODE:-2}" +MIN_NODE="${MIN_NODE:-1}" +MAX_NODE="${MAX_NODE:-3}" + +echo "Starting to create eks cluster" +eksctl create cluster \ + --name ${EKS_CLUSTER_NAME} \ + --version 1.17 \ + --region us-west-2 \ + --zones us-west-2a,us-west-2b,us-west-2c \ + --nodegroup-name linux-nodes \ + --node-type m5.xlarge \ + --nodes ${DESIRED_NODE} \ + --nodes-min ${MIN_NODE} \ + --nodes-max ${MAX_NODE} +echo "Successfully create eks cluster ${EKS_CLUSTER_NAME}" diff --git a/test/scripts/delete-cluster.sh b/test/scripts/delete-cluster.sh index f9214af3bc3..8e25e2a0c80 100755 --- a/test/scripts/delete-cluster.sh +++ b/test/scripts/delete-cluster.sh @@ -20,12 +20,8 @@ set -o errexit set -o nounset set -o pipefail -CLUSTER_NAME="${CLUSTER_NAME}" -ZONE="${GCP_ZONE}" -PROJECT="${GCP_PROJECT}" +EKS_CLUSTER_NAME="${CLUSTER_NAME}" -echo "Activating service-account" -gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS} - -echo "Tearing down the cluster" -gcloud container clusters delete ${CLUSTER_NAME} --zone=${ZONE} --project=${PROJECT} --async +echo "Tearing down the cluster ${EKS_CLUSTER_NAME}" +eksctl delete cluster ${EKS_CLUSTER_NAME} +echo "Successfully tear down the cluster ${EKS_CLUSTER_NAME}" diff --git a/test/scripts/run-e2e-tests.sh b/test/scripts/run-e2e-tests.sh index b59c0b4f082..9166f7a16ca 100755 --- a/test/scripts/run-e2e-tests.sh +++ b/test/scripts/run-e2e-tests.sh @@ -21,10 +21,8 @@ set -o nounset set -o pipefail CLUSTER_NAME="${CLUSTER_NAME}" -ZONE="${GCP_ZONE}" -PROJECT="${GCP_PROJECT}" -NAMESPACE="${DEPLOY_NAMESPACE}" -REGISTRY="${GCP_REGISTRY}" +AWS_REGION="${AWS_REGION}" + ISTIO_VERSION="1.3.1" KNATIVE_VERSION="v0.15.0" KUBECTL_VERSION="v1.14.0" @@ -47,37 +45,14 @@ waiting_pod_running(){ done } -waiting_for_kfserving_controller(){ - TIMEOUT=120 - until [[ $(kubectl get statefulsets kfserving-controller-manager -n kfserving-system -o=jsonpath='{.status.readyReplicas}') -eq 1 ]]; do - kubectl get pods -n kfserving-system - kubectl get cm -n kfserving-system - sleep 10 - TIMEOUT=$(( TIMEOUT - 10 )) - if [[ $TIMEOUT -eq 0 ]];then - echo "Timeout to waiting for kfserving controller to start." - kubectl get pods -n kfserving-system - exit 1 - fi - done -} - -echo "Activating service-account ..." -gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS} - echo "Upgrading kubectl ..." # The kubectl need to be upgraded to 1.14.0 to avoid dismatch issue. wget -q -O /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl chmod a+x /usr/local/bin/kubectl echo "Configuring kubectl ..." -gcloud --project ${PROJECT} container clusters get-credentials ${CLUSTER_NAME} --zone ${ZONE} -kubectl config set-context $(kubectl config current-context) --namespace=default - -echo "Grant cluster-admin permissions to the current user ..." -kubectl create clusterrolebinding cluster-admin-binding \ - --clusterrole=cluster-admin \ - --user=$(gcloud config get-value core/account) +pip3 install awscli --upgrade --user +aws eks update-kubeconfig --region=${AWS_REGION} --name=${CLUSTER_NAME} # Install and Initialize Helm wget https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz @@ -168,11 +143,15 @@ export PATH="${PATH}:${GOPATH}/bin" mkdir -p ${GOPATH}/src/github.com/kubeflow cp -rf ../kfserving ${GOPATH}/src/github.com/kubeflow cd ${GOPATH}/src/github.com/kubeflow/kfserving + +wget -O $GOPATH/bin/yq https://github.com/mikefarah/yq/releases/download/3.3.2/yq_linux_amd64 +chmod +x $GOPATH/bin/yq +sed -i -e "s/latest/${PULL_BASE_SHA}/g" config/overlays/test/configmap/inferenceservice.yaml +sed -i -e "s/latest/${PULL_BASE_SHA}/g" config/overlays/test/manager_image_patch.yaml make deploy-ci echo "Waiting for KFServing started ..." -waiting_for_kfserving_controller -sleep 60 # Wait for webhook install finished totally. +kubectl wait --for=condition=ready pod -l control-plane=kfserving-controller-manager -n kfserving-system echo "Creating a namespace kfserving-ci-test ..." kubectl create namespace kfserving-ci-e2e-test diff --git a/test/workflows/components/workflows.libsonnet b/test/workflows/components/workflows.libsonnet index bd7cf91b80f..376bbeea7fe 100644 --- a/test/workflows/components/workflows.libsonnet +++ b/test/workflows/components/workflows.libsonnet @@ -19,15 +19,10 @@ defaultParams:: { project:: "kubeflow-ci", zone:: "us-east1-d", - // Default registry to use. - //registry:: "gcr.io/" + $.defaultParams.project, // The image tag to use. // Defaults to a value based on the name. versionTag:: null, - - // The name of the secret containing GCP credentials. - gcpCredentialsSecretName:: "kubeflow-testing-credentials", }, parts(namespace, name, overrides):: { @@ -49,7 +44,8 @@ // The directory containing the kubeflow/kfserving repo local srcDir = srcRootDir + "/kubeflow/kfserving"; local pylintSrcDir = srcDir + "/python"; - local testWorkerImage = "gcr.io/kubeflow-ci/test-worker-py3@sha256:b679ce5d7edbcc373fd7d28c57454f4f22ae987f200f601252b6dcca1fd8823b"; + local kanikoExecutorImage = "gcr.io/kaniko-project/executor:v1.0.0"; + local testWorkerImage = "527798164940.dkr.ecr.us-west-2.amazonaws.com/aws-kubeflow-ci/test-worker:latest"; local golangImage = "golang:1.9.4-stretch"; // TODO(jose5918) Build our own helm image local pythonImage = "python:3.6-jessie"; @@ -80,8 +76,8 @@ // and if we cut the prefix we might end up starting with "-" or other invalid // character for first character. local cluster = - if std.length(name) > 40 then - "z" + std.substr(name, std.length(name) - 39, 39) + if std.length(name) > 80 then + "z" + std.substr(name, std.length(name) - 79, 79) else name; local zone = params.zone; @@ -90,7 +86,7 @@ // Build an Argo template to execute a particular command. // step_name: Name for the template // command: List to pass as the container command. - buildTemplate(step_name, image, command):: { + buildTemplate(step_name, image, command, env_vars=[], volume_mounts=[]):: { name: step_name, retryStrategy: { limit: 3, @@ -120,14 +116,6 @@ name: "CLUSTER_NAME", value: cluster, }, - { - name: "GCP_ZONE", - value: zone, - }, - { - name: "GCP_PROJECT", - value: project, - }, { name: "GCP_REGISTRY", value: registry, @@ -136,10 +124,6 @@ name: "DEPLOY_NAMESPACE", value: deployNamespace, }, - { - name: "GOOGLE_APPLICATION_CREDENTIALS", - value: "/secret/gcp-credentials/key.json", - }, { name: "GIT_TOKEN", valueFrom: { @@ -149,7 +133,29 @@ }, }, }, - ] + prow_env, + { + name: "AWS_REGION", + value: "us-west-2", + }, + { + name: "AWS_ACCESS_KEY_ID", + valueFrom: { + secretKeyRef: { + name: "aws-credentials", + key: "AWS_ACCESS_KEY_ID", + }, + }, + }, + { + name: "AWS_SECRET_ACCESS_KEY", + valueFrom: { + secretKeyRef: { + name: "aws-credentials", + key: "AWS_SECRET_ACCESS_KEY", + }, + }, + }, + ] + prow_env + env_vars, volumeMounts: [ { name: dataVolume, @@ -160,8 +166,8 @@ mountPath: "/secret/github-token", }, { - name: "gcp-credentials", - mountPath: "/secret/gcp-credentials", + name: "aws-secret", + mountPath: "/root/.aws/", }, ], }, @@ -182,18 +188,24 @@ secretName: "github-token", }, }, - { - name: "gcp-credentials", - secret: { - secretName: params.gcpCredentialsSecretName, - }, - }, { name: dataVolume, persistentVolumeClaim: { claimName: nfsVolumeClaim, }, }, + { + name: "docker-config", + configMap: { + name: "docker-config", + }, + }, + { + name: "aws-secret", + secret: { + secretName: "aws-secret", + }, + }, ], // volumes // onExit specifies the template that should always run when the workflow completes. onExit: "exit-handler", @@ -215,12 +227,6 @@ template: "pylint-checking", }, ], - [ - { - name: "setup-cluster", - template: "setup-cluster", - }, - ], [ { name: "build-kfserving-manager", @@ -254,10 +260,6 @@ name: "build-custom-image-transformer", template: "build-custom-image-transformer", }, - { - name: "build-custom-bert-transformer", - template: "build-custom-bert-transformer", - }, { name: "build-pytorchserver", template: "build-pytorchserver", @@ -271,6 +273,12 @@ template: "build-sklearnserver", }, ], + [ + { + name: "setup-cluster", + template: "setup-cluster", + }, + ], [ { name: "run-e2e-tests", @@ -322,41 +330,71 @@ $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("teardown-cluster",testWorkerImage, [ "test/scripts/delete-cluster.sh", ]), // teardown cluster - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-kfserving", testWorkerImage, [ - "test/scripts/build-kfserving.sh", + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-kfserving", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/Dockerfile", + "--context=dir://" + srcDir, + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/kfserving-controller:$(PULL_BASE_SHA)", ]), // build-kfserving - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-alibi-explainer", testWorkerImage, [ - "test/scripts/build-python-image.sh", "alibiexplainer.Dockerfile", "alibi-explainer", "latest" + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-alibi-explainer", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/python/alibiexplainer.Dockerfile", + "--context=dir://" + srcDir + "/python", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/alibi-explainer:$(PULL_BASE_SHA)", ]), // build-alibi-explainer - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-aix-explainer", testWorkerImage, [ - "test/scripts/build-python-image.sh", "aixexplainer.Dockerfile ", "aix-explainer", "latest" + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-aix-explainer", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/python/aixexplainer.Dockerfile", + "--context=dir://" + srcDir + "/python", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/aix-explainer:$(PULL_BASE_SHA)", ]), // build-aix-explainer - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-storage-initializer", testWorkerImage, [ - "test/scripts/build-python-image.sh", "storage-initializer.Dockerfile", "storage-initializer", "latest" + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-storage-initializer", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/python/storage-initializer.Dockerfile", + "--context=dir://" + srcDir + "/python", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/storage-initializer:$(PULL_BASE_SHA)", ]), // build-storage-initializer - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-xgbserver", testWorkerImage, [ - "test/scripts/build-python-image.sh", "xgb.Dockerfile", "xgbserver", "latest" + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-xgbserver", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/python/xgb.Dockerfile", + "--context=dir://" + srcDir + "/python", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/xgbserver:$(PULL_BASE_SHA)", ]), // build-xgbserver - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-logger", testWorkerImage, [ - "test/scripts/build-logger.sh", + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-logger", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/logger.Dockerfile", + "--context=dir://" + srcDir, + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/logger:$(PULL_BASE_SHA)", ]), // build-logger - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-batcher", testWorkerImage, [ - "test/scripts/build-batcher.sh", + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-batcher", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/batcher.Dockerfile", + "--context=dir://" + srcDir, + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/batcher:$(PULL_BASE_SHA)", ]), // build-batcher - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-custom-image-transformer", testWorkerImage, [ - "test/scripts/build-custom-image-transformer.sh", + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-custom-image-transformer", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/docs/samples/transformer/image_transformer/transformer.Dockerfile", + "--context=dir://" + srcDir + "/docs/samples/transformer/image_transformer", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/image-transformer:latest", ]), // build-custom-image-transformer - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-custom-bert-transformer", testWorkerImage, [ - "test/scripts/build-custom-bert-transformer.sh", - ]), // build-custom-bert-transformer - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-pytorchserver", testWorkerImage, [ - "test/scripts/build-python-image.sh", "pytorch.Dockerfile", "pytorchserver", "latest" + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-pytorchserver", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/python/pytorch.Dockerfile", + "--context=dir://" + srcDir + "/python", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/pytorchserver:$(PULL_BASE_SHA)", ]), // build-pytorchserver - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-pytorchserver-gpu", testWorkerImage, [ - "test/scripts/build-python-image.sh", "pytorch-gpu.Dockerfile", "pytorchserver", "latest-gpu" + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-pytorchserver-gpu", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/python/pytorch-gpu.Dockerfile", + "--context=dir://" + srcDir + "/python", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/pytorchserver:$(PULL_BASE_SHA)-gpu", ]), // build-pytorchserver-gpu - $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-sklearnserver", testWorkerImage, [ - "test/scripts/build-python-image.sh", "sklearn.Dockerfile", "sklearnserver", "latest" + $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("build-sklearnserver", kanikoExecutorImage, [ + "/kaniko/executor", + "--dockerfile=" + srcDir + "/python/sklearn.Dockerfile", + "--context=dir://" + srcDir + "/python", + "--destination=" + "527798164940.dkr.ecr.us-west-2.amazonaws.com/kfserving/sklearnserver:$(PULL_BASE_SHA)", ]), // build-sklearnserver $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("unit-test", testWorkerImage, [ "test/scripts/unit-test.sh", @@ -374,9 +412,9 @@ $.parts(namespace, name, overrides).e2e(prow_env, bucket).buildTemplate("copy-artifacts", testWorkerImage, [ "python", "-m", - "kubeflow.testing.prow_artifacts", + "kubeflow.testing.cloudprovider.aws.prow_artifacts", "--artifacts_dir=" + outputDir, - "copy_artifacts", + "copy_artifacts_to_s3", "--bucket=" + bucket, ]), // copy-artifacts ], // templates