k8s集群中部署项目之流水线

2023-09-14 19:27:44

微服务项目部署之流水线编写

一、部署微服务项目环境说明

1.1 代码托管到gitee

在这里插入图片描述

在这里插入图片描述

1.2 镜像托管到dockerhub

在这里插入图片描述

用户名:nextgomsb
密码:abc***.com

1.3 流水线工具 KubeSphere

在这里插入图片描述

二、通过KubeSphere部署之拉取代码流水线编写

2.1 准备凭证

在这里插入图片描述

2.2 编辑流水线

在这里插入图片描述

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
      }
    }

  }
}

2.3 测试流水线是否可以拉取项目代码

在这里插入图片描述

三、通过KubeSphere部署之参数化构建及环境变量设定

3.1 参数化构建

在流水线中添加如下内容:

parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
添加后的流水线内容:

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
      }
    }

  }
}

测试是否可行

在这里插入图片描述

验证在流水线中接收情况

在这里插入图片描述

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
        sh '''echo $PROJECT_NAME
echo $PROJECT_VERSION'''
      }
    }

  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
}

在这里插入图片描述

创建构建参数选项

在这里插入图片描述

在这里插入图片描述

3.2 环境变量设定

3.2.1 凭证创建

3.2.1.1 dockerhub-id

在这里插入图片描述

3.2.1.2 kubeconfig

在这里插入图片描述

3.2.1.3 sonar-qube

sonar-qube部署及使用请参考上面的视频。

在这里插入图片描述

sonar管理员令牌:4f1b3ad13420f738926140bcb110758f96aa5eac  新令牌:d19390c45296be3c44ca2cb902ffda01bd0d8d96

在这里插入图片描述

3.2.2 添加环境变量到jenkinsfile

environment {
	DOCKER_CREDENTIAL_ID = 'dockerhub-id'
	GITEE_CREDENTIAL_ID = 'gitee-id'
	KUBECONFIG_CREDENTIAL_ID= 'sangomall-kubeconfig'
	REGISTRY = 'docker.io'
	DOCKERHUB_NAMESPACE = 'nextgomsb'
	GITEE_ACCOUNT = 'nextgomsb'
	SONAR_CREDENTIAL_ID = 'sonar-qube'
}
添加后的内容:
pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
        sh '''echo $PROJECT_NAME
echo $PROJECT_VERSION'''
      }
    }

  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
  environment {
  	DOCKER_CREDENTIAL_ID = 'dockerhub-id'
  	GITEE_CREDENTIAL_ID = 'gitee-id'
  	KUBECONFIG_CREDENTIAL_ID= 'sangomall-kubeconfig'
  	REGISTRY = 'docker.io'
  	DOCKERHUB_NAMESPACE = 'nextgomsb'
  	GITEE_ACCOUNT = 'nextgomsb'
  	SONAR_CREDENTIAL_ID = 'sonar-qube'
}
  
}

四、通过KubeSphere部署之Sonar集成至流水线编写

sonarqube集成可参考前操作步骤实施。

在这里插入图片描述

echo 当前目录 `pwd`

在这里插入图片描述

mvn sonar:sonar -gs `pwd`/mvn_settings.xml -Dsonar.login=$SONAR_TOKEN

在这里插入图片描述

