基于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仓库中是否有推送的镜像

相关推荐
uzong1 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程2 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi2 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国3 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy3 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack4 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9655 小时前
pip install 已经不再安全
后端
寻月隐君5 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github