#!/usr/bin/env groovy
def git_auth = "77066368-e8a8-4edb-afaf-53aaf90c31a9"
def harbor_auth = "9c10572f-c324-422f-b0c0-1b80d2ddb857"
def kubectl_auth = "c26898c2-92c3-4c19-8490-9cf8ff7918ef"
pipeline {
    agent {
        kubernetes {
            yaml '''
apiVersion: v1
kind: Pod
metadata:
  name: jenkins-slave
  namespace: jenkins
spec:
  tolerations:
  - key: "no-pod"
    operator: "Exists"
    effect: "NoSchedule"
  nodeSelector:
    jenkins: jenkins
  containers:
  - name: docker
    #image: docker:24.0.6
    image: ccr.ccs.tencentyun.com/huanghuanhui/docker:24.0.6
    imagePullPolicy: IfNotPresent
    readinessProbe:
      exec:
        command: [sh, -c, "ls -S /var/run/docker.sock"]
    command:
    - sleep
    args:
    - 99d
    volumeMounts:
    - name: docker-socket
      mountPath: /var/run
  - name: docker-daemon
    #image: docker:24.0.6-dind
    image: ccr.ccs.tencentyun.com/huanghuanhui/docker:24.0.6-dind
    imagePullPolicy: IfNotPresent
    securityContext:
      privileged: true
    volumeMounts:
    - name: docker-socket
      mountPath: /var/run
  - name: maven
    #image: maven:3.8.1-jdk-8
    image: ccr.ccs.tencentyun.com/huanghuanhui/maven:3.8.1-jdk-8
    imagePullPolicy: IfNotPresent
    command:
    - sleep
    args:
    - 99d
    volumeMounts:
    - name: maven-cache
      mountPath: /root/.m2/repository
  - name: kubectl
    #image: kostiscodefresh/kubectl-argo-rollouts:v1.6.0
    image: harbor.glroad.com:8800/kubectl/kubectl:v1
    imagePullPolicy: IfNotPresent
    command:
    - sleep
    args:
    - 99d
  volumes:
  - name: docker-socket
    emptyDir: {}
  - name: maven-cache
    persistentVolumeClaim:
      claimName: jenkins-prod-slave-maven-cache
  - name: node-cache
    persistentVolumeClaim:
      claimName: jenkins-prod-slave-node-cache
'''
        }
    }
environment {
AppName = "${AppName}"
GitRepo = "${GitRepo}"
GitBranch = "${GitBranch}"
HarborUrl = "${HarborUrl}"
Image = "${Image}"
JAVA_OPTS = "${JAVA_OPTS}"
}
    stages {
        stage('拉取代码') {
            steps {
            git branch: "${GitBranch}", credentialsId: "${git_auth}", url: "${GitRepo}"
            }
        }
        stage('代码编译') {
            steps {
              container('maven') {
                sh """
                  mvn -U clean install -Dmaven.test.skip=true
                """
                }
            }
        }
        stage('打包镜像') {
            steps {
              script {env.GIT_COMMIT_MSG = sh (script: 'git rev-parse --short HEAD', returnStdout: true).trim()}
              container('docker') {
                   sh """
                       cd ruoyi-admin
                        echo 10.33.22.31 harbor.glroad.com >> /etc/hosts  && ping -c 4   harbor.glroad.com 
                        docker login  harbor.glroad.com:8800   -uadmin  -pGlroad2022
                        echo 888888888888888
                    docker build -t harbor.glroad.com:8800/test/${AppName}:${GitBranch}-${GIT_COMMIT_MSG}-${BUILD_ID} .
                 """
                }
            }
        }
        stage('推送镜像') {
            steps {
              container('docker') {
                withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                sh """
                docker pull  harbor.glroad.com:8800/test/java:8
                docker push harbor.glroad.com:8800/test/${AppName}:${GitBranch}-${GIT_COMMIT_MSG}-${BUILD_ID}
                """
                   }
                }
            }
        }
        stage('kubectl-滚动更新发布') {
            steps {
              container('kubectl') {
              configFileProvider([configFile(fileId: "${kubectl_auth}", variable: 'kubeconfig')]) {
                sh """
                echo  999999999999999
                mkdir -p ~/.kube && cp ${kubeconfig} ~/.kube/config
                /app/kubectl-argo-rollouts-linux-amd64 set image ${AppName} "*=${HarborUrl}/ruoyi-cloud/${AppName}:${GitBranch}-${GIT_COMMIT_MSG}-${BUILD_ID}" -n ruoyi
                """
                   }
                }
            }
        }
    }
   
}