Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud持续集成流程说明

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

大致流程说明:

1) 开发人员每天把代码提交到Gitlab代码仓库

2) Jenkins从Gitlab中拉取项目源码,编译并打成jar包,然后构建成Docker镜像,将镜像上传到Harbor私有仓库。

3) Jenkins发送SSH远程命令,让生产部署服务器到Harbor私有仓库拉取镜像到本地,然后创建容器。

4) 最后,用户可以访问到容器

服务列表(红色的软件为需要安装的软件,黑色代表已经安装)

服务器名称

IP地址

安装的软件

代码托管服务器

192.168.10.10

Gitlab

持续集成服务器

192.168.10.20

Jenkins,Maven,Docker18.06.1-ce

Docker仓库服务器

192.168.10.60

Docker18.06.1-ce,Harbor1.9.2

生产部署服务器

192.168.10.70

Docker18.06.1-ce

SpringCloud微服务源码概述

项目架构:前后端分离

后端技术栈:SpringBoot+SpringCloud+SpringDataJpa(Spring全家桶)   

微服务项目结构:

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

  • tensquare_parent: 父 工 程 , 存 放 基 础 配 置
  • tensquare_common:通用工程,存放工具类
  • tensquare_eureka_server:SpringCloud的Eureka注册中心
  • tensquare_zuul:SpringCloud 的 网 关 服 务
  • tensquare_admin_service:基础权限认证中心,负责用户认证(使用JWT认证)
  • tensquare_gathering:一个简单的业务模块,活动微服务相关逻辑

数据库结构:

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

  • tensquare_user:用户认证数据库,存放用户账户数据。对应tensquare_admin_service微服务
  • tensquare_gathering:活动微服务数据库。对应tensquare_gathering微服务

微服务配置分析:

  • tensquare_eureka
  • tensquare_zuul
  • tensquare_admin_service
  • tensquare_gathering

一、本地部署(1)--SpringCloud微服务部署

1、本地运行微服务

(1)逐一启动微服务

微服务项目包解压,目录在idea中打开,idea会自动下载相关组件插件(等待时间较长)

Jenkins+Docker

链接:https://pan.baidu.com/s/1CIsWzLPrbz1yMZE2lA3Q6g
提取码:o5n5

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

(2)项目导入后发现都是红色的(不正常),缺少依赖组件,安装maven,Windows本地配置Maven环境

Maven官网:https://maven.apache.org/download.cgi

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

apache-maven-3.8.4-bin.zip包

链接:https://pan.baidu.com/s/1PjhUt58AWhSuC2Xh_wi_lg
提取码:tiqr

解压后放到指定目录

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

打开解压后的maven文件,添加两个变量

此电脑→属性→高级系统设置→高级→环境变量→系统变量→新建

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

M2_HOME
E:\apache-maven-3.8.4

MAVEN_HOME
E:\apache-maven-3.8.4

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

maven的命令放进系统变量的 PATH 中

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

打开命令提示符cmd,输入mvn -v 查看版本

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

2、修改配置文件组件下的地址设置

(1)在E盘下:新建一个maven组件下载的本地仓库repo

//配置组建仓库地址
<localRepository>E:/repo</localRepository>

//配置下载源:阿里源 <mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public </url> </mirror>

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

(2)设置 idea

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

(3)设置完成会自动更新

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

解决:SpringBoot启动类报错can not resolve method 'run(java.lang.class,String [])'问题

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

pom.xml 里添加构建的依赖

<build>
    <plugins>
        <plugin>
            <!--提供打包(将应用打包成可执行的jar包)-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <!-- 指定maven编译的jdk版本 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <verbose>true</verbose>
                <fork>true</fork>
                <!--jdk地址-->
                <executable>C:/Program Files/Java/jdk1.8.0_152/bin/javac</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

本地数据库导入

1、windows本地安装 mysql5.7

 

链接:https://pan.baidu.com/s/1HR_0GN3BhRZLwAslEHDGHw
提取码:a0eg

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

2、安装完成后,添加环境变量

C:\Program Files\MySQL\MySQL Server 5.7\bin

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

把 tensquare_gathering.sql、tensquare_user.sql 库放到 E盘:

链接:https://pan.baidu.com/s/11dG69iZ4fUOK8nrpPt2RDw
提取码:asme

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

本地打开服务:输入cmd

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

二、启动 enreka 服务

1、修改配置文件application.yml

E盘→IdeaProjects→tensquare_parent→tensquare_eureka_server→src→main→resources→application.yml

# 单机版
server:
  port: 10086

#基本服务器信息
spring:
  application:
    name: eureka-server  #服务ID

#enreka服务器配置
eureka:
  client:
    fetch-registry: false    #单机版关闭enreka相互注册
    register-with-eureka: false
    service-url:
      defaultZone:  http://localhost:${server.port}/eureka #暴露eureka服务访问地址
  server:
    enable-self-preservation: false #关闭自我保护

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

启动 Eureka

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

访问 enreka 地址 http://localhost:10086

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

2、开启网关zuul

application.yml 文件所在路径 E:\IdeaProjects\tensquare_parent\tensquare_zuul\src\main\resources

