pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  
  environment {
    KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
    REGISTRY = 'docker.io'
    NAMESPACE = 'zq975684'
    APP = 'devops-java-sample'
    }
  
  stages {
    stage('checkout scm') {
      steps {
        git(url: 'https://gitee.com/stevenqingcloud/devops-java-sample.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
      }
    }

    stage('unit test') {
      steps {
        container('maven') {
          sh 'mvn clean -o -gs `pwd`/configuration/settings.xml test'
        }

      }
    }

    stage('build and push') {
      steps {
        container('maven') {
          sh 'mvn -o -Dmaven.test.skip=true -gs `pwd`/configuration/settings.xml clean package'
          sh 'docker build -f Dockerfile-online -t $REGISTRY/$NAMESPACE/$APP:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER .'
          withCredentials([usernamePassword(credentialsId : 'dockerhub-id' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push  $REGISTRY/$NAMESPACE/$APP:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
          }

        }

      }
    }

    stage('stage-artifacts') {
      steps {
        archiveArtifacts 'target/*.jar'
      }
    }

    stage('deploy to dev') {
      steps {
       // input(message: '@admin', submitter: 'admin')
        container ('maven') {
                withCredentials([
                    kubeconfigFile(
                    credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
                    variable: 'KUBECONFIG')
                    ]) {
                    sh 'envsubst < deploy/dev-ol/devops-sample.yaml | kubectl apply -f -'
                    sh 'envsubst < deploy/dev-ol/devops-sample-svc.yaml | kubectl apply -f -'
                }
            }
      }
    }

  }
}