Jenkins 微服务持续集成十(Spring Cloud 微服务一)

13 篇文章 0 订阅
3 篇文章 0 订阅


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

在这里插入图片描述
大致流程说明:

  • 开发人员每天把代码提交到 Gitlab 代码仓库。
  • Jenkins 从 Gitlab 中拉取项目源码,编译并打成 jar 包,然后构建成 Docker 镜像,将镜像上传到 Harbor 私有仓库。
  • Jenkins 发送 SSH 远程命令,让生产部署服务器到 Harbor 私有仓库拉取镜像到本地,然后创建容器。
  • 最后,用户可以访问到容器。

二、服务器列表

服务器名称IP 地址安装的软件
代码托管服务器192.168.10.20Gitlab
持续集成服务器192.168.10.30Jenkins,Maven,Git,JDK,Sonarqube,Docker20.10.12-ce
Docker 仓库服务器192.168.10.40JDK,Tomcat,Docker20.10.12-ceHarbor1.9.2
生产部署服务器192.168.10.50Docker20.10.12-ce

黄色为需要安装的软件

三、SpringCloud 微服务源码概述

  • 项目架构:前后端分离
  • 后端技术栈:SpringBoot + SpringCloud + SpringDataJpa(Spring 全家桶)
  • 微服务项目结构:

在这里插入图片描述

tensquare_parent:父工程,存放基础配置           
tensquare_common:通用工程,存放工具类
tensquare_eureka_server:SpringCloud 的 Eureka 注册中心
tensquare_zuul:SpringCloud 的网关服务           
tensquare_admin_service:基础权限认证中心,负责用户认证(使用 JWT 认证) 
tensquare_gathering:一个简单的业务模块,活动微服务相关逻辑
  • 数据库结构:
    在这里插入图片描述
tensquare_user:用户认证数据库,存放用户账户数据。对应 tensquare_admin_service 微服务。
tensquare_gathering:活动微服务数据库。对应 tensquare_gathering 微服务。
  • 微服务配置分析:
tensquare_eureka
tensquare_zuul
tensquare_admin_service
tensquare_gathering

四、SpringCloud 微服务部署(后端)

4.1 微服务项目导入 IDEA

本地运行微服务,使用 IDEA 打开项目。

(1) 自动下载相关依赖组件

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
时间很长,耐心等待。

在这里插入图片描述
安装完成。
在这里插入图片描述
在这里插入图片描述
依赖组件真正下载完成不应该有任何红色波浪线。因为引导模板文件和相应服务器在美国,可能下载失败,下载失败点击循环重新下载组件。有 VPN 推荐使用日本节点下载。

(2) 检查 JDK 版本

解决 SpringBoot 启动类报错 can not resolve method 'run(java.lang.class,String [])' 问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Project 和所有模块都要换成自己的 JDK。
在这里插入图片描述
更换 JDK 版本后红色波浪线应该消失。

4.2 本地数据库导入

(1) Windows 安装 MySQL5.7.17

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

(2) 添加 mysql 环境变量

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

命令行登录
在这里插入图片描述

(3) 创建库并导入表

  • tensquare_user.sql
/*
SQLyog 企业版 - MySQL GUI v8.14 
MySQL - 5.7.4-m14 : Database - tensquare_user
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`tensquare_user` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `tensquare_user`;

/*Table structure for table `tb_admin` */

DROP TABLE IF EXISTS `tb_admin`;

