基于DockerHarbor+Jenkins流水线部署Springboot项目

环境准备

  • 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

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

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

  4. 新建任务 -> 流水线

  5. 任务配置

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

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

    typescript 复制代码
    pipeline {
        agent any
    
        stages {
              stage('第一步') {
                  steps {
                      echo "第一步"
                  }
              }
    
              stage('第二步') {
                    steps {
                        echo "第二步"
                    }
              }
    
              stage('第三步') {
                    steps {
                        echo "第三步"
                    }
              }
    
              stage('第四步') {
                    steps {
                        echo "第四步"
                    }
              }
        }
    }
  7. 根据 Jenkins 的流水线语法提示生成Jenkinsfile脚本内容

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

    Gitee拉取代码

    Maven构建打包项目

    打包镜像并上传Harbor

    拉取镜像并启动项目

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

    php 复制代码
    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内容如下

    bash 复制代码
    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内容如下

    ruby 复制代码
    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. 点击立即构建,可以看到下图

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

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

相关推荐
MX_935929 分钟前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子1 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
源代码•宸2 小时前
大厂技术岗面试之谈薪资
经验分享·后端·面试·职场和发展·golang·大厂·职级水平的薪资
晚霞的不甘3 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
喵叔哟3 小时前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
Charlie_lll4 小时前
力扣解题-移动零
后端·算法·leetcode
打工的小王4 小时前
Spring Boot(三)Spring Boot整合SpringMVC
java·spring boot·后端
80530单词突击赢6 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
爬山算法6 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
WeiXiao_Hyy7 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端