178 lines
6.6 KiB
Groovy
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 "流水线执行失败"
|
|
}
|
|
}
|
|
} |