CREATE TABLE `tb_admin` (
  `id` varchar(20) NOT NULL COMMENT 'ID',
  `loginname` varchar(100) DEFAULT NULL COMMENT '登陆名称',
  `password` varchar(100) DEFAULT NULL COMMENT '密码',
  `state` varchar(1) DEFAULT NULL COMMENT '状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理员';

/*Data for the table `tb_admin` */

insert  into `tb_admin`(`id`,`loginname`,`password`,`state`) values ('1194281533230419968','admin','$2a$10$PhnLmwA7QarH8M/Wc52Mfekoyqw74Vp619M2p2dnxq0Ltz6xXTWJu','1');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
  • tensquare_gathering.sql
/*
SQLyog 企业版 - MySQL GUI v8.14 
MySQL - 5.7.4-m14 : Database - tensquare_gathering
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`tensquare_gathering` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `tensquare_gathering`;

/*Table structure for table `tb_city` */

DROP TABLE IF EXISTS `tb_city`;

CREATE TABLE `tb_city` (
  `id` varchar(20) NOT NULL COMMENT 'ID',
  `name` varchar(20) DEFAULT NULL COMMENT '城市名称',
  `ishot` varchar(1) DEFAULT NULL COMMENT '是否热门',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='城市';

/*Data for the table `tb_city` */

insert  into `tb_city`(`id`,`name`,`ishot`) values ('1','北京','1'),('2','上海','1'),('3','广州','1'),('4','深圳','1'),('5','天津','0'),('6','重庆','0'),('7','西安','0');

/*Table structure for table `tb_gathering` */

DROP TABLE IF EXISTS `tb_gathering`;

CREATE TABLE `tb_gathering` (
  `id` varchar(20) NOT NULL COMMENT '编号',
  `name` varchar(100) DEFAULT NULL COMMENT '活动名称',
  `summary` text COMMENT '大会简介',
  `detail` text COMMENT '详细说明',
  `sponsor` varchar(100) DEFAULT NULL COMMENT '主办方',
  `image` varchar(100) DEFAULT NULL COMMENT '活动图片',
  `starttime` date DEFAULT NULL COMMENT '开始时间',
  `endtime` date DEFAULT NULL COMMENT '截止时间',
  `address` varchar(100) DEFAULT NULL COMMENT '举办地点',
  `enrolltime` datetime DEFAULT NULL COMMENT '报名截止',
  `state` varchar(1) DEFAULT NULL COMMENT '是否可见',
  `city` varchar(20) DEFAULT NULL COMMENT '城市',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='活动';

/*Data for the table `tb_gathering` */

insert  into `tb_gathering`(`id`,`name`,`summary`,`detail`,`sponsor`,`image`,`starttime`,`endtime`,`address`,`enrolltime`,`state`,`city`) values ('1','测试活动6666','喝茶看电影,不亦乐乎','喝茶看电影,不亦乐乎','程序员',NULL,'2019-11-01','2019-11-01','广州市程序员',NULL,'1','6'),('94377594140','aaaa',NULL,NULL,NULL,NULL,'2019-11-01','2019-11-01',NULL,NULL,'1','1'),('943776146707845','aaaa',NULL,NULL,'ssss',NULL,'2019-11-01','2019-11-01','cccc',NULL,'1','1'),('943776663576121344','aaaa',NULL,NULL,NULL,NULL,'2019-11-01','2019-11-01',NULL,NULL,'1','2'),('943783521749700608','2342423',NULL,NULL,'23454534',NULL,'2019-11-01','2019-11-01','545435435',NULL,'1','2'),('944085821768732672','JAVAEE茶话会',NULL,NULL,'kgc',NULL,'2019-11-01','2019-11-01','金燕龙',NULL,'1','2'),('944086086991351808','是',NULL,NULL,'11',NULL,'2019-11-01','2019-11-01','11',NULL,'1','3'),('944090372710207488','大讨论',NULL,NULL,'小马',NULL,'2019-11-01','2019-11-01','消息',NULL,'1','3'),('944105652622594048','测试测试',NULL,NULL,'测试者',NULL,'2019-11-01','2019-11-01','测试地址',NULL,'1','4'),('945227340642914304','111',NULL,NULL,'222',NULL,'2019-11-01','2019-11-01','333',NULL,'1','5'),('945227678527655936','111',NULL,NULL,'222',NULL,'2019-11-01','2019-11-01','333',NULL,'1','5'),('945235087564345344','啊啊',NULL,NULL,'1',NULL,'2019-11-01','2019-11-01','1',NULL,'1','1'),('945235534329024512','1',NULL,NULL,'1',NULL,'2019-11-01','2019-11-01','1',NULL,'1','2'),('945235859786043392','1',NULL,NULL,'1',NULL,'2019-11-01','2019-11-01','1',NULL,'1','3');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

创建库

mysql> create database tensquare_user;
Query OK, 1 row affected (0.00 sec)

mysql> create database tensquare_gathering;
Query OK, 1 row affected (0.00 sec)

导入表

mysql> use tensquare_user;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> source C:/Users/15205/Desktop/devops 软件包/mysql-5.7.17-windows/tensquare_user.sql;
......

mysql> show tables;
+--------------------------+
| Tables_in_tensquare_user |
+--------------------------+
| tb_admin                 |
+--------------------------+
1 row in set (0.00 sec)
mysql> use tensquare_gathering;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> source C:/Users/15205/Desktop/devops 软件包/mysql-5.7.17-windows/tensquare_gathering.sql;
......

mysql> show tables;
+-------------------------------+
| Tables_in_tensquare_gathering |
+-------------------------------+
| tb_city                       |
| tb_gathering                  |
+-------------------------------+
2 rows in set (0.00 sec)

4.3 启动微服务组件

我们以单机版本启动微服务,修改各个组件的配置文件。

(1) 启动 eureka 服务

  Eureka Server 提供服务注册服务,各个节点启动后,会在 Eureka Server 中进行注册,这样 EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
https://baike.baidu.com/item/Eureka/22402835?fr=aladdin
修改配置文件 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 #关闭自我保护

启动 eureka 服务
在这里插入图片描述

访问 eureka 服务
http://localhost:10086
在这里插入图片描述

(2) 启动 zuul 服务

zuul 是微服务的网关。
https://www.jianshu.com/p/24a3b67bbab9
https://blog.csdn.net/sinat_32366329/article/details/92023666

修改 application.yml
在这里插入图片描述

启动 zuul
在这里插入图片描述

查看 zuul 是否在 eureka 上注册成功
在这里插入图片描述

(3) 启动权限中心

修改配置文件
在这里插入图片描述

启动权限中心
在这里插入图片描述

查看是否注册到 eureka
在这里插入图片描述

(4) 启动业务模块

修改配置文件
在这里插入图片描述

启动业务模块
在这里插入图片描述

查看是否注册
在这里插入图片描述

4.4 Postman 工具安装与使用

在这里插入图片描述
Postman 工具模拟了一个前端,提交请求给后端,后端返回结果,测试后端服务是否正常。

在这里插入图片描述
不用创建账号,跳过。

  • 使用 post 请求。post 请求和 get 请求的区别在于 post 是加密的,端口为 443,get 是不加密的,端口为 80。
  • 请求的 url 地址:http://localhost:10020/admin/admin/login

在这里插入图片描述

在这里插入图片描述
在数据库中 123456 是加密字符串表示。
send 发送请求查看结果

在这里插入图片描述
微服务连接后端数据库是成功的。我们可以通过获取的令牌得到更多的信息。这些信息也是来自于数据库。

复制 token

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMTk0MjgxNTMzMjMwNDE5OTY4Iiwic3ViIjoiYWRtaW4iLCJpYXQiOjE2NDU0MjE1ODQsInJvbGVzIjoiYWRtaW4iLCJleHAiOjE2NDU0MjMzODR9.zy9y8q2aXAiZTeBHVBpcFQDLNkQEPi-mM4QoL9vfq4U
  • 获取数据库信息,使用 get 请求
  • 请求 url:http://localhost:10020/gathering/gathering

在这里插入图片描述

返回的结果
在这里插入图片描述

4.5 Windows 本地配置 maven 环境

Maven官网https://maven.apache.org/download.cgi
在这里插入图片描述
在这里插入图片描述
解压到你选择的目录。
在这里插入图片描述

添加两个环境变量

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

添加命令路径

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

验证
在这里插入图片描述

显示 CMD 不存在在系统变量里添加 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
https://blog.csdn.net/m0_37852904/article/details/79441827

4.6 spring 相关依赖下载失败解决方法

由于服务器和模板文件在美国,国内下载很可能失败,下面将下载地址换成国内地址。

修改配置文件组建下载地址设置
D:\工具\apache-maven-3.8.4\conf\settings.xml ,根据自己文件位置修改。

//配置组建仓库地址,仓库为自建的
<localRepository>E:/repo</localRepository>
//配置下载源
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

在这里插入图片描述

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

自动更新
在这里插入图片描述

五、前端环境配置

5.1 安装前端软件 Vscode

在这里插入图片描述

  • 安装过程默认就行了。
  • 启动后会提示是否装中文包,选择安装。
  • 实验前端使用的架构:NodeJS + VueJS + ElementUI

5.2 安装 nodejs

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

添加环境变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 安装 python2

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

添加环境变量

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

5.4 Vscode 导入前端项目并配置访问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Vscode 终端中运行npm run dev 会报错
在这里插入图片描述
npm 包管理器的服务器在美国,而且是单线程,速度太慢,我们换成国内的 cnpm

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

在这里插入图片描述

cnpm uninstall node-sass

在这里插入图片描述

cnpm install node-sass

在这里插入图片描述

执行 cnpm run dev

cnpm run dev

在这里插入图片描述

在这里插入图片描述

访问前端页面
在这里插入图片描述
账号密码:admin/admin

在这里插入图片描述

在这里插入图片描述

可以看到前端能拿到后端数据库中的数据,单机微服务部署完成。

六、后端模块如何打 jar 包

6.1 先在 IDEA 里面关掉所有的服务

在这里插入图片描述

四个都要关掉
在这里插入图片描述

此时 eureka 已经无法访问。

6.2 在 pom.xml 文件中配置 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>

在这里插入图片描述

注意 maven 版本是否识别,换成识别的版本
等待下载依赖组件。

6.3 对 eureka 进行打包并运行

在这里插入图片描述
执行 mvn clean package 进行打包

如果显示 mvn 不存在重启一下 IDEA,也可以打开 CMD 到指定目录打包
在这里插入图片描述
在这里插入图片描述

查看 jar 包,target 目录下

在这里插入图片描述

运行看是否能访问 eureka 服务

在这里插入图片描述

访问:http://localhost:10086/
在这里插入图片描述

其他模块操作类似,这里不在赘述。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值