Files
IM_NEW/Jenkinsfile
T
2026-05-09 17:13:25 +08:00

178 lines
6.6 KiB
Groovy

pipeline {
agent { label '构建机1' }
environment {
IMAGE_PREFIX = "im"
IMAGE_TAG = "${BUILD_NUMBER}"
DOCKER_BUILDKIT = "1"
// 如果你有 Harbor,可以改成:
// REGISTRY = "harbor.xxx.com/im"
REGISTRY = "reg.nxsir.cn/im"
}
stages {
stage('拉取代码') {
steps {
checkout scm
}
}
stage('检测变更') {
steps {
script {
def diffCmd = '''
if git rev-parse HEAD~1 >/dev/null 2>&1; then
git diff --name-only HEAD~1 HEAD
else
git ls-files
fi
'''
env.CHANGED_FILES = sh(
script: diffCmd,
returnStdout: true
).trim()
echo "变更文件:"
echo env.CHANGED_FILES
}
}
}
stage('构建镜像') {
steps {
script {
def services = [
[
name: 'connector-service',
dockerfile: 'ConnectorService/Dockerfile',
image: 'connector-service',
paths: [
'ConnectorService/',
'IM.Commons/',
'IM.InitCommon/',
'IM.Protocols/'
]
],
[
name: 'user-service',
dockerfile: 'User.WebApi/Dockerfile',
image: 'user-service',
paths: [
'User.WebApi/',
'User.Domain/',
'User.Infrastructure/',
'DomainCommons/',
'Infrastructure/',
'IM.ASPNETCore/',
'IM.Commons/',
'IM.InitCommon/',
'IM.Jwt/',
'IM.Protocols/'
]
],
[
name: 'contact-service',
dockerfile: 'ContactService.WebApi/Dockerfile',
image: 'contact-service',
paths: [
'ContactService.WebApi/',
'ContactService.Domain/',
'ContactService.Infrastructure/',
'DomainCommons/',
'Infrastructure/',
'IM.ASPNETCore/',
'IM.Commons/',
'IM.InitCommon/',
'IM.Jwt/',
'IM.Protocols/'
]
],
[
name: 'group-service',
dockerfile: 'GroupService.WebApi/Dockerfile',
image: 'group-service',
paths: [
'GroupService.WebApi/',
'GroupService.Domain/',
'GroupService.Infrastructure/',
'DomainCommons/',
'Infrastructure/',
'IM.ASPNETCore/',
'IM.Commons/',
'IM.InitCommon/',
'IM.Jwt/',
'IM.Protocols/'
]
],
[
name: 'message-service',
dockerfile: 'MessageService.WebApi/Dockerfile',
image: 'message-service',
paths: [
'MessageService.WebApi/',
'MessageService.Domain/',
'MessageService.Infrastructure/',
'DomainCommons/',
'Infrastructure/',
'IM.ASPNETCore/',
'IM.Commons/',
'IM.InitCommon/',
'IM.Jwt/',
'IM.Protocols/'
]
]
]
def changedFiles = env.CHANGED_FILES.split("\\n") as List
services.each { svc ->
def needBuild = changedFiles.any { file ->
svc.paths.any { path ->
file.startsWith(path)
}
}
if (needBuild) {
def imageName = "${IMAGE_PREFIX}-${svc.image}:${IMAGE_TAG}"
def latestName = "${IMAGE_PREFIX}-${svc.image}:latest"
echo "开始构建镜像:${imageName}"
sh """
docker build \
-t ${imageName} \
-t ${latestName} \
-f ${svc.dockerfile} .
"""
if (env.REGISTRY?.trim()) {
sh """
docker tag ${imageName} ${REGISTRY}/${svc.image}:${IMAGE_TAG}
docker tag ${latestName} ${REGISTRY}/${svc.image}:latest
docker push ${REGISTRY}/${svc.image}:${IMAGE_TAG}
docker push ${REGISTRY}/${svc.image}:latest
"""
}
} else {
echo "跳过构建:${svc.name},没有相关代码变更"
}
}
}
}
}
}
post {
success {
echo "流水线执行成功"
}
failure {
echo "流水线执行失败"
}
}
}