python自动化持续集成:5.Jenkins集成Spring Boot项目源码打包部署流程
Posted new nm个对象
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python自动化持续集成:5.Jenkins集成Spring Boot项目源码打包部署流程相关的知识,希望对你有一定的参考价值。
一.实战项目介绍
1.项目介绍
JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计,模块增减便捷;界面无刷新,一键换肤;众多账号安全设置,密码策略;文件在线预览;消息推送;多元化第三方登录;在线定时任务配置;支持集群,支持SAAS;支持多数据源;支持读写分离、分库分表;支持微服务应用。
2.环境部署
JeeSite 是一款基于Spring Boot开发框架的项目。它的运行是需要依赖一些特定环境
2.1 部署mysql
# 拉取docker镜像
docker pull mysql
# 实例化并启动mysql容器
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=ouyi1994 -p 3306:3306 mysql
# 进入容器
docker exec -it my_mysql bash
# 验证mysql是否启动
mysql -u root -p
这时外界是无法访问MySQL的,还需要设置MySQL能接受任何方式连接。
# 进入MySQL容器
docker exec -it mysql容器id bash
# 进入MySQL
mysql -u root -p
# 设置MySQL支持其他方式连接
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'
2.2 部署Jdk
参考前面章节
2.3 部署maven
maven主要是用于Java源码编译打包时需要。
Linux下安装maven
(1)下载maven安装包
地址:http://maven.apache.org/download.cgi
(2)解压
sudo tar -zxvf apache-maven-3.6.3-bin.tar.gz
(3)配置环境变量
vi /etc/profile
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
(4)重新加载环境变量
source /etc/profile
(5)验证
mvn -version
(7)修改maven下载镜像源
maven会使用坐标定位的方式,获取到我们代码中的第三方库。并联网下载。可以修改maven下载镜像源,来提供maven的下载速度。
进入maven安装目录下的config目录,修改setting.xml文件
Windows下安装maven
(1)下载安装包并解压
(2)配置环境变量
(3)验证
(4)修改maven的下载镜像源
修改apache-maven-3.6.3\\conf下的settings.xml文件
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/qroups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3.项目准备,调试,运行
我们需要在本地将项目调试运行通过后,再做相关的持续集成操作
3.1数据库准备
(1)新建数据库
create database jeesite
(2)导入初始化数据到数据库
第一步:项目文件中配置数据库相关信息
在jeesite4\\web\\src\\main\\resources\\config\\application.yml文件中,填写数据库相关信息
第二步:执行初始化脚本
jeesite4\\web\\bin目录下执行init-data.sh(Linux)或者init-data.bat(windows)脚本
第三步:查看数据库中是否已有初始数据
3.2 在IDEA中编译项目
(1) 在maven中导入项目root模块下的pom.xml文件
导入这个文件,会自动将整个项目导入到maven中
(2)使用maven编译项目
3.3 在命令行编译项目
注意:maven在命令行也可以编译项目,方式如下:
进入项目的root目录后,执行命令‘mvn clean install’
3.4 在IDEA中运行项目
3.5 在命令行运行项目
进入项目的web目录,执行命令:‘mvn clean spring-boot:run’
二.Tomcat部署持续交付实战
1.实战介绍
2.配置环境
使用tomcat发布spring-boot项目(jeesite),需要以下环境。
- jdk(前面已配置)
- maven(前面已配置)
- mysql(前面已配置)
- tomcat
配置tomcat
1.下载tomcat安装包:http://tomcat.apache.org/download-80.cgi#8.0.50
2.将下载的tomcat传输到**/usr/local**/tomcat目录下解压
tar -zxvf apache-tomcat-8.5.61.tar.gz
# 添加权限,防止权限不够出错
chmod -R 777 apache-tomcat-8.5.64/
3.启动tomact
cd /usr/local/tomcat/apache-tomcat-8.5.61/bin
./staup.sh
4.检测:访问http://42.193.187.134:8080/,如果不能显示猫咪,则需要关闭防火墙
tomcat常用方法介绍
(1)启动,停止脚本
在/usr/local/tomcat/apache-tomcat-8.5.64/bin目录下的startup.sh和shutdown.sh
(2)日志文件
在/usr/local/tomcat/apache-tomcat-8.5.64/logs目录下的catalina.out
(3)配置文件
在/usr/local/tomcat/apache-tomcat-8.5.64/conf目录下的server.xml
(4)发布项目
将项目包拷贝到/usr/local/tomcat/apache-tomcat-8.5.64/webapps/ROOT目录下,用于发布
3.Jenkins集成tomcat持续交付实战
3.1编写pipeline脚本
node('salve-mylinux2') {
stage('同步源码') {
sh"""
## 创建一个目录,用于存放拉取的源码
mkdir jeesite || echo "the dir jeesite is exited"
"""
dir("jeesite"){
git credentialsId:'gitee_ouyi', branch:'master', url:'git@gitee.com:xxx/jeesite4.git' # 项目源码地址
}
}
stage('maven编译打包') {
sh '''
. ~/.bash_profile
cd jeesite
export pwd=`pwd`
## 修改配置文件中,数据库的信息
cd web/src/main/resources/config
sed -i "s/mysql_ip/${mysql_ip}/g" application.yml
sed -i "s/mysql_port/${mysql_port}/g" application.yml
sed -i "s/mysql_user/${mysql_user}/g" application.yml
sed -i "s/mysql_pwd/${mysql_pwd}/g" application.yml
## 编译root模块
cd $pwd/root
mvn clean install -Dmaven.test.skip=true
## 编译web模块
cd $pwd/web
mvn clean package spring-boot:repackage -Dmaven.test.skip=true -U
'''
}
stage('停止 tomcat') {
sh '''
## 停止tomcat的函数, 参数$1带入tomcat的路径$TOMCAT_PATH
killTomcat()
{
pid=`ps -ef|grep $1|grep java|awk '{print $2}'`
echo "tomcat Id list :$pid"
if [ "$pid" = "" ]
then
echo "no tomcat pid alive"
else
kill -9 $pid
fi
}
## 停止Tomcat
killTomcat $tomcat_home
'''
}
stage('清理环境') {
sh '''
## 删除原有war包
rm -f $tomcat_home/webapps/ROOT.war
rm -rf $tomcat_home/webapps/ROOT
'''
}
stage('部署新的war包') {
sh '''
cp jeesite/web/target/web.war $tomcat_home/webapps/
cd $tomcat_home/webapps
mv web.war ROOT.war
'''
}
stage('启动tomcat') {
sh '''
JENKINS_NODE_COOKIE=dontkillme
cd $tomcat_home/bin
sh startup.sh
'''
}
}
3.2在Jenkins中添加环境变量
为了提高灵活性,我们将MySQL等相关配置,添加到Jenkins任务的环境变量中,供pipeline脚本调用。
在节点属性中分别添加以下环境变量:mysql_ip(mysql的ip),mysql_port(mysql的端口),mysql_user(mysql的用户名),mysql_pwd(密码),tomcat_home(tomcat的根路径)环境变量
3.3 运行任务
登录查看是否项目发布成功
三.docker部署持续交付实战
1.任务介绍
2.Jenkins集成docker持续交互实战
实战流程如下:拉取源码》编译war包》使用war包构建新的docker镜像》启动docker镜像
(1)dockerfile编写
我们使用dockerfile文件来生成新的的镜像
# 指定基础镜像
FROM tomcat:latest
# 指定维护者信息
LABEL maintainer="hahaha"
# 设置容器启动时的环境变量
ENV nginx_VERSION=1.17.9
# 设置构建镜像时的环境变量
ARG WORK_PWD=/usr/local/tomcat
# 设置容器用户
USER root
# 在初始的tomcat容器中,webapps是一个空文件夹。而webapp相关文件都在webapps.dist文件夹下。所以我们执行下面的命令,将webapps.dist改名为webapps
RUN rm -rf webapps && mv webapps.dist/ webapps && cd webapps && rm -rf ROOT
# 设置工作目录
WORKDIR $WORK_PWD/webapps
# 复制代码文件war包到webapps目录下,并改名为ROOT.war
COPY ./web.war ./ROOT.war
# 设置容器的默认端口
EXPOSE 8080
# 设置停止容器的策略
STOPSIGNAL SIGRTMAX
(2)编写pipeline文件
pipeline {
# 指定运行任务的节点
agent {
label 'salve-mylinux2'
}
environment {
docker_image_name = 'jeesite4' # 设置docker镜像名称为变量
docker_container_name = 'iJeesite4' # 设置docker容器名称为变量
}
stages{
stage('同步源码') {
steps{
sh """
mkdir jeesite || echo "the dir jeesite is exit"
"""
dir("jeesite"){
git credentialsId:'gitee_ouyi', branch:'master', url:'git@gitee.com:xxx/jeesite4.git' # 项目源码地址
}
}
}
stage('设定配置文件'){
steps{
sh '''
. ~/.bash_profile
cd jeesite/web/src/main/resources/config
sed -i "s/mysql_ip/${mysql_docker_ip}/g" application.yml
sed -i "s/mysql_port/${mysql_port}/g" application.yml
sed -i "s/mysql_user/${mysql_user}/g" application.yml
sed -i "s/mysql_pwd/${mysql_pwd}/g" application.yml
'''
}
}
stage('Maven 编译'){
steps {
sh '''
. ~/.bash_profile
cd jeesite/root
mvn clean install -Dmaven.test.skip=true
cd ../../jeesite/web
mvn clean package spring-boot:repackage -Dmaven.test.skip=true -U
'''
}
}
stage('停止 / 删除 现有Docker Container/Image '){
steps {
script{
try{
sh 'docker stop $docker_container_name'
}catch(exc){
echo 'The container $docker_container_name does not exist'
}
try{
sh 'docker rm $docker_container_name'
}catch(exc){
echo 'The container $docker_container_name does not exist'
}
try{
sh 'docker rmi $docker_image_name'
}catch(exc){
echo 'The docker image $docker_image_name does not exist'
}
}
}
}
stage('生成新的Docker Image'){
steps {
sh '''
cd jeesite/web/bin/docker
rm -f web.war
cp ../../../web/target/web.war .
docker build -t $docker_image_name .
'''
}
}
stage('启动新Docker实例'){
steps {
sh '''
docker run -d --name=$docker_container_name -p 8981:8080 $docker_image_name
'''
}
}
}
}
(3)Jenkins中创建任务
以上是关于python自动化持续集成:5.Jenkins集成Spring Boot项目源码打包部署流程的主要内容,如果未能解决你的问题,请参考以下文章
python自动化持续集成:3.Jenkins集成自动化测试实战
Jenkins持续集成-自动化部署脚本的实现《python》