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集成自动化测试实战

初创团队持续集成的落地与实现(gitlab+python)

Docker 搭建 Jenkins 实现自动部署

Jenkins持续集成-自动化部署脚本的实现《python》

Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

window下jenkins自动化持续集成报告查看配置,基于python语言