Jenkinsfile2 18.0 KB
Newer Older
L
liuyq-617 已提交
1 2 3 4 5 6 7
import hudson.model.Result
import hudson.model.*;
import jenkins.model.CauseOfInterruption
node {
}

def abortPreviousBuilds() {
T
tangfangzhi 已提交
8 9 10 11
    def currentJobName = env.JOB_NAME
    def currentBuildNumber = env.BUILD_NUMBER.toInteger()
    def jobs = Jenkins.instance.getItemByFullName(currentJobName)
    def builds = jobs.getBuilds()
L
liuyq-617 已提交
12

T
tangfangzhi 已提交
13 14 15 16
    for (build in builds) {
        if (!build.isBuilding()) {
            continue;
        }
L
liuyq-617 已提交
17

T
tangfangzhi 已提交
18 19 20
        if (currentBuildNumber == build.getNumber().toInteger()) {
            continue;
        }
L
liuyq-617 已提交
21

T
tangfangzhi 已提交
22 23
        build.doKill()    //doTerm(),doKill(),doTerm()
    }
L
liuyq-617 已提交
24 25 26 27
}
//  abort previous build
abortPreviousBuilds()
def abort_previous(){
T
tangfangzhi 已提交
28 29 30
    def buildNumber = env.BUILD_NUMBER as int
    if (buildNumber > 1) milestone(buildNumber - 1)
    milestone(buildNumber)
L
liuyq-617 已提交
31 32
}
def pre_test(){
33 34 35
    sh '''
        hostname
        date
36
        env
37 38 39 40
    '''
    sh '''
        cd ${WK}
        git reset --hard
41 42
        git remote prune origin
        git fetch
43 44
        cd ${WKC}
        git reset --hard
45
        git clean -fxd
46 47
        git remote prune origin
        git fetch
48
    '''
L
liuyq-617 已提交
49
    script {
50 51 52 53 54 55
        sh '''
            cd ${WK}
            git checkout ''' + env.CHANGE_TARGET + '''
            cd ${WKC}
            git checkout ''' + env.CHANGE_TARGET + '''
        '''
T
tangfangzhi 已提交
56
    }
T
tangfangzhi 已提交
57 58 59
    if (env.CHANGE_URL =~ /\/TDengine\//) {
        sh '''
            cd ${WKC}
T
tangfangzhi 已提交
60
            git remote prune origin
T
tangfangzhi 已提交
61
            git pull >/dev/null
62
            git log -5
63
            echo "`date "+%Y%m%d-%H%M%S"` ${JOB_NAME}:${BRANCH_NAME}:${BUILD_ID}:${CHANGE_TARGET}" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
64
            echo "CHANGE_BRANCH:${CHANGE_BRANCH}" >>${WKDIR}/jenkins.log
65
            echo "community log: `git log -5`" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
66 67
            git fetch origin +refs/pull/${CHANGE_ID}/merge
            git checkout -qf FETCH_HEAD
68
            git log -5
69
            echo "community log merged: `git log -5`" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
70 71
            cd ${WK}
            git pull >/dev/null
72
            git log -5
73
            echo "tdinternal log: `git log -5`" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
74 75 76 77 78
        '''
    } else if (env.CHANGE_URL =~ /\/TDinternal\//) {
        sh '''
            cd ${WK}
            git pull >/dev/null
79
            git log -5
80
            echo "`date "+%Y%m%d-%H%M%S"` ${JOB_NAME}:${BRANCH_NAME}:${BUILD_ID}:${CHANGE_TARGET}" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
81
            echo "CHANGE_BRANCH:${CHANGE_BRANCH}" >>${WKDIR}/jenkins.log
82
            echo "tdinternal log: `git log -5`" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
83 84
            git fetch origin +refs/pull/${CHANGE_ID}/merge
            git checkout -qf FETCH_HEAD
85
            git log -5
86
            echo "tdinternal log merged: `git log -5`" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
87
            cd ${WKC}
T
tangfangzhi 已提交
88
            git remote prune origin
T
tangfangzhi 已提交
89
            git pull >/dev/null
90
            git log -5
91
            echo "community log: `git log -5`" >>${WKDIR}/jenkins.log
T
tangfangzhi 已提交
92 93 94 95 96 97
        '''
    } else {
        sh '''
            echo "unmatched reposiotry ${CHANGE_URL}"
        '''
    }
sangshuduo's avatar
sangshuduo 已提交
98 99 100 101 102
    sh '''
        cd ${WKC}
        git rm --cached tools/taos-tools 2>/dev/null || :
        git rm --cached tools/taosadapter 2>/dev/null || :
        git rm --cached tools/taosws-rs 2>/dev/null || :
wafwerar's avatar
wafwerar 已提交
103
        git rm --cached examples/rust 2>/dev/null || :
sangshuduo's avatar
sangshuduo 已提交
104
    '''
T
tangfangzhi 已提交
105
    sh '''
L
liuyq-617 已提交
106
        cd ${WKC}
T
tangfangzhi 已提交
107 108 109 110 111 112
        git submodule update --init --recursive
    '''
    sh '''
        cd ${WKPY}
        git reset --hard
        git pull
113
        git log -5
114 115
        echo "python connector log: `git log -5`" >>${WKDIR}/jenkins.log
        echo >>${WKDIR}/jenkins.log
L
liuyq-617 已提交
116
    '''
T
tangfangzhi 已提交
117 118
    return 1
}
T
tangfangzhi 已提交
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
def pre_test_build_mac() {
    sh '''
        hostname
        date
    '''
    sh '''
        cd ${WK}
        rm -rf debug
        mkdir debug
    '''
    sh '''
        cd ${WK}/debug
        cmake ..
        make -j8
    '''
    sh '''
        date
    '''
}
T
tangfangzhi 已提交
138 139 140
def pre_test_win(){
    bat '''
        hostname
141 142 143
        taskkill /f /t /im python.exe
        taskkill /f /t /im bash.exe
        taskkill /f /t /im taosd.exe
T
tangfangzhi 已提交
144 145
        ipconfig
        set
T
tangfangzhi 已提交
146 147
        date /t
        time /t
T
tangfangzhi 已提交
148
        rd /s /Q %WIN_INTERNAL_ROOT%\\debug || exit 0
T
tangfangzhi 已提交
149 150
    '''
    bat '''
T
tangfangzhi 已提交
151
        cd %WIN_INTERNAL_ROOT%
152
        git reset --hard
153 154
        git remote prune origin
        git fetch
T
tangfangzhi 已提交
155 156
    '''
    bat '''
T
tangfangzhi 已提交
157
        cd %WIN_COMMUNITY_ROOT%
T
tangfangzhi 已提交
158
        git reset --hard
159 160
        git remote prune origin
        git fetch
T
tangfangzhi 已提交
161 162
    '''
    script {
163 164 165 166 167 168 169 170
        bat '''
            cd %WIN_INTERNAL_ROOT%
            git checkout ''' + env.CHANGE_TARGET + '''
        '''
        bat '''
            cd %WIN_COMMUNITY_ROOT%
            git checkout ''' + env.CHANGE_TARGET + '''
        '''
T
tangfangzhi 已提交
171
    }
172 173 174
    script {
        if (env.CHANGE_URL =~ /\/TDengine\//) {
            bat '''
T
tangfangzhi 已提交
175
                cd %WIN_INTERNAL_ROOT%
176
                git pull
T
tangfangzhi 已提交
177 178
            '''
            bat '''
T
tangfangzhi 已提交
179 180
                cd %WIN_COMMUNITY_ROOT%
                git remote prune origin
181
                git pull
T
tangfangzhi 已提交
182 183
            '''
            bat '''
T
tangfangzhi 已提交
184
                cd %WIN_COMMUNITY_ROOT%
T
tangfangzhi 已提交
185 186 187
                git fetch origin +refs/pull/%CHANGE_ID%/merge
            '''
            bat '''
T
tangfangzhi 已提交
188
                cd %WIN_COMMUNITY_ROOT%
189 190 191 192
                git checkout -qf FETCH_HEAD
            '''
        } else if (env.CHANGE_URL =~ /\/TDinternal\//) {
            bat '''
T
tangfangzhi 已提交
193
                cd %WIN_INTERNAL_ROOT%
194
                git pull
T
tangfangzhi 已提交
195 196
            '''
            bat '''
T
tangfangzhi 已提交
197
                cd %WIN_INTERNAL_ROOT%
T
tangfangzhi 已提交
198 199 200
                git fetch origin +refs/pull/%CHANGE_ID%/merge
            '''
            bat '''
T
tangfangzhi 已提交
201
                cd %WIN_INTERNAL_ROOT%
202
                git checkout -qf FETCH_HEAD
T
tangfangzhi 已提交
203 204
            '''
            bat '''
T
tangfangzhi 已提交
205 206
                cd %WIN_COMMUNITY_ROOT%
                git remote prune origin
207 208 209
                git pull
            '''
        } else {
T
tangfangzhi 已提交
210 211
            bat '''
                echo "unmatched reposiotry %CHANGE_URL%"
212 213 214
            '''
        }
    }
T
tangfangzhi 已提交
215
    bat '''
T
tangfangzhi 已提交
216
        cd %WIN_INTERNAL_ROOT%
T
tangfangzhi 已提交
217
        git branch
T
tangfangzhi 已提交
218 219 220
        git log -5
    '''
    bat '''
T
tangfangzhi 已提交
221
        cd %WIN_COMMUNITY_ROOT%
T
tangfangzhi 已提交
222
        git branch
T
tangfangzhi 已提交
223 224
        git log -5
    '''
sangshuduo's avatar
sangshuduo 已提交
225 226 227 228 229
    bat '''
        cd %WIN_COMMUNITY_ROOT%
        git rm --cached tools/taos-tools 2>nul
        git rm --cached tools/taosadapter 2>nul
        git rm --cached tools/taosws-rs 2>nul
wafwerar's avatar
wafwerar 已提交
230
        git rm --cached examples/rust 2>nul
sangshuduo's avatar
sangshuduo 已提交
231 232
        exit 0
    '''
T
tangfangzhi 已提交
233
    bat '''
T
tangfangzhi 已提交
234
        cd %WIN_COMMUNITY_ROOT%
235
        git submodule update --init --recursive
T
tangfangzhi 已提交
236
    '''
237
    bat '''
T
tangfangzhi 已提交
238
        cd %WIN_CONNECTOR_ROOT%
239 240 241 242 243
        git branch
        git reset --hard
        git pull
    '''
    bat '''
T
tangfangzhi 已提交
244
        cd %WIN_CONNECTOR_ROOT%
245 246
        git log -5
    '''
T
tangfangzhi 已提交
247 248 249 250 251
}
def pre_test_build_win() {
    bat '''
        echo "building ..."
        time /t
T
tangfangzhi 已提交
252
        cd %WIN_INTERNAL_ROOT%
T
tangfangzhi 已提交
253 254
        mkdir debug
        cd debug
T
tangfangzhi 已提交
255
        time /t
T
tangfangzhi 已提交
256 257
        call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat" x64
        set CL=/MP8
T
tangfangzhi 已提交
258 259
        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> cmake"
        time /t
T
tangfangzhi 已提交
260
        cmake .. -G "NMake Makefiles JOM" || exit 7
T
tangfangzhi 已提交
261
        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> jom -j 6"
262
        time /t
T
tangfangzhi 已提交
263
        jom -j 6 || exit 8
T
tangfangzhi 已提交
264
        time /t
T
tangfangzhi 已提交
265
    '''
266
    bat '''
T
tangfangzhi 已提交
267
        cd %WIN_CONNECTOR_ROOT%
268
        python -m pip install .
T
tangfangzhi 已提交
269
        xcopy /e/y/i/f %WIN_INTERNAL_ROOT%\\debug\\build\\lib\\taos.dll C:\\Windows\\System32
270
    '''
L
liuyq-617 已提交
271 272
    return 1
}
T
tangfangzhi 已提交
273
def run_win_ctest() {
T
tangfangzhi 已提交
274 275 276
    bat '''
        echo "windows ctest ..."
        time /t
T
tangfangzhi 已提交
277
        cd %WIN_INTERNAL_ROOT%\\debug
T
tangfangzhi 已提交
278
        ctest -j 1 || exit 7
T
tangfangzhi 已提交
279 280 281
        time /t
    '''
}
T
tangfangzhi 已提交
282 283 284
def run_win_test() {
    bat '''
        echo "windows test ..."
T
tangfangzhi 已提交
285
        cd %WIN_CONNECTOR_ROOT%
T
tangfangzhi 已提交
286
        python -m pip install .
T
tangfangzhi 已提交
287
        xcopy /e/y/i/f %WIN_INTERNAL_ROOT%\\debug\\build\\lib\\taos.dll C:\\Windows\\System32
T
tangfangzhi 已提交
288
        ls -l C:\\Windows\\System32\\taos.dll
T
tangfangzhi 已提交
289
        time /t
T
tangfangzhi 已提交
290
        cd %WIN_SYSTEM_TEST_ROOT%
T
tangfangzhi 已提交
291
        echo "testing ..."
292
        test-all.bat ci
T
tangfangzhi 已提交
293 294 295
        time /t
    '''
}
L
liuyq-617 已提交
296 297