添加sonarqube后流水线内容:
pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
        sh '''echo $PROJECT_NAME
echo $PROJECT_VERSION'''
      }
    }

   
    stage('项目代码分析') {
      agent none
      steps {
        container('maven') {
          withCredentials([string(credentialsId : 'sonar-qube' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'echo 当前目录 `pwd`'
              sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
              sh 'mvn sonar:sonar -gs `pwd`/mvn_settings.xml  -Dsonar.login=$SONAR_TOKEN'
            }

          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }

  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'sangomall-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE = 'nextgomsb'
    GITEE_ACCOUNT = 'nextgomsb'
    SONAR_CREDENTIAL_ID = 'sonar-qube'
    
  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
}

在这里插入图片描述

五、通过KubeSphere部署之单元测试集成至流水线编写

在这里插入图片描述

mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml

在这里插入图片描述

添加单元测试后jenkinsfile内容:
添加sonarqube后流水线内容:
pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
        sh '''echo $PROJECT_NAME
echo $PROJECT_VERSION'''
      }
    }

   

    stage('项目代码分析') {
      agent none
      steps {
        container('maven') {
          withCredentials([string(credentialsId : 'sonar-qube' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'echo 当前目录 `pwd`'
              sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
              sh 'mvn sonar:sonar -gs `pwd`/mvn_settings.xml  -Dsonar.login=$SONAR_TOKEN'
            }

          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }
    
     stage('单元测试') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
        }

      }
    }

  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'sangomall-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE = 'nextgomsb'
    GITEE_ACCOUNT = 'nextgomsb'
    SONAR_CREDENTIAL_ID = 'sonar-qube'
    
  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
}

六、通过KubeSphere部署之构建项目镜像及推送镜像至dockerhub流水线编写

在这里插入图片描述

mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml

在这里插入图片描述

cd $PROJECT_NAME && docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER .

在这里插入图片描述

echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin

在这里插入图片描述

docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER

在这里插入图片描述

添加构建与推送容器镜像后内容如下:

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
        sh '''echo $PROJECT_NAME
echo $PROJECT_VERSION'''
      }
    }

    stage('单元测试') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
        }

      }
    }

    stage('项目代码分析') {
      agent none
      steps {
        container('maven') {
          withCredentials([string(credentialsId : 'sonar-qube' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'echo 当前目录 `pwd`'
              sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
              sh 'mvn sonar:sonar -gs `pwd`/mvn_settings.xml  -Dsonar.login=$SONAR_TOKEN'
            }

          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }

    stage('构建并推送容器镜像') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
          sh 'cd $PROJECT_NAME && docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$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 'echo $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
            sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
          }

        }

      }
    }


  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'sangomall-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE= 'nextgomsb'
    GITEE_ACCOUNT = 'nextgomsb'
    SONAR_CREDENTIAL_ID = 'sonar-qube'
  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
}

在这里插入图片描述

推送最终容器镜像到DockerHub仓库
在这里插入图片描述

docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest

在这里插入图片描述

docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest

在这里插入图片描述

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
        sh '''echo $PROJECT_NAME
echo $PROJECT_VERSION'''
      }
    }

    stage('单元测试') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
        }

      }
    }

    stage('项目代码分析') {
      agent none
      steps {
        container('maven') {
          withCredentials([string(credentialsId : 'sonar-qube' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'echo 当前目录 `pwd`'
              sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
              sh 'mvn sonar:sonar -gs `pwd`/mvn_settings.xml  -Dsonar.login=$SONAR_TOKEN'
            }

          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }

    stage('构建并推送容器镜像') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
          sh 'cd $PROJECT_NAME && docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$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 'echo $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
            sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
            sh 'docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
          }

        }

      }
    }

  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'sangomall-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE = 'nextgomsb'
    GITEE_ACCOUNT = 'nextgomsb'
    SONAR_CREDENTIAL_ID = 'sonar-qube'

  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
}

在这里插入图片描述

七、通过KubeSphere部署之为项目发布准备对应版本的容器镜像

在这里插入图片描述

return params.PROJECT_VERSION =~ /v.*/

在这里插入图片描述
在这里插入图片描述

添加GITEE设置

在这里插入图片描述

git config --global user.email "nextgo@126.com" 

在这里插入图片描述

git config --global user.name "nextgo" 

在这里插入图片描述

git tag -a $PROJECT_VERSION -m "$PROJECT_VERSION" 

在这里插入图片描述

git push http://$GITEE_USERNAME:$GITEE_PASSWORD@gitee.com/$GITEE_ACCOUNT/sangomall.git --tags --ipv4

在这里插入图片描述

添加dockerhub的配置

在这里插入图片描述

docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION 

在这里插入图片描述

docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION

