1. 首先开启devops,这里也同时开启sonar qube代码检测
kubectl edit cm -n kubesphere-system ks-installer

在这里插入图片描述

  1. 创建凭证
    创建git凭证,这里代码是放在gitee上面保存的,输入gitee登录的用户名和密码
    在这里插入图片描述
    创建sonar凭证
    查看sonarqube暴露的端口
kubectl  get svc --all-namespaces

在这里插入图片描述
通过admin/admin登录以后,会让我们enter a name for your token,这里我们输入gulimall
在这里插入图片描述
依次选择java,maven:
在这里插入图片描述

mvn sonar:sonar \
  -Dsonar.host.url=http://10.12.34.53:32411 \
  -Dsonar.login=dea8cd0312f13e132b8843d3fa63e11eebc829ca

创建凭证:
在这里插入图片描述
这里输入刚刚生成的token
在这里插入图片描述
创建kubeconfig凭证,用于访问接入正在运行的kubenernetes
在这里插入图片描述
创建dockerhub远程镜像仓库凭证
在这里插入图片描述
2. 创建项目
在企业空间下创建自己的一个项目
在这里插入图片描述
3. 创建一个devops工程
在这里插入图片描述
4. 在devops工程下面创建流水线
在这里插入图片描述
进入创建的流水线,可以编辑jenkinsfile或者流水线
在这里插入图片描述
这里我已经创建好一个流水线了,主要是代码拉取,sonar检测,推送值dockerhub镜像,再创建服务

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('拉取代码') {
      steps {
        git(credentialsId: 'gitee-id', url: 'https://gitee.com/yuwengoku/security.git', branch: 'master', changelog: true, poll: false)
        container('maven') {
          sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn-settings.xml '
        }

      }
    }
    stage('sonar代码质量分析') {
      steps {
        container('maven') {
          withCredentials([string(credentialsId: "$SONAR_CREDENTIAL_ID", variable: 'SONAR_TOKEN')]) {
            withSonarQubeEnv('sonar') {
              sh "mvn sonar:sonar -gs `pwd`/mvn-settings.xml -Dsonar.branch=$BRANCH_NAME -Dsonar.login=$SONAR_TOKEN"
            }

          }

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

        }

      }
    }
    stage('构建镜像并推送') {
      steps {
        container('maven') {
          sh 'mvn -Dmaven.test.skip=true -gs `pwd`/mvn-settings.xml clean package'
          sh 'cd $PROJECT_NAME && docker build --no-cache -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION .'
          withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION'
          }

        }

      }
    }
    stage('部署到开发环境') {
      steps {
        input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将[$PROJECT_NAME]部署到集群中?")
        kubernetesDeploy(configs: "$PROJECT_NAME/deploy/**", enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
      }
    }
  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE = 'yuwengoku'
    GITEE_ACCOUNT = 'yuwengoku'
    SONAR_CREDENTIAL_ID = 'sonar-qube'
    BRANCH_NAME = 'master'
  }
  parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v0.0Beta', description: '')
    string(name: 'PROJECT_NAME', defaultValue: 'gateway', description: '')
  }
}

  1. 执行流水线部署服务,输入镜像版本和项目名称
    在这里插入图片描述
    项目名称即每个微服务下pom文件的名称
    在这里插入图片描述
    部署好了,可以查看服务
    在这里插入图片描述
  2. 测试
    在这里插入图片描述
  3. 问题总结
    7.1 如果和我一样是部署微服务的话,如果微服务中用common这种共通代码的话,则pom中不能添加一下插件
<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

在这里插入图片描述
而web服务,即需要@SpringBootApplication作为启动类的微服务,则必须在pom中添加此插件,也就是每个web微服务中必须单独添加此插件,不能在总的pom文件中添加此插件

7.2 每个流水线都是一个独立的空间,如果一个流水线只负责拉取代码,另一个流水线用来编译镜像,是不行的,两边不互通
7.3 在插入审核语句时,message中如果要插入参数,则需要前后加空格或者别的标志

input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将[$PROJECT_NAME]部署到集群中?")
或
input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将 $PROJECT_NAME 部署到集群中?")
不能
input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将$PROJECT_NAME部署到集群中?")

7.4 input审核语句改进
在这里插入图片描述
这里可以看到,默认时Proceed来表示同意,我们需要进行修改

input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将[$PROJECT_NAME]部署到集群中?", ok: "部署")

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