Jenkins+Docker实现CI/CD流水线部署SpringBoot项目实战指南

Jenkins+Docker实现CI/CD流水线部署SpringBoot项目实战指南

随着企业应用的不断发展,持续集成与持续部署(CI/CD)已成为提升开发效率和保障软件质量的重要手段。

本文针对CentOS 7环境,详细讲解了Docker、Docker-Compose、Harbor、Jenkins的安装和配置过程,并结合实际项目演示了如何通过Jenkins流水线实现代码自动构建、打包镜像、推送到私有仓库以及远程服务器自动部署启动。

通过本篇博文,读者不仅能够掌握基础环境搭建,更能实际应用Jenkins实现完整的自动化交付流程,为后续项目的持续迭代奠定坚实基础。

环境准备

  • Centos 7
  • Docker 24.0.7
  • Docker-Compose 2.21.0
  • Docker-Harbor 2.9.1
  • Jenkins 2.434
  • Jdk 8
  • Maven 3.9.1
  • Git 2.39.2

Docker、Docker-Compose安装

查看我另外的文章:# Centos离线安装Docker、Docker-compose

Docker-Harbor 安装

查看我另外的文章:# Centos 离线安装 Docker-Harbor

Jenkins 安装

查看我另外的文章:# Docker安装Jenkins,并容器化

部署配置

  1. Jenkins 安装插件 Publish Over SSHGitee或者Gitlab

    image.png

  2. Jenkins 系统配置->全局工具配置,配置Maven、Git、Jdk

    image.png

    image.png

    image.png

    image.png

  3. Jenkins 系统管理 -> 系统配置,配置 Publish over SSH

    image.png

  4. 新建任务 -> 流水线

    image.png

    image.png

  5. 任务配置

    image.png

    image.png

    image.png

  6. 根据前面 脚本路径 在项目中创建 Jenkinsfile 文件

    image.png

    添加下面内容作为初始模板

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    pipeline {
    agent any

    stages {
    stage('第一步') {
    steps {
    echo "第一步"
    }
    }

    stage('第二步') {
    steps {
    echo "第二步"
    }
    }

    stage('第三步') {
    steps {
    echo "第三步"
    }
    }

    stage('第四步') {
    steps {
    echo "第四步"
    }
    }
    }
    }
  7. 根据 Jenkins 的流水线语法提示生成Jenkinsfile脚本内容

    进入流水线语法,通过Jenkins流水线生成模板生成

    image.png

    Gitee拉取代码

    image.png

    image.png

    Maven构建打包项目

    image.png

    打包镜像并上传Harbor

    image.png

    拉取镜像并启动项目

    image.png

    image.png

  8. 最终生成的Jenkinsfile文件内容为

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    pipeline {
    agent any

    stages {
    stage('从Gitee拉取代码') {
    steps {
    checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '1', url: 'https://gitee.com/liboshuai01/xxl-job.git']])
    }
    }

    stage('Maven构建打包项目') {
    steps {
    sh '/opt/module/maven/apache-maven-3.9.2/bin/mvn clean install -DskipTests'
    }
    }

    stage('打包镜像并上传Harbor') {
    steps {
    sh '''cd xxl-job-admin
    docker build -t xxl-job:latest ./
    docker login -u admin -p Rongshu@2024 10.0.0.38:8004
    docker tag xxl-job:latest 10.0.0.38:8004/library/xxl-job:latest
    docker push 10.0.0.38:8004/library/xxl-job:latest
    docker image prune -f'''
    }
    }

    stage('拉取镜像并启动项目') {
    steps {
    sshPublisher(publishers: [sshPublisherDesc(configName: 'root@one', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''#!/bin/bash

    source /etc/profile
    cd /opt/projects/xxl-job
    docker login -u admin -p Rongshu@2024 10.0.0.38:8004
    docker pull 10.0.0.38:8004/library/xxl-job:latest
    docker image prune -f
    docker-compose up -d''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
    }
    }
    }
    }
  9. 项目中用到的Dockerfile内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FROM openjdk:8-jre-slim
    LABEL author="boshuai.li"

    ENV PARAMS=""

    ENV TZ=PRC
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

    ADD target/xxl-job-admin-*.jar /app.jar

    ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]
  10. 项目中用到的docker-compose.yaml内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    version: '3'
    services:
    xxl_job:
    image: 10.0.0.38:8004/library/xxl-job:latest
    container_name: xxl-job
    restart: on-failure:3
    volumes:
    - /opt/projects/xxl-job/logs:/opt/projects/xxl-job/logs
    ports:
    - 8088:8088

部署验证

  1. 点击立即构建,可以看到下图

    image.png

  2. 查看xxl-job容器服务是否启动

    image.png

  3. 查看Harbor仓库中是否有推送的镜像

    image.png

结语

通过本文的实践操作,我们完整搭建了基于Docker和Jenkins的自动化部署环境,实现了代码从拉取、构建、打包、上传到镜像仓库,再到远程服务器自动更新启动的全流程自动化。

该流程大幅提升了开发与运维协作效率,减少了人为操作风险,保障了应用的快速交付与稳定运行。

希望本文内容能为您的项目持续集成和自动部署提供实用指导,共同推动软件交付能力的升级和优化。

Jenkins+Docker实现CI/CD流水线部署SpringBoot项目实战指南

https://lbs.wiki/pages/43ff9685/

作者

李博帅

发布于

2023-12-06

更新于

2025-06-05

许可协议