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 """
        sudo docker build \
          --pull \
          -t ${imageName} \
          -t ${latestName} \
          -f ${dockerfilePath} .
    """

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

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

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

    sh """
        sudo docker rmi ${imageName} || true
        sudo docker rmi ${latestName} || true

        if [ -n "${REGISTRY}" ]; then
            sudo docker rmi ${REGISTRY}/${serviceName}:${IMAGE_TAG} || true
            sudo docker rmi ${REGISTRY}/${serviceName}:latest || true
        fi

        sudo docker builder prune -f || true
    """
}

}