pipeline {
T
tangfangzhi 已提交
298 299 300
    agent none
    options { skipDefaultCheckout() } 
    environment{
T
tangfangzhi 已提交
301
        WKDIR = '/var/lib/jenkins/workspace'
T
tangfangzhi 已提交
302
        WK = '/var/lib/jenkins/workspace/TDinternal'
T
tangfangzhi 已提交
303 304
        WKC = '/var/lib/jenkins/workspace/TDinternal/community'
        WKPY = '/var/lib/jenkins/workspace/taos-connector-python'
T
tangfangzhi 已提交
305 306 307
    }
    stages {
        stage('run test') {
T
tangfangzhi 已提交
308 309 310 311 312
            when {
                allOf {
                    not { expression { env.CHANGE_BRANCH =~ /docs\// }}
                }
            }
T
tangfangzhi 已提交
313
            parallel {
T
tangfangzhi 已提交
314 315
                stage('windows test') {
                    agent{label " windows10_01 || windows10_02 || windows10_03 || windows10_04 "}
T
tangfangzhi 已提交
316 317 318 319 320 321
                    environment{
                        WIN_INTERNAL_ROOT="C:\\workspace\\${env.EXECUTOR_NUMBER}\\TDinternal"
                        WIN_COMMUNITY_ROOT="C:\\workspace\\${env.EXECUTOR_NUMBER}\\TDinternal\\community"
                        WIN_SYSTEM_TEST_ROOT="C:\\workspace\\${env.EXECUTOR_NUMBER}\\TDinternal\\community\\tests\\system-test"
                        WIN_CONNECTOR_ROOT="C:\\workspace\\${env.EXECUTOR_NUMBER}\\taos-connector-python"
                    }
T
tangfangzhi 已提交
322
                    steps {
T
tangfangzhi 已提交
323
                        catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
T
tangfangzhi 已提交
324
                            timeout(time: 55, unit: 'MINUTES'){
T
tangfangzhi 已提交
325 326 327 328 329 330
                                pre_test_win()
                                pre_test_build_win()
                                run_win_ctest()
                                run_win_test()
                            }
                        }
T
tangfangzhi 已提交
331 332
                    }
                }
T
tangfangzhi 已提交
333 334 335 336 337 338 339 340 341 342 343
                stage('mac test') {
                    agent{label " Mac_catalina "}
                    steps {
                        catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
                            timeout(time: 20, unit: 'MINUTES'){
                                pre_test()
                                pre_test_build_mac()
                            }
                        }
                    }
                }
T
tangfangzhi 已提交
344
                stage('linux test') {
T
tangfangzhi 已提交
345
                    agent{label " worker03 || slave215 || slave217 || slave219 "}
T
tangfangzhi 已提交
346 347 348 349 350
                    options { skipDefaultCheckout() } 
                    when {
                        changeRequest()
                    }
                    steps {
351 352 353 354 355 356 357 358
                        script {
                            def linux_node_ip = sh (
                                script: 'ip addr|grep 192|grep -v virbr|awk "{print \\\$2}"|sed "s/\\/.*//"',
                                returnStdout: true
                            ).trim()
                            echo "${linux_node_ip}"
                            echo "${WKDIR}/restore.sh -p ${BRANCH_NAME} -n ${BUILD_ID} -c {container name}"
                        }
T
tangfangzhi 已提交
359
                        catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
360
                            timeout(time: 120, unit: 'MINUTES'){
361
                                pre_test()
T
tangfangzhi 已提交
362 363 364 365
                                script {
                                    sh '''
                                        date
                                        rm -rf ${WKC}/debug
366
                                        cd ${WKC}/tests/parallel_test
T
tangfangzhi 已提交
367 368 369 370
                                        time ./container_build.sh -w ${WKDIR} -t 8 -e
                                        rm -f /tmp/cases.task
                                        ./collect_cases.sh -e
                                    '''
T
tangfangzhi 已提交
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
                                    def extra_param = ""
                                    def log_server_file = "/home/log_server.json"
                                    def timeout_cmd = ""
                                    if (fileExists(log_server_file)) {
                                        def log_server_enabled = sh (
                                            script: 'jq .enabled ' + log_server_file,
                                            returnStdout: true
                                        ).trim()
                                        def timeout_param = sh (
                                            script: 'jq .timeout ' + log_server_file,
                                            returnStdout: true
                                        ).trim()
                                        if (timeout_param != "null" &&  timeout_param != "0") {
                                            timeout_cmd = "timeout " + timeout_param
                                        }
                                        if (log_server_enabled == "1") {
                                            def log_server = sh (
                                                script: 'jq .server ' + log_server_file + ' | sed "s/\\\"//g"',
                                                returnStdout: true
                                            ).trim()
                                            if (log_server != "null" && log_server != "") { 
                                                extra_param = "-w " + log_server
                                            }
                                        }
                                    }
T
tangfangzhi 已提交
396 397 398 399
                                    sh '''
                                        cd ${WKC}/tests/parallel_test
                                        export DEFAULT_RETRY_TIME=2
                                        date
T
tangfangzhi 已提交
400
                                        ''' + timeout_cmd + ''' time ./run.sh -e -m /home/m.json -t /tmp/cases.task -b ${BRANCH_NAME}_${BUILD_ID} -l ${WKDIR}/log -o 480 ''' + extra_param + '''
T
tangfangzhi 已提交
401 402 403 404
                                    '''
                                }
                            }
                        }
T
tangfangzhi 已提交
405
                        /*catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
T
tangfangzhi 已提交
406
                            timeout(time: 15, unit: 'MINUTES'){
T
tangfangzhi 已提交
407 408 409 410
                                script {
                                    sh '''
                                        echo "packaging ..."
                                        date
411
                                        rm -rf ${WKC}/release/*
T
tangfangzhi 已提交
412 413
                                        cd ${WKC}/packaging
                                        ./release.sh -v cluster -n 3.0.0.100 -s static
T
tangfangzhi 已提交
414
                                    '''
415 416
                                }
                            }
T
tangfangzhi 已提交
417
                        }*/
T
tangfangzhi 已提交
418 419
                    }
                }
L
liuyq-617 已提交
420
            }
T
tangfangzhi 已提交
421 422 423
        }
    }
    post {  
L
liuyq-617 已提交
424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501
        success {
            emailext (
                subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' SUCCESS",
                body: """<!DOCTYPE html>
                <html>
                <head>
                <meta charset="UTF-8">
                </head>
                <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
                    <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 16pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
                        <tr>
                            <td><br />
                                <b><font color="#0B610B"><font size="6">构建信息</font></font></b>
                                <hr size="2" width="100%" align="center" /></td>
                        </tr>
                        <tr>
                            <td>
                                <ul>
                                <div style="font-size:18px">
                                    <li>构建名称>>分支:${env.BRANCH_NAME}</li>
                                    <li>构建结果:<span style="color:green"> Successful </span></li>
                                    <li>构建编号:${BUILD_NUMBER}</li>
                                    <li>触发用户:${env.CHANGE_AUTHOR}</li>
                                    <li>提交信息:${env.CHANGE_TITLE}</li>
                                    <li>构建地址:<a href=${BUILD_URL}>${BUILD_URL}</a></li>
                                    <li>构建日志:<a href=${BUILD_URL}console>${BUILD_URL}console</a></li>
                                    
                                </div>
                                </ul>
                            </td>
                        </tr>
                    </table></font>
                </body>
                </html>""",
                to: "${env.CHANGE_AUTHOR_EMAIL}",
                from: "support@taosdata.com"
            )
        }
        failure {
            emailext (
                subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' FAIL",
                body: """<!DOCTYPE html>
                <html>
                <head>
                <meta charset="UTF-8">
                </head>
                <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
                    <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 16pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
                        <tr>
                            <td><br />
                                <b><font color="#0B610B"><font size="6">构建信息</font></font></b>
                                <hr size="2" width="100%" align="center" /></td>
                        </tr>
                        <tr>
                            <td>
                                <ul>
                                <div style="font-size:18px">
                                    <li>构建名称>>分支:${env.BRANCH_NAME}</li>
                                    <li>构建结果:<span style="color:red"> Failure </span></li>
                                    <li>构建编号:${BUILD_NUMBER}</li>
                                    <li>触发用户:${env.CHANGE_AUTHOR}</li>
                                    <li>提交信息:${env.CHANGE_TITLE}</li>
                                    <li>构建地址:<a href=${BUILD_URL}>${BUILD_URL}</a></li>
                                    <li>构建日志:<a href=${BUILD_URL}console>${BUILD_URL}console</a></li>
                                    
                                </div>
                                </ul>
                            </td>
                        </tr>
                    </table></font>
                </body>
                </html>""",
                to: "${env.CHANGE_AUTHOR_EMAIL}",
                from: "support@taosdata.com"
            )
        }
    } 
}