pipeline {
    agent {
        label "dev"
    }

    tools {
        maven 'maven3'
        jdk 'jdk17'
    }

    environment {
        PATH = "/var/jenkins_home/docker-cli/bin:/var/jenkins_home/jdk-17/bin:/var/jenkins_home/kubectl/bin:${env.PATH}"
        BUILD_IMAGE = "${sh(script:'echo -n azizi-dev:other-$(date +%Y%m%dv%H%M%S)', returnStdout: true)}"
        JAR_FILE = ""
        JAR_SIZE = ""
        JAR_TARGET_DIR = "rc-service/rc-service-other/other-start/target"
        JAR_NAME = "rc-service-other-*.jar"
        ALIYUN_REGISTRY = "registry.cn-hangzhou.aliyuncs.com/azizi-dev/other"
        IMAGE_REP_TAG = ""
        DOCKER_FILE = "rc-service/rc-service-other/Dockerfile-dev"
        DOCKER_DIR = "rc-service/rc-service-other"
        K8S_NAMESPACE = "azizi"
        K8S_DEPLOYMENT = "other"
        K8S_APP_LABEL = "other"
    }

    stages {
        stage('Build') {
            steps {
                configFileProvider([configFile(fileId: '0fcb2100-aec1-45ef-b3ea-64f2f911d462', variable: 'MAVEN_SETTINGS')]) {
                    sh 'mvn clean package -pl rc-service/rc-service-other/other-start -am -P dev -Dmaven.test.skip=true -s $MAVEN_SETTINGS'
                    sh 'ls ${JAR_TARGET_DIR}'
                    script {
                        JAR_FILE = "${sh(script:'ls -t ${JAR_TARGET_DIR}/${JAR_NAME} | head -n 1', returnStdout: true).trim()}"
                        JAR_SIZE = "${sh(script:'du -h ${JAR_TARGET_DIR}/${JAR_NAME}', returnStdout: true).trim()}"
                        IMAGE_REP_TAG = "${ALIYUN_REGISTRY}:other-${sh(script:'date +%Y%m%dv%H%M%S', returnStdout: true).trim()}"
                    }
                    echo "---> Jar file: ${JAR_FILE}"
                    echo "---> Jar size: ${JAR_SIZE}"
                    echo "---> Image name: ${BUILD_IMAGE}"
                    echo "---> Image registry tag: ${IMAGE_REP_TAG}"
                }
            }
        }
        stage('Build image') {
            steps {
                withCredentials([usernamePassword(
                    credentialsId: 'aliyun-registry',
                    usernameVariable: 'ALIYUN_USER',
                    passwordVariable: 'ALIYUN_PASS'
                )]) {
                    sh 'echo $ALIYUN_PASS | docker login --username $ALIYUN_USER --password-stdin registry.cn-hangzhou.aliyuncs.com'
                }
                sh "docker build --build-arg SERVICE_VERSION=${BUILD_IMAGE} -f ${DOCKER_FILE} -t ${IMAGE_REP_TAG} ${DOCKER_DIR}"
            }
        }
        stage('Upload image') {
            steps {
                sh "docker push ${IMAGE_REP_TAG}"
                sh "docker tag ${IMAGE_REP_TAG} registry.cn-hangzhou.aliyuncs.com/azizi-dev/other:latest"
                sh "docker push registry.cn-hangzhou.aliyuncs.com/azizi-dev/other:latest"
                sh "docker rmi -f ${IMAGE_REP_TAG} registry.cn-hangzhou.aliyuncs.com/azizi-dev/other:latest"
            }
        }
        stage('Apply') {
            steps {
                sh "pwd && whoami"
                sh "kubectl -n ${K8S_NAMESPACE} set image deployment/${K8S_DEPLOYMENT} ${K8S_APP_LABEL}=${IMAGE_REP_TAG}"
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}