在这里插入图片描述

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('获取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', branch: 'master', changelog: true, poll: false)
        sh '''echo $PROJECT_NAME
echo $PROJECT_VERSION'''
      }
    }

    stage('单元测试') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
        }

      }
    }

    stage('项目代码分析') {
      agent none
      steps {
        container('maven') {
          withCredentials([string(credentialsId : 'sonar-qube' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'echo 当前目录 `pwd`'
              sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
              sh 'mvn sonar:sonar -gs `pwd`/mvn_settings.xml  -Dsonar.login=$SONAR_TOKEN'
            }

          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }

    stage('构建并推送容器镜像') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
          sh 'cd $PROJECT_NAME && docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$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 'echo $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
            sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
            sh 'docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
          }

        }

      }
    }

    stage('准备项目及镜像tag') {
      agent none
      when {
        expression {
          return params.PROJECT_VERSION =~ /v.*/
        }

      }
      steps {
        container('maven') {
          input(message: '''@project-admin  
是否提交带有tag的发布版本及容器镜像?''', submitter: 'project-admin')
          withCredentials([usernamePassword(credentialsId : 'gitee-id' ,passwordVariable : 'GITEE_PASSWORD' ,usernameVariable : 'GITEE_USERNAME' ,)]) {
            sh 'git config --global user.email "nextgo@126.com" '
            sh 'git config --global user.name "nextgo"'
            sh 'git tag -a $PROJECT_VERSION -m "$PROJECT_VERSION" '
            sh 'git push http://$GITEE_USERNAME:$GITEE_PASSWORD@gitee.com/$GITEE_ACCOUNT/sangomall.git --tags --ipv4'
          }

          sh 'docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION '
          sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION'
        }

      }
    }

  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'sangomall-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE = 'nextgomsb'
    GITEE_ACCOUNT = 'nextgomsb'
    SONAR_CREDENTIAL_ID = 'sonar-qube'
  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
}

八、通过KubeSphere部署之项目部署流水线编写

在这里插入图片描述

mkdir ~/.kube
echo "$KUBECONFIG_CONTENT" > ~/.kube/config
envsubst < $PROJECT_NAME/deploy/deploy.yaml | kubectl apply -f -

在这里插入图片描述

九、创建项目jenkins文件

在这里插入图片描述

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
   parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }
  
   environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'sangomall-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE = 'nextgomsb'
    GITEE_ACCOUNT = 'nextgomsb'
    SONAR_CREDENTIAL_ID = 'sonar-qube'
  }
 
  
  stages {
    stage('拉取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', changelog: true, poll: false)
      }
    }

    stage('代码质量检查及分析') {
      agent none
      steps {
        container('maven') {
          withCredentials([string(credentialsId : 'sonar-qube' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'echo 当前目录 `pwd`'
              sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
              sh 'mvn sonar:sonar -gs `pwd`/mvn_settings.xml -Dsonar.login=$SONAR_TOKEN'
            }

          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }

    stage('单元测试') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
        }

      }
    }

    stage('构建项目容器镜像及推送') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
          sh 'cd $PROJECT_NAME && docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$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/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
            sh 'docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
          }

        }

      }
    }

    stage('创建项目代码及容器镜像的发布版') {
      agent none
      when {
        expression {
          return params.PROJECT_VERSION =~ /v.*/
        }

      }
      steps {
        container('maven') {
          input(message: '''@project-admin  
是否允许推送本次项目代码及容器镜像的发布版?''', submitter: 'project-admin')
          withCredentials([usernamePassword(credentialsId : 'gitee-id' ,passwordVariable : 'GITEE_PASSWORD' ,usernameVariable : 'GITEE_USERNAME' ,)]) {
            sh 'git config --global user.email "nextgo@126.com" '
            sh 'git config --global user.name "nextgo" '
            sh 'git tag -a $PROJECT_VERSION -m "$PROJECT_VERSION" '
            sh 'git push http://$GITEE_USERNAME:$GITEE_PASSWORD@gitee.com/$GITEE_ACCOUNT/sangomall.git --tags --ipv4'
          }

          sh 'docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION '
          sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION'
        }

      }
    }

    stage('部署微服务项目到K8S集群') {
      agent none
      steps {
        input(message: '''@project-admin  
是否允许发布微服务项目到K8S集群?''', submitter: 'project-admin')
        container('maven') {
          withCredentials([kubeconfigContent(credentialsId : 'sangomall-kubeconfig' ,variable : 'KUBECONFIG_CONTENT' ,)]) {
            sh '''mkdir ~/.kube
echo "$KUBECONFIG_CONTENT" > ~/.kube/config
envsubst < $PROJECT_NAME/deploy/deploy.yaml | kubectl apply -f -'''
          }

        }

      }
    }

  }
 
}

