环境搭建
环境搭建
进入Vmare,打开虚拟机
配置一键启动环境

vim ~/.bashrc
#增加如下内容
alias dps='docker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"'
#保存退出
#生效
source ~/.bashrc
访问http://192.168.150.101:10880/

配置本机hosts

192.168.150.101 git.sl-express.com
192.168.150.101 maven.sl-express.com
192.168.150.101 jenkins.sl-express.com
192.168.150.101 auth.sl-express.com
192.168.150.101 rabbitmq.sl-express.com
192.168.150.101 nacos.sl-express.com
192.168.150.101 neo4j.sl-express.com
192.168.150.101 xxl-job.sl-express.com
192.168.150.101 eaglemap.sl-express.com
192.168.150.101 seata.sl-express.com
192.168.150.101 skywalking.sl-express.com
192.168.150.101 api.sl-express.com
192.168.150.101 admin.sl-express.com
打开浏览器测试

| 名称 | 地址 | 用户名/密码 | 端口 |
|---|---|---|---|
| git | http://git.sl-express.com/ | sl/sl123 | 10880 |
| maven | http://maven.sl-express.com/nexus/ | admin/admin123 | 8081 |
| jenkins | http://jenkins.sl-express.com/ | root/123 | 8090 |
| 权限管家 | http://auth.sl-express.com/api/authority/static/index.html | admin/123456 | 8764 |
| RabbitMQ | http://rabbitmq.sl-express.com/ | sl/sl321 | 15672 |
| MySQL | - | root/123 | 3306 |
| nacos | http://nacos.sl-express.com/nacos/ | nacos/nacos | 8848 |
| neo4j | http://neo4j.sl-express.com/browser/ | neo4j/neo4j123 | 7474 |
| xxl-job | http://xxl-job.sl-express.com/xxl-job-admin | admin/123456 | 28080 |
| EagleMap | http://eaglemap.sl-express.com/ | eagle/eagle | 8484 |
| seata | http://seata.sl-express.com/ | seata/seata | 7091 |
| Gateway | http://api.sl-express.com/ | - | 9527 |
| admin | http://admin.sl-express.com/ | - | 80 |
| skywalking | http://skywalking.sl-express.com/ | - | 48080 |
| Redis | - | 123321 | 6379 |
| MongoDB | - | sl/123321 | 27017 |
配置本地MAVEN

<?xml version="1.0" encoding="UTF-8"?>
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库 这里要改成你自己的本地仓库位置 -->
<localRepository>F:\maven\repository</localRepository>
<!-- 配置私服中deploy的账号 -->
<servers>
<server>
<id>sl-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>sl-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
<!-- 使用阿里云maven镜像,排除私服资源库 -->
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>central,jcenter,!sl-releases,!sl-snapshots</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>sl</id>
<!-- 配置项目deploy的地址 -->
<properties>
<altReleaseDeploymentRepository>
sl-releases::default::http://maven.sl-express.com/nexus/content/repositories/releases/
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
sl-snapshots::default::http://maven.sl-express.com/nexus/content/repositories/snapshots/
</altSnapshotDeploymentRepository>
</properties>
<!-- 配置项目下载依赖的私服地址 -->
<repositories>
<repository>
<id>sl-releases</id>
<url>http://maven.sl-express.com/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>sl-snapshots</id>
<url>http://maven.sl-express.com/nexus/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<!-- 激活配置 -->
<activeProfile>sl</activeProfile>
</activeProfiles>
</settings>
配置本地jdk环境

拉取导入项目

更新MAVEN并运行

访问http://127.0.0.1:18099/doc.html#/home

数据测试

创建分支
使用git


创建成功

添加测试案例

测试成功

提交到远程仓库


可以看到代码已经提交
创建分支release-1.0
完善代码

将代码进行提交

创建tag并发布


Jenkins配置
访问Jenkins,通过root/123登录
进入页面创建任务
任务名称一般为项目名称

填写描述

设置构建参数

版本号设置

服务IP设置

端口设置

服务名称设置

Git源码路径、账号、分支设置

