import hudson.model.Result import hudson.model.*; import jenkins.model.CauseOfInterruption node { } def sync_source() { sh ''' hostname date ''' sh ''' cd ${WKC} [ -f src/connector/grafanaplugin/README.md ] && rm -f src/connector/grafanaplugin/README.md > /dev/null || echo "failed to remove grafanaplugin README.md" git reset --hard git fetch cd ${WK} git reset --hard git fetch ''' script { if (env.CHANGE_TARGET == 'master') { sh ''' cd ${WKC} git clean -fxd git checkout master ''' } else if (env.CHANGE_TARGET == '2.0') { sh ''' cd ${WKC} git clean -fxd git checkout 2.0 ''' } else if (env.CHANGE_TARGET == '2.4') { sh ''' cd ${WKC} git clean -fxd git checkout 2.4 ''' } else if (env.CHANGE_TARGET == '2.6') { sh ''' cd ${WKC} git clean -fxd git checkout 2.6 ''' } else { sh ''' cd ${WKC} git clean -fxd git checkout develop ''' } } sh ''' export TZ=Asia/Harbin cd ${WKC} git remote prune origin [ -f src/connector/grafanaplugin/README.md ] && rm -f src/connector/grafanaplugin/README.md > /dev/null || echo "failed to remove grafanaplugin README.md" git pull >/dev/null git clean -dfx ''' script { if (env.CHANGE_TARGET == 'master') { sh ''' cd ${WK} git checkout master ''' } else if (env.CHANGE_TARGET == '2.0') { sh ''' cd ${WK} git checkout 2.0 ''' } else if (env.CHANGE_TARGET == '2.4') { sh ''' cd ${WK} git checkout 2.4 ''' } else if (env.CHANGE_TARGET == '2.6') { sh ''' cd ${WK} git checkout 2.6 ''' } else { sh ''' cd ${WK} git checkout develop ''' } } sh ''' cd ${WK} git pull >/dev/null git clean -dfx ''' script { if (env.CHANGE_URL =~ /\/TDengine\//) { sh ''' echo "match /TDengine/ repository" cd ${WKC} git fetch origin +refs/pull/${CHANGE_ID}/merge git checkout -qf FETCH_HEAD if [ ! -d src/connector/python/.github ]; then rm -rf src/connector/python/* || : rm -rf src/connector/python/.* || : git clone --depth 1 https://github.com/taosdata/taos-connector-python src/connector/python || echo "failed to clone python connector" else cd src/connector/python || echo "src/connector/python not exist" git pull || : cd ${WKC} fi ''' } else if (env.CHANGE_URL =~ /\/TDinternal\//) { sh ''' echo "match /TDinternal/ repository" cd ${WK} git fetch origin +refs/pull/${CHANGE_ID}/merge git checkout -qf FETCH_HEAD if [ ! -d community/src/connector/python/.github ]; then rm -rf community/src/connector/python/* || : rm -rf community/src/connector/python/.* || : git clone --depth 1 https://github.com/taosdata/taos-connector-python community/src/connector/python || echo "failed to clone python connector" else cd community/src/connector/python || echo "community/src/connector/python not exist" git pull || : cd ${WK} fi ''' } else { sh ''' echo "unmatched reposiotry ${CHANGE_URL}" ''' } } sh ''' cd ${WKC} git submodule update --init --recursive ''' } def pre_test() { sync_source() sh ''' cd ${WK} mkdir -p debug cd debug go env -w GOPROXY=https://goproxy.cn,direct go env -w GO111MODULE=on cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true > /dev/null make -j8 >/dev/null ''' return 1 } def pre_test_mac() { sync_source() sh ''' cd ${WK} mkdir -p debug cd debug go env -w GOPROXY=https://goproxy.cn,direct go env -w GO111MODULE=on cmake .. -DBUILD_TOOLS=false > /dev/null make -j8 >/dev/null ''' return 1 } pipeline { agent {label " dispatcher "} options { skipDefaultCheckout() } environment{ WK = '/var/data/jenkins/workspace/TDinternal' WKC = '/var/data/jenkins/workspace/TDinternal/community' LOGDIR = '/var/data/jenkins/workspace/log' } stages { stage ('pre_build') { steps { sh ''' date pwd env hostname ''' } } stage ('Parallel build stage') { //only build pr options { skipDefaultCheckout() } when { allOf { changeRequest() not { expression { env.CHANGE_BRANCH =~ /docs\// }} } } parallel { stage ('dispatcher sync source') { steps { timeout(time: 20, unit: 'MINUTES') { sync_source() script { sh ''' echo "dispatcher ready" date ''' } } } } stage ('build worker01') { agent {label " worker01 "} steps { timeout(time: 20, unit: 'MINUTES') { pre_test() script { sh ''' echo "worker01 build done" date ''' } } } } stage ('build worker02') { agent {label " worker02 "} steps { timeout(time: 20, unit: 'MINUTES') { pre_test() script { sh ''' echo "worker02 build done" date ''' } } } } } } stage('run test') { options { skipDefaultCheckout() } when { allOf { changeRequest() not { expression { env.CHANGE_BRANCH =~ /docs\// }} } } parallel { stage ('build worker07_arm64') { agent {label " worker07_arm64 "} steps { timeout(time: 20, unit: 'MINUTES') { pre_test() script { sh ''' echo "worker07_arm64 build done" date ''' } } } } stage ('build Mac_catalina ') { agent {label " Mac_catalina "} steps { timeout(time: 20, unit: 'MINUTES') { pre_test_mac() script { sh ''' echo "Mac_catalina build done" date ''' } } } } stage('run cases') { steps { sh ''' date hostname ''' catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { timeout(time: 20, unit: 'MINUTES') { sh ''' date cd ${WKC}/tests/parallel_test time ./run.sh -m m.json -t cases.task -l ${LOGDIR} -b ${BRANCH_NAME} date hostname ''' } } } } } } } post { success { emailext ( subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' SUCCESS", body: """

构建信息
  • 构建名称>>分支:${env.BRANCH_NAME}
  • 构建结果: Successful
  • 构建编号:${BUILD_NUMBER}
  • 触发用户:${env.CHANGE_AUTHOR}
  • 提交信息:${env.CHANGE_TITLE}
  • 构建地址:${BUILD_URL}
  • 构建日志:${BUILD_URL}console
""", to: "${env.CHANGE_AUTHOR_EMAIL}", from: "support@taosdata.com" ) } failure { emailext ( subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' FAIL", body: """

构建信息
  • 构建名称>>分支:${env.BRANCH_NAME}
  • 构建结果: Failure
  • 构建编号:${BUILD_NUMBER}
  • 触发用户:${env.CHANGE_AUTHOR}
  • 提交信息:${env.CHANGE_TITLE}
  • 构建地址:${BUILD_URL}
  • 构建日志:${BUILD_URL}console
""", to: "${env.CHANGE_AUTHOR_EMAIL}", from: "support@taosdata.com" ) } } }