def FeiShu(status, serviceName){ def jobNameParts = JOB_NAME.tokenize('/') as String[] def folderName = jobNameParts[0] String statusText = "" if (status == 1) { statusText = "成功" } else if (status == 2) { statusText = "不稳定" } else { statusText = "失败" } env.COMMIT_SHORT_HASH = "${sh(script:'git log --pretty=format:\"%h\" --no-merges|head -1', returnStdout: true)}".trim() env.COMMIT_MESSAGE = "${sh(script:'git log --pretty=format:\"%s\" --no-merges|head -1', returnStdout: true)}".trim() env.COMMIT_AUTHOR = "${sh(script:'git log --pretty=format:\"%cn\" --no-merges|head -1', returnStdout: true)}".trim() sh """ curl --location --request POST 'https://open.feishu.cn/open-apis/bot/v2/hook/1babaf75-a3e4-4bf0-b236-ee9112b5f68f' \ --header 'Content-Type: application/json' \ --data '{ "msg_type": "interactive", "card": { "config": { "update_multi": true, "enable_forward": true }, "header": { "template": "blue", "title": { "content": "项目 四合一后端 构建报告", "tag": "plain_text" } }, "card_link": { "url": "${JENKINS_URL}/blue/organizations/jenkins/${folderName}/detail/${BRANCH_NAME}/${BUILD_NUMBER}/pipeline", "pc_url": "", "android_url": "", "ios_url": "" }, "elements": [ { "tag": "markdown", "content": "**构建分支**:${BRANCH_NAME}\\n**构建编号**:${BUILD_NUMBER}\\n**提交成员**:${COMMIT_AUTHOR}\\n**提交信息**:${COMMIT_MESSAGE}\\n**构建服务**:${serviceName}\\n**构建状态**:${statusText}" } ] } }' """ } pipeline { agent any triggers { pollSCM('*/5 * * * *') } environment { PROJECT_NAME = 'cqyt_system' } stages{ stage("Update All Check") { when { anyOf { branch "develop" branch "test" branch "master" } } agent { docker { image "ubuntu:22.04" args "-v hash_storage:/hash" } } steps { dir("${env.WORKSPACE}/jeecg-boot-base-core") { sh '''#!/bin/bash -xe cp -r /hash/${PROJECT_NAME}/env ./ buildFIle="./isBuild" sumPath="/hash/${PROJECT_NAME}/jeecg-boot-base-core" sumFile="${sumPath}/${BRANCH_NAME}" checksum=$(find . -type f -exec md5sum {} + | LC_ALL=C sort | md5sum) checksum=${checksum:0:32} if [[ ! -d ${sumPath} ]] then mkdir -p ${sumPath} fi if [[ ! -f ${sumFile} ]] then echo ${checksum} > ${sumFile} echo "TRUE" > ${buildFIle} else if [[ "${checksum}" = "$(cat ${sumFile})" ]] then echo "FALSE" > ${buildFIle} else echo ${checksum} > ${sumFile} echo "TRUE" > ${buildFIle} fi fi ''' script { env.IS_BUILD = readFile('./isBuild').trim() env.NACOS_SERVER_ADDR = readFile("./env/NACOS_SERVER_ADDR").trim() env.NACOS_USERNAME = readFile("./env/NACOS_USERNAME").trim() env.NACOS_PASSWORD = readFile("./env/NACOS_PASSWORD").trim() env.NACOS_NAMESPACE = readFile("./env/NACOS_NAMESPACE").trim() if ( env.BRANCH_NAME == 'master' ) { env.NETWORK_NAME = 'stage' } else if ( env.BRANCH_NAME == 'test' ) { env.NETWORK_NAME = 'test' } else { env.NETWORK_NAME = 'dev' } env.PROFILE_NAME = env.NETWORK_NAME env.NACOS_GROUP = env.NETWORK_NAME } sh "rm -f ./isBuild" } } } stage("Microservice CI") { when { anyOf { branch "develop" branch "test" branch "master" } } matrix { axes { axis { name 'SERVICE_NAME' values 'jeecg-system', 'health-im', 'health-medical', 'health-emergency', 'health-consultation' } } stages { stage("Diff Check") { agent { docker { image "ubuntu:22.04" args "-v hash_storage:/hash" } } steps { dir("${env.WORKSPACE}/${SERVICE_NAME}") { sh '''#!/bin/bash -xe buildFIle="./isBuild" if [[ "${IS_BUILD}" = "TRUE" ]] then echo "TRUE" > ${buildFIle} exit 0 fi sumPath="/hash/${PROJECT_NAME}/${SERVICE_NAME}" sumFile="${sumPath}/${BRANCH_NAME}" checksum=$(find . -type f -exec md5sum {} + | LC_ALL=C sort | md5sum) checksum=${checksum:0:32} if [[ ! -d ${sumPath} ]] then mkdir -p ${sumPath} fi if [[ ! -f ${sumFile} ]] then echo ${checksum} > ${sumFile} echo "TRUE" > ${buildFIle} else if [[ "${checksum}" = "$(cat ${sumFile})" ]] then echo "FALSE" > ${buildFIle} else echo ${checksum} > ${sumFile} echo "TRUE" > ${buildFIle} fi fi ''' script { env."${SERVICE_NAME}_IS_BUILD" = readFile('./isBuild').trim() } sh "rm -f ./isBuild" } } } stage("Maven Package") { when { environment name: "${SERVICE_NAME}_IS_BUILD", value: "TRUE" } agent { docker { image "maven:3-eclipse-temurin-8" args "-v maven-repo:/root/.m2 -v maven-conf:/usr/share/maven/conf" } } steps { dir("${env.WORKSPACE}") { echo "Package ${SERVICE_NAME}" sh "mvn -pl health-system-boms,${SERVICE_NAME}/${SERVICE_NAME}-start -e -B -U -am clean install" } dir("${env.WORKSPACE}/${SERVICE_NAME}/${SERVICE_NAME}-start/target") { echo "Copy ${SERVICE_NAME} JAR" stash(name: "${SERVICE_NAME}_jar", includes: "${SERVICE_NAME}-start.jar") } dir("${env.WORKSPACE}") { echo "Clean Build" sh "mvn clean" } } } stage("Docker Build & Run") { when { environment name: "${SERVICE_NAME}_IS_BUILD", value: "TRUE" } agent any environment { REGISTER_HOST = "registry.cn-shanghai.aliyuncs.com" REGISTER_REPO = "yg7709" IMAGE_NAME = "${PROJECT_NAME}_${SERVICE_NAME}" IMAGE_TAG_LATEST = "${BRANCH_NAME}-latest" IMAGE_TAG_COMMIT = "${BRANCH_NAME}-${GIT_COMMIT}" } steps { dir("${env.WORKSPACE}/.jenkins") { unstash("${SERVICE_NAME}_jar") echo "Docker Build ${SERVICE_NAME}" sh "docker compose -f docker-compose.build.yaml build" echo "Docker Push ${SERVICE_NAME}" sh "docker push ${REGISTER_HOST}/${REGISTER_REPO}/${IMAGE_NAME}:${IMAGE_TAG_LATEST}" sh "docker push ${REGISTER_HOST}/${REGISTER_REPO}/${IMAGE_NAME}:${IMAGE_TAG_COMMIT}" echo "Docker Deploy ${SERVICE_NAME}" sh "docker compose -p ${PROJECT_NAME}_${PROFILE_NAME} up -d ${SERVICE_NAME}" } } post { success { FeiShu(1,SERVICE_NAME) } } } } post { unstable { FeiShu(2,SERVICE_NAME) } failure { FeiShu(3,SERVICE_NAME) } } } } } }