pipeline { agent { label '构建机1' } environment { IMAGE_PREFIX = "im" IMAGE_TAG = "${BUILD_NUMBER}" DOCKER_CREDS = 'im_harbor_key' DOCKER_BUILDKIT = "1" // Harbor 示例: // REGISTRY = "harbor.xxx.com/im" REGISTRY_HOST = "reg.nxsir.cn" REGISTRY = "reg.nxsir.cn/im" } stages { stage('拉取代码') { steps { checkout scm } } stage('Login Registry') { steps { withCredentials([ usernamePassword( credentialsId: "${DOCKER_CREDS}", usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD' ) ]) { sh """ set -e echo "\$DOCKER_PASSWORD" | docker login ${REGISTRY_HOST} -u "\$DOCKER_USERNAME" --password-stdin """ } } } stage('构建 UserService') { steps { script { buildImage( "user-service", "User.WebApi/Dockerfile" ) } } } stage('构建 ContactService') { steps { script { buildImage( "contact-service", "ContactService.WebApi/Dockerfile" ) } } } stage('构建 GroupService') { steps { script { buildImage( "group-service", "GroupService.WebApi/Dockerfile" ) } } } stage('构建 MessageService') { steps { script { buildImage( "message-service", "MessageService.WebApi/Dockerfile" ) } } } stage('构建 FileService') { steps { script { buildImage( "file-service", "FileService.WebApi/Dockerfile" ) } } } stage('构建 ConnectorService') { steps { script { buildImage( "connector-service", "ConnectorService/Dockerfile" ) } } } } post { success { echo "全部镜像构建完成" } failure { echo "镜像构建失败" } } } def buildImage(serviceName, dockerfilePath) { def imageName = "${env.IMAGE_PREFIX}-${serviceName}:${env.IMAGE_TAG}" def latestName = "${env.IMAGE_PREFIX}-${serviceName}:latest" sh """ docker build \ --pull \ -t ${imageName} \ -t ${latestName} \ -f ${dockerfilePath} . """ if (env.REGISTRY?.trim()) { sh """ docker tag ${imageName} ${env.REGISTRY}/${serviceName}:${env.IMAGE_TAG} docker tag ${latestName} ${env.REGISTRY}/${serviceName}:latest docker push ${env.REGISTRY}/${serviceName}:${env.IMAGE_TAG} docker push ${env.REGISTRY}/${serviceName}:latest docker rmi ${env.REGISTRY}/${serviceName}:${env.IMAGE_TAG} || true docker rmi ${env.REGISTRY}/${serviceName}:latest || true """ } sh """ docker rmi ${imageName} || true docker rmi ${latestName} || true docker builder prune -f || true """ }