server:
  port: 10020 # 端口
  
# 基本服务信息
spring:
  application:
    name: tensquare-zuul # 服务ID
    
# Eureka配置
eureka:
  client:
    service-url:  
      defaultZone: http://localhost:10086/eureka    # Eureka访问地址
  instance:
    prefer-ip-address: true
  
# 修改ribbon的超时时间
ribbon:
  ConnectTimeout: 1500 # 连接超时时间,默认500ms
  ReadTimeout: 3000  # 请求超时时间,默认1000ms
  
  
# 修改hystrix的熔断超时时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMillisecond: 2000 # 熔断超时时长,默认1000ms
            

# 网关路由配置
zuul:
  routes:
    admin:
      path: /admin/**
      serviceId: tensquare-admin-service
    gathering:
          path: /gathering/**
          serviceId: tensquare-gathering

 # jwt参数
jwt:
  config:
    key: itcast
    ttl: 1800000

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

刷新页面

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

3、开启权限中心 tensquare_admin_service

修改这几处即可:

    url: jdbc:mysql://localhost:3306/tensquare_user?characterEncoding=UTF8
    username: root
    password: abc123

 url: jdbc:mysql://localhost:3306/tensquare_user?characterEncoding=UTF8

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

出现报错信息:Failed to start connector [Connector[HTTP/1.1-9001]

原因:端口被占用,改为其他端口 如:port:9000

重新运行,则成功。

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

4、开启活动的微服务 tensquare_gathering

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 所有服务全部开启

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

测试

1、安装 postman 工具

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

链接:https://pan.baidu.com/s/166OAGlMHUf5X54VQqQSQsw
提取码:wa65

运行并打开

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

选择 post 方式,输入http://localhost:10020/admin/admin/login

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

令牌:
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMTk0MjgxNTMzMjMwNDE5OTY4Iiwic3ViIjoiYWRtaW4iLCJpYXQiOjE2NDU5OTE5MzcsInJvbGVzIjoiYWRtaW4iLCJleHAiOjE2NDU5OTM3Mzd9.8rqFJ6mJsVna9YpCgYWxEiOGGa0hj5DAnzpTs9cNnrQ

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

使用用户:admin;密码:123456 登录,

登录成功则说明 微服务+前端+数据库连接成功。

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

查看数据库数据

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

刷新网页

前端→微服务→ 数据库 所有的数据提取没有任何问题

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

编辑修改数据,数据库里面的数据也随之更改

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

在 idea 环境中先打 eureka 的 jar 包

(使用:mvn clean package)

需要等待下载

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

直接打包会报错:

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

原因:没有配置jdk目录

<build>
    <plugins>
        <plugin>
            <!--提供打包(将应用打包成可执行的jar包)-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <!-- 指定maven编译的jdk版本 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <verbose>true</verbose>
                <fork>true</fork>
                <!--jdk地址-->
                <executable>C:/Program Files/Java/jdk1.8.0_152/bin/javac</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

打包前把所有服务停止运行,为了测试微服务可以是某一个服务独立运行,停止服务后网页会无法访问

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

1、开始打 jar 包

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

在 target 目录中生成 jar 包

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

查看 jar 里的内容

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

2、本地运行微服务的 jar 包

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

打开cmd运行

注意:在运行前,关闭idea中的eureka服务,不然会出现冲突

java -jar tensquare_eureka_server-1.0-SNAPSHOT.jar

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

3、http://localhost:10086 刷新网页

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

三、本地部署(2)——前端静态

web 网站

前端技术栈:NodeJS+VueJS+ElementUI

1、本地运行(安装VScode)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

VSCodeUserSetup-x64-1.64.2.exe 软件包:

链接:https://pan.baidu.com/s/1gl7VCU0SJOX355f0CkhFtQ
提取码:czi3

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

把 tensquareAdmin.rar 压缩包放到 E盘下,解压

链接:https://pan.baidu.com/s/1X2EvS4LVhnU5b3m0MFbruA
提取码:vqx3

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

打开VScode,把文件夹导进来

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

2、本地安装 nodejs

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

node-v16.14.0-x64.msi

链接:https://pan.baidu.com/s/1FT3zGi09MT2t2Zej1qnE7Q
提取码:vpq5

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

因为要用到 npm 命令,所以要把此路径放进环境变量中

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

用管理员身份运行cmd

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

在此路径下输入cmd

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

输入:npm run dev,出现报错

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

解决方法:

安装 Python2

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

python-2.7.2.amd64.msi

链接:https://pan.baidu.com/s/1j9e121LZN8XfM2kHfFzeJw
提取码:zwu5

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

加入环境变量中

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

在路径E:\tensquareAdmin下输入cmd

npm install -g cnpm --registry=https://registry.npm.taobao.org

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

cnpm uninstall node-sass

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

再执行cnpm install node-sass

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

输入 cnpm run dev ,安装完成后会自动弹出前端网页或手动输入:http://localhost:9528打开前端页面

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

Jenkins+Docker+SpringCloud 微服务持续集成(微服务+前端+数据库+后端)

 

上一篇:1. 持续集成 简单介绍


下一篇:docker-jenkins将打包的镜像推送到镜像仓库