SSH连接地址、权限提升以及Maven版本设置

Shell命令执行

#!/bin/bash
# 微服务名称
SERVER_NAME=${serverName}
# 服务版本
SERVER_VERSION=${version}
# 服务端口
SERVER_PORT=${port}
# 源jar名称,mvn打包之后,target目录下的jar包名称
JAR_NAME=$SERVER_NAME-$SERVER_VERSION
# jenkins下的目录
JENKINS_HOME=/var/jenkins_home/workspace/$SERVER_NAME
#进入jenkins目录
cd $JENKINS_HOME
# 修改文件权限
chmod 755 target/$JAR_NAME.jar
#输出docker版本
docker -v
echo "---------停止容器($SERVER_NAME)---------"
docker stop $SERVER_NAME
echo "---------删除容器($SERVER_NAME)---------"
docker rm $SERVER_NAME
echo "---------删除镜像($SERVER_NAME:$SERVER_VERSION)---------"
docker rmi $SERVER_NAME:$SERVER_VERSION
echo "---------构建新镜像($SERVER_NAME:$SERVER_VERSION)---------"
docker build -t $SERVER_NAME:$SERVER_VERSION .
echo "---------运行服务---------"
docker run -d -p $SERVER_PORT:8080 --name $SERVER_NAME -e SERVER_PORT=8080 -e SPRING_CLOUD_NACOS_DISCOVERY_IP=${SPRING_CLOUD_NACOS_DISCOVERY_IP} -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=${port} $SERVER_NAME:$SERVER_VERSION
保存后开始构建

运行完成后测试:http://192.168.150.101:18099/doc.html#/home

可以看到页面成功展示了
自动构建
想要实现代码推送到git中自动开始构建,需要分别到gogs和Jenkins中进行设置
gogs设置
在http://git.sl-express.com/sl/sl-express-gitflow-web页面点击右上角仓库设置
选择管理Web钩子
添加gogs钩子

在Jenkins中也要设置钩子
进入配置
将Password设置为sl123与gogs中一致

在git中点击测试推送
看看能否测试成功


业务实现
验证码功能
登录 git 服务,找到 sl-express-ms-web-manager 工程,拉取代码
验证码的实现方式有很多种,项目中我们通过hutool工具包中的验证码模块来实现
使用自定义验证码来实现

具体实现
先创建分支develop
具体的业务实现是在com.sl.ms.web.manager.service.AuthService中完成

@Override
public void createCaptcha(String key, HttpServletResponse response) throws IOException {
//1. 生成验证码,指定宽、高、字符个数、干扰线数
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(115, 38, 0, 10);
//1.1 自己创建一个随机数范围,验证码为四位随机数
String random = "123456789abcdefghijklmnopqrstuvwsyz";
RandomGenerator randomGenerator = new RandomGenerator(random,4);
lineCaptcha.setGenerator(randomGenerator);
//1.2 获取生成的验证码值
lineCaptcha.createCode();
String Code = lineCaptcha.getCode();
//2. 将验证码的值写入到redis,有效期为1分钟
String redisKey = CAPTCHA_REDIS_KEY + key;
this.stringRedisTemplate.opsForValue().set(redisKey, Code, Duration.ofMinutes(1));
//输出到页面
response.setHeader(HttpHeaders.PRAGMA, "No-cache");
response.setHeader(HttpHeaders.CACHE_CONTROL, "No-cache");
response.setDateHeader(HttpHeaders.EXPIRES, 0L);
lineCaptcha.write(response.getOutputStream());
}
在Controller中调用Service中的方法:

测试
可以看到验证码

部署前端
修改.env.production.stu文件,设置前后端交互接口改为本机地址和端口:

提交到git中,使用Jenkins部署
选择develop分支,开始构建

访问地址进行测试:http://admin.sl-express.com/

可以看到请求为200

登录功能实现
在AuthServiceImpl中完善代码


在Controller中调用:

测试
可以看到测试有数据

权限管家
改造登录接口为权限管家的接口

测试
可以看到测试成功





