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

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

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

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

            sudo docker rmi ${env.REGISTRY}/${serviceName}:${env.IMAGE_TAG} || true
            sudo docker rmi ${env.REGISTRY}/${serviceName}:latest || true
        """
    }

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

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