Jenkins + docker 一键部署 Spring Boot 项目

2023年 9月 28日 73.5k 0

一、系统环境

以下环境皆为必要系统环境;以下环境版本皆为我测试机的环境,实际操作不一定要如此高的版本

  • Ubuntu 20.04LTS
  • Java 8
  • Maven 3.6.3
  • Docker 19.03.13
  • Jenkins 2.249.3
  • git 2.25.1

二、创建一个简单的 Spring Boot 项目

1、创建项目

使用 IDEA 等创建一个简单的 Spring Boot 项目,注意下面标红的几个点

image.png

image.png

然后创建一个类Hello0Controller,添加如下代码

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(String str){
        return "hello "+str;
    }
}

此时,运行这个项目,访问http://localhost:port/hello?str=world以得到一串字符串hello world。以此来测试项目是否创建成功,是否运行成功

2、打包项目

在 项目根目录处运行指令mvn package,对这个项目进行打包,正常情况下,项目会生成 target 文件夹,文件夹下的xxx-0.0.1-SNAPSHOT.jar即为打包生成的可执行 jar 包(xxx为项目的artifactId

为了测试打包的 jar 包是否正确,我们可以使用指令执行该 jar 包,然后进行访问查看效果。执行指令如下

cd targer/
java -jar xxx-0.0.1-SNAPSHOT.jar

访问http://localhost:port/hello?str=world以得到一串字符串hello world。以此来测试项目是否创建成功,是否运行成功

3、将该项目上传到 GitHub

省略……

三、使用 Jenkins 自动部署 Spring Boot 项目

我们先不使用 Docker,直接用 Jenkins 部署这个 SpringBoot 项目

先来统计一下,我们用到的指令如下

git clone https://github.com/xxx.git
cd xxx
mvn package
cd target
java -jar xxx-0.0.1-SNAPSHOT.jar

如果我们自己在服务器终端,直接运行以上几个指令即可在服务器运行起我们的 SpringBoot 项目。Jenkins 其实也只是将这些指令集成一下,做到一键即可部署

1、安装、运行 Jenkins

建议直接看文档进行安装:Jenkins官网

安装完后运行时安装插件选择推荐插件即可,遇到的大部分 Jenkins 问题都可自行搜索解决

2、配置环境

访问服务器运行的 Jenkins 主页,选择Manage Jenkins -> Global Tool Configuration,进入到全局环境变量配置,将需要配置的环境(Java、Maven、Git)填入即可

3、在 Jenkins 上新建项目

访问服务器运行的 Jenkins 主页,选择“新建Item(New Item)”

然后输入该项目名称,并选择“流水线”后,点击确定新建项目

image.png

4、编写自定义流水线

点击确定按钮以后,跳转到配置页面,在配置页面,我们只用关心流水线脚本,其余配置若感兴趣可自行查阅其作用

image.png

对于 pipeline 语法可以浏览官网进行学习,本篇文章所使用的都是简单的指令。本篇文章的脚本如下(注意根据自己的项目进行修改)

pipeline {
    agent any
    stages {
        stage('使用git下载代码') {
            steps {
                // echo 可以用来做简单的输出
                echo 'git from github...'
                // 使用pipeline的git指令进行下载,如果分支是master,也可以使用 git 'https://github.com/xxx.git'
                git url: 'https://github.com/xxx.git', branch: 'main'
            }
        }
        stage('使用Maven构建') {
            steps {
                echo "maven build start..."
                // 使用sh指令linux执行,Windows的话,可以使用bat
                sh "mvn -Dmaven.test.skip=true clean package"
            }
        }
        stage('运行项目') {
            steps {
                echo "Spring boot start..."
                sh "java -jar target/xxx-0.0.1-SNAPSHOT.jar"
            }
        }
    }
}

5、一键构建

进入到项目页面,点击按钮"Build Now"即可构建

image.png

下面是构建完成的截图

image.png

注意这里由于我们的指令问题,是不会构建完成,而是卡在运行项目这里,点击左下角#12左边的圆圈按钮即可查看输出信息

到此,Jenkins 配合 Spring Boot 实现自动化部署已经完成,每次上传完代码以后直接点击"Build Now"按钮即可重新部署。但是,目前运行项目这个步骤一直无法完成,这个问题有两个解决办法:

  • 使用nohup java -jar xxx.jar &指令,但是如果使用这个指令需要用单引号包住这个指令且 jar 文件需要是绝对路径,感兴趣可以尝试一下
  • 使用Docker构建镜像并运行镜像
  • 四、配合 Docker

    为了解决上述问题,我们引入 Docker。引入 Docker 不光是为了解决上面那个问题,容器化已经是大势所趋,具体使用 Docker 有哪些好处可以自行搜索

    1、Docker 将 Spring Boot 项目打包成镜像

    Docker 对 Spring Boot 项目打包的方式有很多种,这里我参考官方推荐的一种,参考网址:spring.io/guides/gs/s…

    新建 Dockerfile

    在项目根目录新建一个名为 Dockerfile 的文件,注意没有后缀名,其内容如下

    FROM java:8
    VOLUME /tmp
    COPY target/xxx-0.0.1-SNAPSHOT.jar app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

    Dockerfile指令|菜鸟教程

    在本地构建镜像(测试用,可跳过)

    如果你本地有 Docker 环境的话,可以在本地进行构建镜像

    在项目根目录运行指令docker build -t spring-demo .即可

    运行该镜像的话,只用执行指令docker run -d -p 8080:8080 spring-demo即可,8080:8080指本地端口8080(第一个)映射到容器端口8080(第二个)

    2、将 Dockerfile 上传到 GitHub

    省略….

    3、修改 pipeline 脚本

    修改后的脚本如下

    pipeline {
        agent any
        stages {
            stage('停止旧容器') {
                steps {
                    echo "stop if project is running..."
                    sh 'docker ps -f name=spring-demo -q | xargs --no-run-if-empty docker container stop'
                    sh 'docker ps -a -f name=spring-demo -q | xargs --no-run-if-empty docker container rm'
                }
            }
            stage('使用git下载代码') {
                steps {
                    // echo 可以用来做简单的输出
                    echo 'git from github...'
                    // 使用pipeline的git指令进行下载,如果分支是master,也可以使用 git 'https://github.com/xxx.git'
                    git url: 'https://github.com/xxx.git', branch: 'main'
                }
            }
            stage('使用Maven构建') {
                steps {
                    echo "maven build start..."
                    // 使用sh指令linux执行,Windows的话,可以使用bat
                    sh "mvn -Dmaven.test.skip=true clean package"
                }
            }
            stage('Docker构建') {
                steps {
                    echo "docker build start..."
                    sh "docker build -t spring-demo ."
                }
            }
            stage('Docker运行') {
                steps {
                    echo "docker image start..."
                    sh "docker run -d -p 8080:8080 --name spring-demo spring-demo"
                }
            }
        }
    }
    

    5、一键构建

    先将没有集成 Docker 的那个构建停止,然后重新点击"Build Now"即可

    小结

    以上,Jenkins + Docker + SpringBoot的自动部署就实现完成了,我的项目代码地址:github.com/pangyuworld… 仅供参考

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论