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

相关推荐
量化小c21 分钟前
一行代码查 BTCUSDT 和 AAPL 最新价?QuantDash 统一多市场实时行情接口实战
后端·算法·github
沙盘客36 分钟前
AFSIM 官方案例库全景与解读方法论
c++·经验分享·后端
abcefg_h1 小时前
MCP 实战指南:如何在项目中使用 Model Context Protocol 及其通信原理
开发语言·后端·golang·mcp
AI多Agent协作实战派1 小时前
AI多Agent协作系统实战(四十八):改个名,整个AI团队都不认识人了
后端
wei_shuo1 小时前
KES 故障诊断与应急响应:问题排查、根因分析与应急预案
后端
LinMINGJing0071 小时前
postgre分区方式
后端
王中阳Go2 小时前
业务代码凭什么不能直接调 Agent?——我在律所 AI 项目里做的 Harness 运行时治理
人工智能·后端·程序员
SomeB1oody2 小时前
【RustyML入门】7.2. 深入模型持久化
开发语言·后端·机器学习·rust·教程
知几蜗牛2 小时前
0 后端 · 0 数据库 · 0 备案:用 AI 两天搓出的股票管理系统,开源了
前端·后端·llm
风流 少年3 小时前
Spring AI 2.0:阿里云百炼平台(工作流应用)
java·后端·spring