目录
- 持续交付系列课程总览
- 实战项目简介
- 环境准备
- 项目配置、调试、运行
一、持续交付系列课程总览
- 已学习的Jenkins功能
- 基础功能
- 自动化测试持续集成
- App源码打包、发布、自动测试全流程
- 持续交付系列课程目标:应用自动化部署
- 测试工程师的常见需求
- 自动化部署技术最好自己掌握,即便研发、运维已经会了
- 语言多、架构多、部署打包工具都不一样,我们怎么应对
- 持续交付系列学习过程
- 应用部署的过程
- 运行环境的搭建
- 代码细节可以循序渐进的学
- 持续交付系列实战安排
- 基础内容学习,部署环境准备,运行演练
- Spring boot架构项目Server容器中运行持续交付演练
- Spring boot架构项目Docker运行持续交付演练
二、实战项目简介
- 实战项目 - JeeSite
- 基于Spring Boot 2.0
- 数据存储mysql
- 技术选型:主流
- 语言:Java
- 规模适中,不大不小
- 适合初学者的教学项目
-
实战项目- JeeSite
- 源码位置:https://github.com/princeqjzh/JeeSite4
- 原始工程的位置:https://gitee.com/thinkgem/jeesite4
- 社区版项目,我们拿来学习
-
Demo
- 源码库演示
- 运行应用演示
-
实战项目小结
- 多模块组合项目
- 基础公共引擎模块:common
- 核心系统模块:core
- 模块示例模板:template
- 模块父节点:parent
- 入口模块:root
- web模块:web
- Deploy:部署代码
聊聊Spring Boot
- 目的
- 不是为了学习开发Spring Boot,先了解一下SpringBoot的样子,增强一些亲密感
- 感性认识,为学习Spring Boot项目持续交付做准备
- 框架
- 从写程序到做软件的必经之路
- Copy->建筑工程学的理论,Paste->软件工程学
- Spring框架
- J2EE轻量级开源框架
- EJB开发太麻烦,代码量很重;Spring简化了企业应用的开发难度,少写代码专注业务
- Spring容器管理对象生命周期,简化应用开发难度
- Spring Boot框架
- 比一般Spring还要方便的快速框架
- 方便集成大量第三方库,降低集成难度
- 学习方法建议:别从“0”开始学,可以基于一个现有的项目,然后做扩展
- 找一个适合学习的项目很重要
三、环境准备
- 准备了环境,才能运行程序
- 初学者常见的痛点
- 环境配置关键点:配置过程,验证方法,错误日志
- SpringBoot项日运行配置mysql+java+maven
MySQL的部署
- 首推Docker部署,实在太方便了无法拒绝
- 下载docker镜像:
docker pull mysql
- 启动mysql docker container实例
docker run -d --name <your container name> -e MYSQL_ROOT_PASSWORD=<your root password> -p 3306:3306 mysql:<tag>
- MySQL客户端工具
- MySQL Workbench
- 新建Server Connection,输入Host、Port、Username、Password
-
尝试连接,能成功就说明输入的参数无误
image.png
- 创建jeesite 数据库:
create database jeesite
image.png
Java开发环境安装方法
- 安装包下载路径:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
- 命令安装
- CentOS:
yum install java-1.8.0-openjdk* -y
- Ubuntu:
apt-get install oracle-java8-installer
- Mac:
brew cask install java
- CentOS:
- 解压安装
- 将JDK运行程序直接解压缩到本地路径,然后配置环境变量
JAVA_HOME=<jdk root path>
export PATH=$PATH:$JAVA_HOME/bin
- Java环境安装正确的验证:
java -version
image.png
Maven环境安装方法-Demo
-
下载文件:zip 或者tar格式压缩包,带bin字样的表明是可以直接运行的二进制文件
image.png -
Maven环境安装方法
- 将安装包解压到本地路径,然后配置环境变量
export M2_HOME=<maven root path>
export PATH=$PATH:$M2_HOME/bin
-
验证Maven安装成功的方法:
mvn -version
image.png 加速依赖包下载方法,在
settings.xml
中添加阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
四、配置 调试 运行
数据库准备
- 创建jeesite数据库
- SQL语句:
create database jeesite
- 检查数据创建结果
初始化数据导入
-
打开
jeesite4/web/src/main/resources/config/application.yml
,填写数据库配置(IP 端口、用户名、密码)
image.png 进入项目路径
jeesite4/web/bin
-
运行数据初始化脚本程序
init-data.sh
( windows batch command:init-data.bat
)
image.png
IDE里配置项目
- 添加 jeesite4/root/pom.xml Maven根节点到IDE的maven view中
- 其余依赖module会根据配置一起导入
-
添加 jeesite4/root/pom.xml Maven根节点到IDE的maven view中
image.png
IDE里Maven编译、打包项目
-
在Maven View中选中JeeSite Root 下Lifecycle中的Clean + Install,然后单击运行按钮
image.png
image.png
IDE里直接运行项目
-
在Run/DebugConfigurations中添加SpringBoot
image.png -
配置Main class:
com.jeesite.modules.Application
image.png
image.png -
运行Demo ~~~~
image.png -
访问8980端口
image.png
命令行里编译、打包项目
- 进入项目的root模块所在的目录,然后运行
mvn clean install
命令执行项目编译
命令行里运行项目
-
进入jeesite4/web目录下,运行:
mvn clean spring-boot:run -Dmaven.test.skip=true
image.png
image.png -
访问8980端口
image.png
编写部署脚本
- 将部署动作“翻译”成shell脚本,然后部署到Jenkins中进行持续交付部署
- Demo:代码讲解
deploy/start_spring-boot.sh
#!/usr/bin/env bash
## 检查系统类型
export os_type=`uname`
## 停止spring-boot函数
killSpringBoot()
{
pid=`ps -ef|grep spring-boot|grep java|awk '{print $2}'`
echo "spring-boot list :$pid"
if [ "$pid" = "" ]
then
echo "no spring-boot pid alive"
else
kill -9 $pid
fi
}
## Kill 当前正在运行的spring-boot
killSpringBoot
## Maven 编译
cd ${WORKSPACE}/root
mvn clean install
## Maven 运行
cd ${WORKSPACE}/web
nohub mvn clean spring-boot:run -Dmaven.test.skip=true &
Jenkins部署
- 创建Jenkins任务,设定部署任务
- Demo Jenkins任务执行
-
创建任务
image.png -
添加项目地址
image.png 添加运行代码:
-
. ~/.bash_profile
:获取环境变量 -
sh deploy/start_spring-boot.sh
image.png
-
构建任务
image.png
image.png -
构建完成后发现spring-boot并没有运行起来
image.png
原因是:Jenkins运行时有子进程和父进程的关系,Jenkins运行完spring-boot中的代码后会将子进程给kill掉,所以当Jenkins中的job构建完成后spring-boot中的项目也会结束运行。解决方法是在运行代码中添加:
BUILD_ID=DONTKILLME
image.png
-
再次查看进程并进入8980端口
image.png
image.png