Jenkinsfile 8.0 KB
Newer Older
1
#!/usr/bin/env groovy
2
@Library('mpl') _
3

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

T
add ci  
test 已提交
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
    }
T
add ci  
test 已提交
13 14 15 16
    options {
        timestamps()
    }
    parameters{
Q
quicksilver 已提交
17
        choice choices: ['Release', 'Debug'], description: 'Build Type', name: 'BUILD_TYPE'
D
del-zhenwu 已提交
18
        choice choices: ['False', 'True'], description: 'Is Manual Trigger Or Not', name: 'IS_MANUAL_TRIGGER_TYPE'
M
milvus-ci-robot 已提交
19
        string defaultValue: 'registry.zilliz.com', description: 'DOCKER REGISTRY URL', name: 'DOKCER_REGISTRY_URL', trim: true
T
add ci  
test 已提交
20
        string defaultValue: 'ba070c98-c8cc-4f7c-b657-897715f359fc', description: 'DOCKER CREDENTIALS ID', name: 'DOCKER_CREDENTIALS_ID', trim: true
M
milvus-ci-robot 已提交
21
        string defaultValue: 'http://192.168.1.201/artifactory/milvus', description: 'JFROG ARTFACTORY URL', name: 'JFROG_ARTFACTORY_URL', trim: true
M
milvus-ci-robot 已提交
22
        string defaultValue: '1a527823-d2b7-44fd-834b-9844350baf14', description: 'JFROG CREDENTIALS ID', name: 'JFROG_CREDENTIALS_ID', trim: true
T
add ci  
test 已提交
23 24 25
    }
    environment {
        PROJECT_NAME = "milvus"
26 27
        MILVUS_ROOT_PATH="/var/lib"
        MILVUS_INSTALL_PREFIX="${env.MILVUS_ROOT_PATH}/${env.PROJECT_NAME}"
T
add ci  
test 已提交
28
        LOWER_BUILD_TYPE = params.BUILD_TYPE.toLowerCase()
Q
quicksilver 已提交
29
        SEMVER = "${BRANCH_NAME.contains('/') ? BRANCH_NAME.substring(BRANCH_NAME.lastIndexOf('/') + 1) : BRANCH_NAME}"
30
        PIPELINE_NAME = "milvus-ci"
D
del-zhenwu 已提交
31
        HELM_BRANCH = "0.11.0"
T
add ci  
test 已提交
32 33
    }
    stages {
34
        stage ('Milvus Build and Unittest') {
35 36 37 38
            matrix {
                axes {
                    axis {
                        name 'OS_NAME'
39
                        values 'centos7'
40 41 42 43
                    }
                    axis {
                        name 'CPU_ARCH'
                        values 'amd64'
T
add ci  
test 已提交
44
                    }
45
                    axis {
Q
quicksilver 已提交
46
                        name 'BINARY_VERSION'
47 48 49
                        values 'gpu', 'cpu'
                    }
                }
Q
quicksilver 已提交
50 51
                environment {
                    PACKAGE_VERSION = VersionNumber([
52
                        versionNumberString : '${SEMVER}-${BINARY_VERSION}-${OS_NAME}-${CPU_ARCH}-${LOWER_BUILD_TYPE}'
Q
quicksilver 已提交
53 54
                    ]);
                }
55 56 57 58 59 60 61 62
                agent {
                    kubernetes {
                        label "${OS_NAME}-${BINARY_VERSION}-build-${SEMVER}-${env.PIPELINE_NAME}-${env.BUILD_NUMBER}"
                        defaultContainer 'jnlp'
                        customWorkspace '/home/jenkins/agent/workspace'
                        yamlFile "ci/jenkins/pod/milvus-${BINARY_VERSION}-version-${OS_NAME}-build-env-pod.yaml"
                    }
                }
Q
quicksilver 已提交
63
                stages {
64 65 66
                    stage('Build and Unittest') {
                        steps {
                            container("milvus-${BINARY_VERSION}-build-env") {
67 68 69
                                MPLModule('Milvus Build')
                                MPLModule('Unittest')
                                MPLModule('Package Build')
T
add ci  
test 已提交
70
                            }
Q
quicksilver 已提交
71 72
                        }
                    }
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
                }
            }
        }
        stage ('Publish Docker Images') {
            matrix {
                axes {
                    axis {
                        name 'OS_NAME'
                        values 'centos7'
                    }
                    axis {
                        name 'CPU_ARCH'
                        values 'amd64'
                    }
                    axis {
                        name 'BINARY_VERSION'
                        values 'gpu', 'cpu'
                    }
                }
                environment {
                    PACKAGE_VERSION = VersionNumber([
                        versionNumberString : '${SEMVER}-${BINARY_VERSION}-${OS_NAME}-${CPU_ARCH}-${LOWER_BUILD_TYPE}'
                    ]);
                    SOURCE_REPO = "${params.DOKCER_REGISTRY_URL}/milvus/engine"
                    TARGET_REPO = "${params.DOKCER_REGISTRY_URL}/milvus/engine"
                    SOURCE_TAG = "${CHANGE_TARGET ? CHANGE_TARGET : SEMVER}-${BINARY_VERSION}-${OS_NAME}-${LOWER_BUILD_TYPE}"
                    TARGET_TAG = "${SEMVER}-${BINARY_VERSION}-${OS_NAME}-${LOWER_BUILD_TYPE}"
100
                    DOCKER_BUILDKIT = 1
101 102 103 104 105 106 107 108 109 110 111 112
                }
                agent {
                    kubernetes {
                        label "${OS_NAME}-${BINARY_VERSION}-publish-${SEMVER}-${env.PIPELINE_NAME}-${env.BUILD_NUMBER}"
                        defaultContainer 'jnlp'
                        yamlFile 'ci/jenkins/pod/docker-pod.yaml'
                    }
                }
                stages {
                    stage('Publish') {
                        steps {
                            container('publish-images') {
113
                                MPLModule('Publish')
T
add ci  
test 已提交
114
                            }
Q
quicksilver 已提交
115 116
                        }
                    }
117 118 119 120 121 122 123 124 125 126
                }
            }
        }
        stage ('Dev Test') {
            matrix {
                axes {
                    axis {
                        name 'OS_NAME'
                        values 'centos7'
                    }
T
add ci  
test 已提交
127

128 129 130 131
                    axis {
                        name 'CPU_ARCH'
                        values 'amd64'
                    }
132

133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
                    axis {
                        name 'BINARY_VERSION'
                        values 'gpu', 'cpu'
                    }
                }
                environment {
                    DOCKER_VERSION = "${SEMVER}-${BINARY_VERSION}-${OS_NAME}-${LOWER_BUILD_TYPE}"
                    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()
                    SHARDS_HELM_RELEASE_NAME = "${env.PIPELINE_NAME}-${env.FROMAT_SEMVER}-${env.BUILD_NUMBER}-shards-${FORMAT_OS_NAME}-${BINARY_VERSION}".toLowerCase()
                    DEV_TEST_ARTIFACTS = "_artifacts/${FORMAT_OS_NAME}/${BINARY_VERSION}"
                }
                agent {
                    kubernetes {
                        label "${OS_NAME}-${BINARY_VERSION}-dev-test-${SEMVER}-${env.PIPELINE_NAME}-${env.BUILD_NUMBER}"
                        defaultContainer 'jnlp'
                        yamlFile 'ci/jenkins/pod/testEnvironment.yaml'
                    }
                }
                stages {
                    stage('Test') {
                        steps {
                            container('milvus-test-env') {
157 158
                                MPLModule('Single Node DevTest')
                                MPLModule('Mishards DevTest')
Q
quicksilver 已提交
159 160
                            }
                        }
161 162 163 164 165
                    }
                }
                post {
                    cleanup {
                        container('milvus-test-env') {
166 167 168
                            archiveArtifacts artifacts: "${env.DEV_TEST_ARTIFACTS}/**", allowEmptyArchive: true
                            MPLModule('Cleanup Single Node DevTest')
                            MPLModule('Cleanup Mishards DevTest')
T
add ci  
test 已提交
169 170 171 172 173 174
                        }
                    }
                }
            }
        }
    }
175
    post {
176
        unsuccessful {
177
            script {
178
                if (isTimeTriggeredBuild()) {
179 180 181 182 183 184 185 186
                    // 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',
187
                    to: 'dev.milvus@zilliz.com'
188 189 190 191
                }
            }
        }
    }
T
add ci  
test 已提交
192 193
}

194
boolean isTimeTriggeredBuild() {
195
    return (currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0) ? true : false;
196
}