pipeline {
    agent { label '构建机1' }

    environment {
        IMAGE_PREFIX = "im"
        IMAGE_TAG = "${BUILD_NUMBER}"

        DOCKER_BUILDKIT = "1"

        // Harbor 示例：
        // REGISTRY = "harbor.xxx.com/im"

        REGISTRY = ""
    }

    stages {

        stage('拉取代码') {
            steps {
                checkout scm
            }
        }

        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('构建 ConnectorService') {
            steps {
                script {
                    buildImage(
                        "connector-service",
                        "ConnectorService/Dockerfile"
                    )
                }
            }
        }
    }

    post {
        success {
            echo "全部镜像构建完成"
        }

        failure {
            echo "镜像构建失败"
        }
    }
}

def buildImage(serviceName, dockerfilePath) {

    def imageName = "${IMAGE_PREFIX}-${serviceName}:${IMAGE_TAG}"
    def latestName = "${IMAGE_PREFIX}-${serviceName}:latest"

    sh """
        docker build \
          --pull \
          -t ${imageName} \
          -t ${latestName} \
          -f ${dockerfilePath} .
    """

    if (env.REGISTRY?.trim()) {

        sh """
            docker tag ${imageName} ${REGISTRY}/${serviceName}:${IMAGE_TAG}
            docker tag ${latestName} ${REGISTRY}/${serviceName}:latest

            docker push ${REGISTRY}/${serviceName}:${IMAGE_TAG}
            docker push ${REGISTRY}/${serviceName}:latest
        """
    }
}