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

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

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

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

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

pipeline {
T
tangfangzhi 已提交
346 347 348
    agent none
    options { skipDefaultCheckout() } 
    environment{
T
tangfangzhi 已提交
349
        WKDIR = '/var/lib/jenkins/workspace'
T
tangfangzhi 已提交
350
        WK = '/var/lib/jenkins/workspace/TDinternal'
T
tangfangzhi 已提交
351 352
        WKC = '/var/lib/jenkins/workspace/TDinternal/community'
        WKPY = '/var/lib/jenkins/workspace/taos-connector-python'
T
tangfangzhi 已提交
353 354
    }
    stages {
355 356 357 358 359 360 361 362 363 364
        stage('check') {
            when {
                allOf {
                    not { expression { env.CHANGE_BRANCH =~ /docs\// }}
                    not { expression { env.CHANGE_URL =~ /\/TDinternal\// }}
                }
            }
            parallel {
                stage('check docs') {
                    agent{label " worker03 || slave215 || slave217 || slave219 || Mac_catalina "}
T
tangfangzhi 已提交
365 366 367
                    steps {
                        check_docs()
                    }
368 369 370
                }
            }
        }
T
tangfangzhi 已提交
371
        stage('run test') {
T
tangfangzhi 已提交
372 373 374
            when {
                allOf {
                    not { expression { env.CHANGE_BRANCH =~ /docs\// }}
375
                    expression { docs_only == 0 }
T
tangfangzhi 已提交
376 377
                }
            }
T
tangfangzhi 已提交
378
            parallel {
T
tangfangzhi 已提交
379 380
                stage('windows test') {
                    agent{label " windows10_01 || windows10_02 || windows10_03 || windows10_04 "}
T
tangfangzhi 已提交
381 382 383 384 385 386
                    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 已提交
387
                    steps {
T
tangfangzhi 已提交
388
                        catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
T
tangfangzhi 已提交
389
                            timeout(time: 55, unit: 'MINUTES'){
T
tangfangzhi 已提交
390 391 392 393 394 395
                                pre_test_win()
                                pre_test_build_win()
                                run_win_ctest()
                                run_win_test()
                            }
                        }
T
tangfangzhi 已提交
396 397
                    }
                }
T
tangfangzhi 已提交
398 399 400 401 402 403 404 405 406 407 408
                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 已提交
409
                stage('linux test') {
T
tangfangzhi 已提交
410
                    agent{label " worker03 || slave215 || slave217 || slave219 "}
T
tangfangzhi 已提交
411 412 413 414 415
                    options { skipDefaultCheckout() } 
                    when {
                        changeRequest()
                    }
                    steps {
416 417 418 419 420 421 422 423
                        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 已提交
424
                        catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
425
                            timeout(time: 120, unit: 'MINUTES'){
426
                                pre_test()
T
tangfangzhi 已提交
427 428 429 430
                                script {
                                    sh '''
                                        date
                                        rm -rf ${WKC}/debug
431
                                        cd ${WKC}/tests/parallel_test
432
                                        time ./container_build.sh -w ${WKDIR} -t 10 -e
T
tangfangzhi 已提交
433
                                    '''
T
tangfangzhi 已提交
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
                                    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 已提交
459 460 461 462
                                    sh '''
                                        cd ${WKC}/tests/parallel_test
                                        export DEFAULT_RETRY_TIME=2
                                        date
463
                                        ''' + timeout_cmd + ''' time ./run.sh -e -m /home/m.json -t cases.task -b ${BRANCH_NAME}_${BUILD_ID} -l ${WKDIR}/log -o 480 ''' + extra_param + '''
T
tangfangzhi 已提交
464 465 466 467
                                    '''
                                }
                            }
                        }
T
tangfangzhi 已提交
468
                        /*catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
T
tangfangzhi 已提交
469
                            timeout(time: 15, unit: 'MINUTES'){
T
tangfangzhi 已提交
470 471 472 473
                                script {
                                    sh '''
                                        echo "packaging ..."
                                        date
474
                                        rm -rf ${WKC}/release/*
T
tangfangzhi 已提交
475 476
                                        cd ${WKC}/packaging
                                        ./release.sh -v cluster -n 3.0.0.100 -s static
T
tangfangzhi 已提交
477
                                    '''
478 479
                                }
                            }
T
tangfangzhi 已提交
480
                        }*/
T
tangfangzhi 已提交
481 482
                    }
                }
L
liuyq-617 已提交
483
            }
T
tangfangzhi 已提交
484 485 486
        }
    }
    post {  
L
liuyq-617 已提交
487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564
        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"
            )
        }
    } 
}