website/content/zh/docs/devops-user-guide/examples/a-maven-project.md
adakisme da11479b8c Changed zh-descriptions on index pages
Signed-off-by: adakisme <serenashe@yunify.com>
2021-04-02 12:07:03 +08:00

7.4 KiB
Raw Blame History

title keywords description linkTitle weight
构建和部署 Maven 工程 Kubernetes, Docker, DevOps, Jenkins, Maven 学习如何使用 KubeSphere 流水线构建并部署 Maven 工程。 构建和部署 Maven 工程 11430

准备工作

Maven 工程的工作流

KubeSphere DevOps 中有针对 Maven 工程的工作流,如下图所示,它使用 Jenkins 流水线来构建和部署 Maven 工程。所有步骤均在流水线中进行定义。

maven-project-jenkins

首先Jenkins Master 创建一个 Pod 来运行流水线。Kubernetes 创建 Pod 作为 Jenkins Master 的 Agent该 Pod 会在流水线完成之后销毁。主要流程包括克隆代码、构建和推送镜像以及部署工作负载。

Jenkins 中的默认配置

Maven 版本

在 Maven 构建器 (Builder) 容器中执行以下命令获取版本信息。

mvn --version

Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
Maven home: /opt/apache-maven-3.5.3
Java version: 1.8.0_232, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.i386/jre
Default locale: en_US, platform encoding: UTF-8

Maven 缓存

Jenkins Agent 通过节点上的 Docker 存储卷 (Volume) 挂载目录。流水线可以缓存一些特殊目录,例如 /root/.m2,这些特殊目录用于 Maven 构建并在 KubeSphere DevOps 中用作 Maven 工具的默认缓存目录,以便依赖项包下载和缓存到节点上。

Jenkins Agent 中的全局 Maven 设置

Maven 设置的默认文件路径是 maven,配置文件路径是 /opt/apache-maven-3.5.3/conf/settings.xml。执行以下命令获取 Maven 的设置内容。

kubectl get cm -n kubesphere-devops-system ks-devops-agent -o yaml

Maven Pod 的网络

具有 maven 标签的 Pod 使用 docker-in-docker 网络来运行流水线,即节点中的 /var/run/docker.sock 被挂载至该 Maven 容器。

Maven 流水线示例

Maven 工程准备工作

创建凭证

凭证 ID 类型 用途
dockerhub-id 帐户凭证 仓库,例如 Docker Hub
demo-kubeconfig kubeconfig 部署工作负载

有关详细信息,请参考凭证管理

查看凭证列表

为工作负载创建一个项目

在本示例中,所有工作负载都部署在 kubesphere-sample-dev 项目中。您必须事先创建 kubesphere-sample-dev 项目。

查看项目

为 Maven 工程创建一个流水线

  1. 在您的 DevOps 工程中,转到流水线页面并点击创建。有关更多信息,请参见使用图形编辑面板创建流水线

  2. 转到该流水线的详情页面,点击编辑 Jenkinsfile

    编辑 Jenkinsfile

  3. 复制粘贴以下内容至弹出窗口。您必须将 DOCKERHUB_NAMESPACE 的值替换为您自己的值,完成操作后进行保存。

    pipeline {
      agent {
        node {
          label 'maven'
        }
      }
    
        parameters {
            string(name:'TAG_NAME',defaultValue: '',description:'')
        }
    
        environment {
            DOCKER_CREDENTIAL_ID = 'dockerhub-id'
            KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
            REGISTRY = 'docker.io'
            // need to replace by yourself dockerhub namespace
            DOCKERHUB_NAMESPACE = 'shaowenchen'
            APP_NAME = 'devops-java-sample'
            BRANCH_NAME = 'dev'
        }
    
        stages {
            stage ('checkout scm') {
                steps {
                    git branch: 'master', url: "https://github.com/kubesphere/devops-java-sample.git"
                }
            }
    
            stage ('unit test') {
                steps {
                    container ('maven') {
                        sh 'mvn clean -o -gs `pwd`/configuration/settings.xml test'
                    }
                }
            }
    
            stage ('build & 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/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER .'
                        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/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
                        }
                    }
                }
            }
    
            stage('deploy to dev') {
              steps {
                kubernetesDeploy(configs: 'deploy/dev-ol/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
              }
            }
        }
    }
    
  4. 保存该 Jenkinsfile您可以看到图形编辑面板上已自动创建阶段和步骤。

    查看 Jenkinsfile

运行和测试

  1. 点击运行并在 TAG_NAME 中输入内容,运行流水线。

    运行 Maven 流水线

  2. 待流水线运行完成,您可以看到下图所示内容。

    查看流水线运行结果

  3. kubesphere-sample-dev 项目中,已创建新的工作负载。

    查看工作负载

  4. 您可以查看服务 (Service) 的访问地址,如下所示。

    查看服务