PythonRegression.groovy 5.1 KB
Newer Older
1
def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0
C
Cai Yudong 已提交
2
def regressionTimeout = isTimeTriggeredBuild ? "120" : "60"
3
timeout(time: "${regressionTimeout}", unit: 'MINUTES') {
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
    container('deploy-env') {
        dir ('milvus-helm-chart') {
            sh " helm version && \
                 helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts && \
                 helm repo add bitnami https://charts.bitnami.com/bitnami && \
                 helm repo add minio https://helm.min.io/ && \
                 helm repo update"

            def milvusHelmURL = "https://github.com/zilliztech/milvus-helm-charts.git"
            checkout([$class: 'GitSCM', branches: [[name: "${env.HELM_BRANCH}"]], userRemoteConfigs: [[url: "${milvusHelmURL}"]]])

            dir ('charts/milvus-ha') {
                sh script: "kubectl create namespace ${env.HELM_RELEASE_NAMESPACE}", returnStatus: true

                def helmCMD = ""
                if ("${REGRESSION_SERVICE_TYPE}" == "distributed") {
                    helmCMD = "helm install --wait --timeout 300s \
                                   --set standalone.enabled=false \
                                   --set image.all.repository=${env.TARGET_REPO}/milvus-distributed \
                                   --set image.all.tag=${env.TARGET_TAG} \
                                   --set image.all.pullPolicy=Always \
Q
quicksilver 已提交
25 26
                                   --set logsPersistence.enabled=true \
                                   --set logsPersistence.mountPath=/milvus-distributed/logs \
27 28 29
                                   --namespace ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME} ."
                } else {
                    helmCMD = "helm install --wait --timeout 300s \
C
Cai Yudong 已提交
30
                                   --set standalone.enabled=true \
31 32 33
                                   --set image.all.repository=${env.TARGET_REPO}/milvus-distributed \
                                   --set image.all.tag=${env.TARGET_TAG} \
                                   --set image.all.pullPolicy=Always \
Q
quicksilver 已提交
34 35
                                   --set logsPersistence.enabled=true \
                                   --set logsPersistence.mountPath=/milvus-distributed/logs \
36 37 38 39 40 41 42 43 44 45 46
                                   --namespace ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME} ."
                }

                try {
                    sh "${helmCMD}"
                } catch (exc) {
                    def helmStatusCMD = "helm get manifest -n ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME} | kubectl describe -n ${env.HELM_RELEASE_NAMESPACE} -f - && \
                                         helm status -n ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME}"
                    sh script: helmStatusCMD, returnStatus: true
                    throw exc
                }
47
            }
48
        }
49
    }
G
godchen 已提交
50

51 52 53
    container('test-env') {
        try {
            dir ('tests/python_test') {
Q
quicksilver 已提交
54
                sh "python3 -m pip install --no-cache-dir -r requirements.txt"
Q
quicksilver 已提交
55 56
                if (isTimeTriggeredBuild) {
                    echo "This is Cron Job!"
C
Cai Yudong 已提交
57
                    sh "pytest -n 4 --ip ${env.HELM_RELEASE_NAME}-milvus-ha.${env.HELM_RELEASE_NAMESPACE}.svc.cluster.local"
Q
quicksilver 已提交
58
                } else {
C
Cai Yudong 已提交
59
                    sh "pytest --tags=smoke -n 4 --ip ${env.HELM_RELEASE_NAME}-milvus-ha.${env.HELM_RELEASE_NAMESPACE}.svc.cluster.local"
Q
quicksilver 已提交
60
                }
61 62 63 64 65 66
            }
        } catch (exc) {
            echo 'PyTest Regression Failed !'
            throw exc
        } finally {
            container('deploy-env') {
Q
quicksilver 已提交
67 68 69 70 71 72 73
                def milvusLabels = ""
                if ("${REGRESSION_SERVICE_TYPE}" == "distributed") {
                    milvusLabels = "app.kubernetes.io/instance=${env.HELM_RELEASE_NAME},component=proxyservice"
                } else {
                    milvusLabels = "app.kubernetes.io/instance=${env.HELM_RELEASE_NAME},component=standalone"
                }
                def etcdLabels = "app.kubernetes.io/instance=${env.HELM_RELEASE_NAME},app.kubernetes.io/name=etcd"
Q
quicksilver 已提交
74
                def componentLabels = "release=${env.HELM_RELEASE_NAME}"
75 76
                def namespace = "${env.HELM_RELEASE_NAMESPACE}"
                def artifactsPath = "${env.DEV_TEST_ARTIFACTS_PATH}"
77

78
                sh "mkdir -p $artifactsPath"
Q
quicksilver 已提交
79 80
                sh "kubectl cp -n ${env.HELM_RELEASE_NAMESPACE} \$(kubectl get pod -n ${env.HELM_RELEASE_NAMESPACE} -l ${milvusLabels} -o jsonpath='{range.items[0]}{.metadata.name}'):logs $artifactsPath"
                sh "for pod in \$(kubectl get pod -n $namespace -l ${etcdLabels} -o jsonpath='{range.items[*]}{.metadata.name} '); do kubectl logs --all-containers -n $namespace \$pod > $artifactsPath/\$pod.log; done"
Q
quicksilver 已提交
81
                sh "for pod in \$(kubectl get pod -n $namespace -l ${componentLabels} -o jsonpath='{range.items[*]}{.metadata.name} '); do kubectl logs --all-containers -n $namespace \$pod > $artifactsPath/\$pod.log; done"
82
                archiveArtifacts artifacts: "$artifactsPath/**", allowEmptyArchive: true
G
godchen 已提交
83 84 85 86
            }
        }
    }
}