Files
xj-platform/.jenkins/Jenkinsfile
T
2025-06-30 14:31:09 +08:00

274 lines
11 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
def FeiShu(status, serviceName){
def jobNameParts = JOB_NAME.tokenize('/') as String[]
def folderName = jobNameParts[0]
String statusText = ""
if (status == 1) {
statusText = "<font color=\\\"green\\\">成功<font>"
} else if (status == 2) {
statusText = "<font color=\\\"yellow\\\">不稳定<font>"
} else {
statusText = "<font color=\\\"red\\\">失败<font>"
}
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)
}
}
}
}
}
}