热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python自动化(六)持续集成:5.Jenkins集成SpringBoot项目源码打包、部署流程

一.实战项目介绍1.项目介绍JeeSite快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,基于经典技术组合&#x

一.实战项目介绍


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/profileexport 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>alimavenid><name>aliyun mavenname><url>http://maven.aliyun.com/nexus/content/qroups/public/url><mirrorOf>centralmirrorOf>
mirror>

3.项目准备&#xff0c;调试&#xff0c;运行

我们需要在本地将项目调试运行通过后&#xff0c;再做相关的持续集成操作


3.1数据库准备

&#xff08;1&#xff09;新建数据库

create database jeesite

&#xff08;2&#xff09;导入初始化数据到数据库

第一步&#xff1a;项目文件中配置数据库相关信息

在jeesite4\web\src\main\resources\config\application.yml文件中&#xff0c;填写数据库相关信息

在这里插入图片描述

第二步&#xff1a;执行初始化脚本

jeesite4\web\bin目录下执行init-data.sh&#xff08;Linux&#xff09;或者init-data.bat&#xff08;windows&#xff09;脚本

在这里插入图片描述

第三步&#xff1a;查看数据库中是否已有初始数据

在这里插入图片描述


3.2 在IDEA中编译项目

(1) 在maven中导入项目root模块下的pom.xml文件

导入这个文件&#xff0c;会自动将整个项目导入到maven中

在这里插入图片描述

在这里插入图片描述

&#xff08;2&#xff09;使用maven编译项目

在这里插入图片描述


3.3 在命令行编译项目

注意&#xff1a;maven在命令行也可以编译项目&#xff0c;方式如下&#xff1a;

进入项目的root目录后&#xff0c;执行命令‘mvn clean install’


3.4 在IDEA中运行项目

在这里插入图片描述

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


3.5 在命令行运行项目

进入项目的web目录&#xff0c;执行命令&#xff1a;‘mvn clean spring-boot:run’


二.Tomcat部署持续交付实战


1.实战介绍

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


2.配置环境

使用tomcat发布spring-boot项目&#xff08;jeesite&#xff09;&#xff0c;需要以下环境。


  • jdk&#xff08;前面已配置&#xff09;
  • maven&#xff08;前面已配置&#xff09;
  • mysql&#xff08;前面已配置&#xff09;
  • tomcat

配置tomcat

1.下载tomcat安装包&#xff1a;http://tomcat.apache.org/download-80.cgi#8.0.50
在这里插入图片描述

2.将下载的tomcat传输到**/usr/local**/tomcat目录下解压

tar -zxvf apache-tomcat-8.5.61.tar.gz
# 添加权限&#xff0c;防止权限不够出错
chmod -R 777 apache-tomcat-8.5.64/

3.启动tomact

cd /usr/local/tomcat/apache-tomcat-8.5.61/bin
./staup.sh

4.检测&#xff1a;访问http://42.193.187.134:8080/&#xff0c;如果不能显示猫咪&#xff0c;则需要关闭防火墙


tomcat常用方法介绍

&#xff08;1&#xff09;启动&#xff0c;停止脚本

在/usr/local/tomcat/apache-tomcat-8.5.64/bin目录下的startup.sh和shutdown.sh

&#xff08;2&#xff09;日志文件

在/usr/local/tomcat/apache-tomcat-8.5.64/logs目录下的catalina.out

&#xff08;3&#xff09;配置文件

在/usr/local/tomcat/apache-tomcat-8.5.64/conf目录下的server.xml

在这里插入图片描述

&#xff08;4&#xff09;发布项目

将项目包拷贝到/usr/local/tomcat/apache-tomcat-8.5.64/webapps/ROOT目录下&#xff0c;用于发布


3.Jenkins集成tomcat持续交付实战

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


3.1编写pipeline脚本

node(&#39;salve-mylinux2&#39;) {stage(&#39;同步源码&#39;) {sh"""## 创建一个目录&#xff0c;用于存放拉取的源码mkdir jeesite || echo "the dir jeesite is exited""""dir("jeesite"){git credentialsId:&#39;gitee_ouyi&#39;, branch:&#39;master&#39;, url:&#39;git&#64;gitee.com:xxx/jeesite4.git&#39; # 项目源码地址}}stage(&#39;maven编译打包&#39;) {sh &#39;&#39;&#39;. ~/.bash_profilecd jeesiteexport pwd&#61;&#96;pwd&#96;## 修改配置文件中&#xff0c;数据库的信息 cd web/src/main/resources/configsed -i "s/mysql_ip/${mysql_ip}/g" application.ymlsed -i "s/mysql_port/${mysql_port}/g" application.ymlsed -i "s/mysql_user/${mysql_user}/g" application.ymlsed -i "s/mysql_pwd/${mysql_pwd}/g" application.yml## 编译root模块cd $pwd/rootmvn clean install -Dmaven.test.skip&#61;true## 编译web模块cd $pwd/webmvn clean package spring-boot:repackage -Dmaven.test.skip&#61;true -U&#39;&#39;&#39;}stage(&#39;停止 tomcat&#39;) {sh &#39;&#39;&#39;## 停止tomcat的函数, 参数$1带入tomcat的路径$TOMCAT_PATHkillTomcat(){pid&#61;&#96;ps -ef|grep $1|grep java|awk &#39;{print $2}&#39;&#96;echo "tomcat Id list :$pid"if [ "$pid" &#61; "" ]thenecho "no tomcat pid alive"elsekill -9 $pidfi}## 停止TomcatkillTomcat $tomcat_home&#39;&#39;&#39;}stage(&#39;清理环境&#39;) {sh &#39;&#39;&#39;## 删除原有war包rm -f $tomcat_home/webapps/ROOT.warrm -rf $tomcat_home/webapps/ROOT&#39;&#39;&#39;}stage(&#39;部署新的war包&#39;) {sh &#39;&#39;&#39;cp jeesite/web/target/web.war $tomcat_home/webapps/cd $tomcat_home/webappsmv web.war ROOT.war&#39;&#39;&#39;}stage(&#39;启动tomcat&#39;) {sh &#39;&#39;&#39;JENKINS_NODE_COOKIE&#61;dontkillmecd $tomcat_home/binsh startup.sh&#39;&#39;&#39;}
}

