Jenkinsfile 11.5 KB
Newer Older
1 2
#!/usr/bin/env groovy

M
milvus-ci-robot 已提交
3
String cron_timezone = "TZ=Asia/Shanghai"
4
String cron_string = BRANCH_NAME == "master" ? "50 22 * * * " : ""
M
milvus-ci-robot 已提交
5

T
add ci  
test 已提交
6 7 8
pipeline {
    agent none

M
milvus-ci-robot 已提交
9
    triggers {
M
milvus-ci-robot 已提交
10 11
        cron """${cron_timezone}
            ${cron_string}"""
M
milvus-ci-robot 已提交
12
    }
13

T
add ci  
test 已提交
14 15 16 17 18
    options {
        timestamps()
    }

    parameters{
Q
quicksilver 已提交
19
        choice choices: ['Release', 'Debug'], description: 'Build Type', name: 'BUILD_TYPE'
D
del-zhenwu 已提交
20
        choice choices: ['False', 'True'], description: 'Is Manual Trigger Or Not', name: 'IS_MANUAL_TRIGGER_TYPE'
M
milvus-ci-robot 已提交
21
        string defaultValue: 'registry.zilliz.com', description: 'DOCKER REGISTRY URL', name: 'DOKCER_REGISTRY_URL', trim: true
T
add ci  
test 已提交
22
        string defaultValue: 'ba070c98-c8cc-4f7c-b657-897715f359fc', description: 'DOCKER CREDENTIALS ID', name: 'DOCKER_CREDENTIALS_ID', trim: true
M
milvus-ci-robot 已提交
23
        string defaultValue: 'http://192.168.1.201/artifactory/milvus', description: 'JFROG ARTFACTORY URL', name: 'JFROG_ARTFACTORY_URL', trim: true
M
milvus-ci-robot 已提交
24
        string defaultValue: '1a527823-d2b7-44fd-834b-9844350baf14', description: 'JFROG CREDENTIALS ID', name: 'JFROG_CREDENTIALS_ID', trim: true
T
add ci  
test 已提交
25 26 27 28
    }

    environment {
        PROJECT_NAME = "milvus"
29 30
        MILVUS_ROOT_PATH="/var/lib"
        MILVUS_INSTALL_PREFIX="${env.MILVUS_ROOT_PATH}/${env.PROJECT_NAME}"
T
add ci  
test 已提交
31
        LOWER_BUILD_TYPE = params.BUILD_TYPE.toLowerCase()
Q
quicksilver 已提交
32
        SEMVER = "${BRANCH_NAME.contains('/') ? BRANCH_NAME.substring(BRANCH_NAME.lastIndexOf('/') + 1) : BRANCH_NAME}"
33
        PIPELINE_NAME = "milvus-ci"
34
        HELM_BRANCH = "0.10.1"
T
add ci  
test 已提交
35 36 37
    }

    stages {
Q
quicksilver 已提交
38
        stage ('Milvus CI') {
39 40 41 42 43 44 45
            matrix {
                agent none
                axes {
                    axis {
                        name 'OS_NAME'
                        values 'ubuntu18.04', 'centos7'
                    }
T
add ci  
test 已提交
46

47 48 49
                    axis {
                        name 'CPU_ARCH'
                        values 'amd64'
T
add ci  
test 已提交
50 51
                    }

52
                    axis {
Q
quicksilver 已提交
53
                        name 'BINARY_VERSION'
54 55 56
                        values 'gpu', 'cpu'
                    }
                }
57 58 59 60 61 62
                when {
                    not {
                        expression {return OS_NAME == "ubuntu18.04" && !isTimeTriggeredBuild()}
                    }
                }

Q
quicksilver 已提交
63 64 65 66 67
                environment {
                    PACKAGE_VERSION = VersionNumber([
                        versionNumberString : '${SEMVER}-${BINARY_VERSION}-${OS_NAME}-${CPU_ARCH}-${LOWER_BUILD_TYPE}-${BUILD_DATE_FORMATTED, "yyyyMMdd"}-${BUILDS_TODAY}'
                    ]);
                    DOCKER_VERSION = "${SEMVER}-${BINARY_VERSION}-${OS_NAME}-${LOWER_BUILD_TYPE}"
68 69
                    CHANGE_DOCKER_VERSION = "${CHANGE_TARGET}-${BINARY_VERSION}-${OS_NAME}-${LOWER_BUILD_TYPE}"
                    CACHA_DOCKER_VERSION = "${CHANGE_TARGET ? CHANGE_DOCKER_VERSION : DOCKER_VERSION}"
Q
quicksilver 已提交
70
                }
71

Q
quicksilver 已提交
72
                stages {
Q
quicksilver 已提交
73 74 75 76 77
                    stage("Milvus Build and Unittest") {
                        agent {
                            kubernetes {
                                label "${OS_NAME}-${BINARY_VERSION}-build-${SEMVER}-${env.PIPELINE_NAME}-${env.BUILD_NUMBER}"
                                defaultContainer 'jnlp'
78
                                customWorkspace '/home/jenkins/agent/workspace'
Q
quicksilver 已提交
79 80
                                yamlFile "ci/jenkins/pod/milvus-${BINARY_VERSION}-version-${OS_NAME}-build-env-pod.yaml"
                            }
Q
quicksilver 已提交
81
                        }
Q
quicksilver 已提交
82

Q
quicksilver 已提交
83
                        stages {
Q
quicksilver 已提交
84 85 86 87
                            stage('Build') {
                                steps {
                                    container("milvus-${BINARY_VERSION}-build-env") {
                                        script {
88
                                            try{
89 90 91 92 93 94
                                                boolean isNightlyTest = isTimeTriggeredBuild()
                                                if (isNightlyTest || "${params.IS_MANUAL_TRIGGER_TYPE}" == "True") {
                                                    load "${env.WORKSPACE}/ci/jenkins/step/nightlyBuild.groovy"
                                                } else {
                                                    load "${env.WORKSPACE}/ci/jenkins/step/build.groovy"
                                                }
95 96 97 98
                                            } catch (Exception e) {
                                                containerLog "milvus-${BINARY_VERSION}-build-env"
                                                throw e
                                            }
99 100
                                        }
                                    }
Q
quicksilver 已提交
101 102
                                }
                            }
103

Q
quicksilver 已提交
104 105 106 107
                            stage('Unittest') {
                                steps {
                                    container("milvus-${BINARY_VERSION}-build-env") {
                                        script {
108
                                            load "${env.WORKSPACE}/ci/jenkins/step/unittest.groovy"
Q
quicksilver 已提交
109 110
                                        }
                                    }
Q
quicksilver 已提交
111 112
                                }
                            }
Q
quicksilver 已提交
113

Q
quicksilver 已提交
114 115 116 117
                            stage('Code Coverage') {
                                steps {
                                    container("milvus-${BINARY_VERSION}-build-env") {
                                        script {
118
                                            load "${env.WORKSPACE}/ci/jenkins/step/coverage.groovy"
119
                                        }
T
add ci  
test 已提交
120
                                    }
Q
quicksilver 已提交
121 122
                                }
                            }
123

Q
quicksilver 已提交
124 125 126 127 128
                            stage('Upload Package') {
                                steps {
                                    container("milvus-${BINARY_VERSION}-build-env") {
                                        script {
                                            load "${env.WORKSPACE}/ci/jenkins/step/package.groovy"
129
                                        }
T
add ci  
test 已提交
130 131 132
                                    }
                                }
                            }
Q
quicksilver 已提交
133 134
                        }
                    }
T
add ci  
test 已提交
135

Q
quicksilver 已提交
136
                    stage('Publish Docker images') {
137 138 139 140 141 142 143
                        environment {
                            SOURCE_REPO = "${params.DOKCER_REGISTRY_URL}/milvus/engine"
                            TARGET_REPO = "${params.DOKCER_REGISTRY_URL}/milvus/engine"
                            SOURCE_TAG = "${CACHA_DOCKER_VERSION}"
                            TARGET_TAG = "${DOCKER_VERSION}"
                        }

Q
quicksilver 已提交
144 145 146 147 148 149 150
                        agent {
                            kubernetes {
                                label "${OS_NAME}-${BINARY_VERSION}-publish-${SEMVER}-${env.PIPELINE_NAME}-${env.BUILD_NUMBER}"
                                defaultContainer 'jnlp'
                                yamlFile 'ci/jenkins/pod/docker-pod.yaml'
                            }
                        }
151

Q
quicksilver 已提交
152 153 154 155 156 157
                        stages {
                            stage('Publish') {
                                steps {
                                    container('publish-images') {
                                        script {
                                            load "${env.WORKSPACE}/ci/jenkins/step/publishImages.groovy"
158 159 160
                                        }
                                    }
                                }
T
add ci  
test 已提交
161
                            }
Q
quicksilver 已提交
162 163
                        }
                    }
T
add ci  
test 已提交
164

Q
quicksilver 已提交
165 166 167 168 169
                    stage('Deploy to Development') {
                        environment {
                            FROMAT_SEMVER = "${env.SEMVER}".replaceAll("\\.", "-").replaceAll("_", "-")
                            FORMAT_OS_NAME = "${OS_NAME}".replaceAll("\\.", "-").replaceAll("_", "-")
                            HELM_RELEASE_NAME = "${env.PIPELINE_NAME}-${env.FROMAT_SEMVER}-${env.BUILD_NUMBER}-single-${FORMAT_OS_NAME}-${BINARY_VERSION}".toLowerCase()
D
del-zhenwu 已提交
170
                            SHARDS_HELM_RELEASE_NAME = "${env.PIPELINE_NAME}-${env.FROMAT_SEMVER}-${env.BUILD_NUMBER}-shards-${FORMAT_OS_NAME}-${BINARY_VERSION}".toLowerCase()
Q
quicksilver 已提交
171
                            DEV_TEST_ARTIFACTS = "_artifacts/${FORMAT_OS_NAME}/${BINARY_VERSION}"
Q
quicksilver 已提交
172
                        }
T
add ci  
test 已提交
173

Q
quicksilver 已提交
174 175 176 177 178 179 180
                        agent {
                            kubernetes {
                                label "${OS_NAME}-${BINARY_VERSION}-dev-test-${SEMVER}-${env.PIPELINE_NAME}-${env.BUILD_NUMBER}"
                                defaultContainer 'jnlp'
                                yamlFile 'ci/jenkins/pod/testEnvironment.yaml'
                            }
                        }
181

Q
quicksilver 已提交
182 183 184 185 186
                        stages {
                            stage('Dev Test') {
                                steps {
                                    container('milvus-test-env') {
                                        script {
187 188
                                            sh "mkdir -p ${env.DEV_TEST_ARTIFACTS}"

Q
quicksilver 已提交
189
                                            boolean isNightlyTest = isTimeTriggeredBuild()
D
del-zhenwu 已提交
190
                                            if (isNightlyTest || "${params.IS_MANUAL_TRIGGER_TYPE}" == "True") {
Q
quicksilver 已提交
191
                                                load "${env.WORKSPACE}/ci/jenkins/step/singleDevNightlyTest.groovy"
D
del-zhenwu 已提交
192
                                                load "${env.WORKSPACE}/ci/jenkins/step/shardsDevNightlyTest.groovy"
Q
quicksilver 已提交
193 194
                                            } else {
                                                load "${env.WORKSPACE}/ci/jenkins/step/singleDevTest.groovy"
195 196 197
                                            }
                                        }
                                    }
T
add ci  
test 已提交
198
                                }
Q
quicksilver 已提交
199 200
                            }
                        }
Q
quicksilver 已提交
201

Q
quicksilver 已提交
202 203 204 205
                        post {
                            cleanup {
                                container('milvus-test-env') {
                                    script {
206
                                        archiveArtifacts artifacts: "${env.DEV_TEST_ARTIFACTS}/**", allowEmptyArchive: true
Q
quicksilver 已提交
207
                                        load "${env.WORKSPACE}/ci/jenkins/step/cleanupSingleDev.groovy"
D
del-zhenwu 已提交
208
                                        boolean isNightlyTest = isTimeTriggeredBuild()
D
del-zhenwu 已提交
209
                                        if (isNightlyTest || "${params.IS_MANUAL_TRIGGER_TYPE}" == "True") {
D
del-zhenwu 已提交
210 211
                                            load "${env.WORKSPACE}/ci/jenkins/step/cleanupShardsDev.groovy"
                                        }
Q
quicksilver 已提交
212
                                    }
Q
quicksilver 已提交
213 214
                                }
                            }
T
add ci  
test 已提交
215 216 217 218 219 220
                        }
                    }
                }
            }
        }
    }
221
    post {
222
        unsuccessful {
223 224
            script {
                boolean isNightlyTest = isTimeTriggeredBuild()
225
                if (isNightlyTest) {
226 227 228 229 230 231 232 233
                    // Send an email only if the build status has changed from green/unstable to red
                    emailext subject: '$DEFAULT_SUBJECT',
                    body: '$DEFAULT_CONTENT',
                    recipientProviders: [
                        [$class: 'DevelopersRecipientProvider'],
                        [$class: 'RequesterRecipientProvider']
                    ],
                    replyTo: '$DEFAULT_REPLYTO',
234
                    to: 'dev.milvus@zilliz.com'
235 236 237 238
                }
            }
        }
    }
T
add ci  
test 已提交
239 240
}

241 242 243 244 245 246 247
boolean isEmptyChangelog() {
    if (currentBuild.changeSets.size() == 0) {
        return true
    }
    return false
}

248
boolean isTimeTriggeredBuild() {
249 250
    if (currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0) {
        return true
251 252 253
    }
    return false
}