在这里插入图片描述

十、提交项目中使用所有文件

在这里插入图片描述

更多推荐

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域:1、编程建议和示例代码:无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。2、数据可视化:生成各种类型的数据可视化图表,如折线图、柱状图、散点图、饼图、热力图等。提

Python中两个最常用的单元测试框架unittest和pytest

这篇文章的主要目的是讨论Python中两个最常用的单元测试框架unittest和pytest,它们的优缺点以及在何时选择哪个框架。PythonunittestvsPytest在编写任何软件时,我们必须在开发过程中保持错误检查的过程。这确保了一旦软件达到发布阶段,在使用过程中遇到的错误数量最小。Python也有各种测试框

北京君正应用案例:联想新款Yoga Book 9i亮相 CES

国际消费电子展(CES),被誉为年度消费电子行业“风向标”。在今年CES2023上,联想旗下多款创新产品正式亮相,带来最前沿的趋势与技术体验。特别是新款YogaBook9i的发布,采用了双面13英寸OLED屏的设计,可以一起用作大型平板电脑,也可以与可连接的蓝牙键盘配对,用作双屏笔记本电脑。YogaBook9i能够帮助

Vue2+ElementUI 静态首页案例

源码<template><divclass="app-containerhome"><el-rowtype="flex"justify="space-around"class="row-bg"><el-cardclass="box-cardcardDiv1"><el-col:span="5"><divclass="bo

第一百五十回 自定义组件综合实例:游戏摇杆一

文章目录概念介绍实现方法示例代码我们在上一章回中介绍了自定义组件相关的内容,本章回中将综合使用这些内容自定义游戏摇杆组件.闲话休提,让我们一起TalkFlutter吧。概念介绍我们介绍的游戏摇杆就是一个内层的小圆嵌套一个外层的大圆,大圆的位置不变,小圆只能在大圆所在的范围进行移动,它移动的角度是360度,因此在游戏中使

LeetCode算法心得——连续数组(前缀和+HashMap)

大家好,我是晴天学长,公式的巧妙化简加上hashmap的灵活应用,需要的小伙伴可以关注支持一下哦!后续会继续更新的。1).连续数组给定一个二进制数组nums,找到含有相同数量的0和1的最长连续子数组,并返回该子数组的长度。示例1:输入:nums=[0,1]输出:2说明:[0,1]是具有相同数量0和1的最长连续子数组。示

C语言程序设计(第五版)书上习题及课后习题与答案汇总(只涉及程序编写部分)--持续更新

课后例题推荐B站视频:https://www.bilibili.com/video/BV1ih411y7gN第一章程序设计和C语言书上例题1.求两个整数之和#include<stdio.h>intmain(){inta,b,sum;a=123;b=456;sum=a+b;printf("sumis%d\n",sum);

[python 刷题] 242 Valid Anagram

[python刷题]242ValidAnagram题目:Giventwostringssandt,returntrueiftisananagramofs,andfalseotherwise.AnAnagramisawordorphraseformedbyrearrangingthelettersofadifferent

探索智能应用的基石:多模态大模型赋能文档图像处理

目录0写在前面1文档图像分析新重点2token荒:电子文档助力大模型3大模型赋能智能文档分析4文档图像大模型应用可能性4.1专有大模型4.2多模态模型4.3设计思路总结0写在前面中国智能产业高峰论坛(CIIS@2023)旨在为政企研学各界学者专家提供同台交流的机会,在成果分享、观点碰撞、经验互鉴中,共促智能科技引领行业

appium默认60秒关闭应用的问题

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】问题:appium默认启动一个应用的session过期时间是60秒到时间会自动停了刚启动的应用,工作台打印:info:[debug]Weshutdownbecausenonewcommandscamein的

<C++> 红黑树模拟实现map和set

使用一颗红黑树同时封装map和set。红黑树源码#pragmaonce#include<cassert>#include<iostream>#include<utility>usingnamespacestd;//红黑树结点颜色enumColour{RED,BLACK,};template<classK,classV>

热文推荐