3.2在Jenkins中添加环境变量

为了提高灵活性&#xff0c;我们将MySQL等相关配置&#xff0c;添加到Jenkins任务的环境变量中&#xff0c;供pipeline脚本调用。

在节点属性中分别添加以下环境变量&#xff1a;mysql_ip&#xff08;mysql的ip&#xff09;&#xff0c;mysql_port&#xff08;mysql的端口&#xff09;&#xff0c;mysql_user&#xff08;mysql的用户名&#xff09;&#xff0c;mysql_pwd&#xff08;密码&#xff09;&#xff0c;tomcat_home&#xff08;tomcat的根路径&#xff09;环境变量

在这里插入图片描述


3.3 运行任务

在这里插入图片描述

登录查看是否项目发布成功

在这里插入图片描述


三.docker部署持续交付实战


1.任务介绍

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


2.Jenkins集成docker持续交互实战

实战流程如下&#xff1a;拉取源码》编译war包》使用war包构建新的docker镜像》启动docker镜像


&#xff08;1&#xff09;dockerfile编写

我们使用dockerfile文件来生成新的的镜像

在这里插入图片描述

# 指定基础镜像
FROM tomcat:latest# 指定维护者信息
LABEL maintainer&#61;"hahaha"# 设置容器启动时的环境变量
ENV NGINX_VERSION&#61;1.17.9# 设置构建镜像时的环境变量
ARG WORK_PWD&#61;/usr/local/tomcat# 设置容器用户
USER root# 在初始的tomcat容器中&#xff0c;webapps是一个空文件夹。而webapp相关文件都在webapps.dist文件夹下。所以我们执行下面的命令&#xff0c;将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

&#xff08;2&#xff09;编写pipeline文件

pipeline {# 指定运行任务的节点agent {label &#39;salve-mylinux2&#39;}environment {docker_image_name &#61; &#39;jeesite4&#39; # 设置docker镜像名称为变量docker_container_name &#61; &#39;iJeesite4&#39; # 设置docker容器名称为变量}stages{stage(&#39;同步源码&#39;) {steps{sh """mkdir jeesite || echo "the dir jeesite is exit""""dir("jeesite"){git credentialsId:&#39;gitee_ouyi&#39;, branch:&#39;master&#39;, url:&#39;git&#64;gitee.com:xxx/jeesite4.git&#39; # 项目源码地址}}}stage(&#39;设定配置文件&#39;){steps{sh &#39;&#39;&#39;. ~/.bash_profilecd jeesite/web/src/main/resources/configsed -i "s/mysql_ip/${mysql_docker_ip}/g" application.ymlsed -i "s/mysql_port/${mysql_port}/g" application.ymlsed -i "s/mysql_user/${mysql_user}/g" application.ymlsed -i "s/mysql_pwd/${mysql_pwd}/g" application.yml&#39;&#39;&#39;}}stage(&#39;Maven 编译&#39;){steps {sh &#39;&#39;&#39;. ~/.bash_profilecd jeesite/rootmvn clean install -Dmaven.test.skip&#61;truecd ../../jeesite/webmvn clean package spring-boot:repackage -Dmaven.test.skip&#61;true -U&#39;&#39;&#39;}}stage(&#39;停止 / 删除 现有Docker Container/Image &#39;){steps {script{try{sh &#39;docker stop $docker_container_name&#39;}catch(exc){echo &#39;The container $docker_container_name does not exist&#39;}try{sh &#39;docker rm $docker_container_name&#39;}catch(exc){echo &#39;The container $docker_container_name does not exist&#39;}try{sh &#39;docker rmi $docker_image_name&#39;}catch(exc){echo &#39;The docker image $docker_image_name does not exist&#39;}}}}stage(&#39;生成新的Docker Image&#39;){steps {sh &#39;&#39;&#39;cd jeesite/web/bin/dockerrm -f web.warcp ../../../web/target/web.war .docker build -t $docker_image_name .&#39;&#39;&#39;}}stage(&#39;启动新Docker实例&#39;){steps {sh &#39;&#39;&#39;docker run -d --name&#61;$docker_container_name -p 8981:8080 $docker_image_name&#39;&#39;&#39;}}}
}

&#xff08;3&#xff09;Jenkins中创建任务

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


推荐阅读
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在Linux系统中,为了提高安全性,可以通过设置命令执行超时和用户超时注销来防止因用户长时间未操作而带来的安全隐患。具体而言,可以通过编辑 `/etc/profile` 文件,添加或修改相关参数,确保用户在指定时间内无操作后自动注销。此外,还可以利用 `timeout` 命令来限制特定命令的执行时间,进一步增强系统的稳定性和安全性。 ... [详细]
  • 本文深入探讨了 Spring Cloud 微服务架构中 Gateway 组件的应用,详细介绍了其在实现高效请求路由与过滤方面的关键作用。文章首先从基本配置入手,逐步讲解了如何通过静态路由和动态路由实现灵活的服务访问控制。此外,还特别介绍了如何配置 Gateway 以自动从 Nacos 服务注册中心拉取服务列表,进一步提升系统的可维护性和扩展性。 ... [详细]
author-avatar
dingzhi521
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有