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

相关推荐
IT_陈寒16 分钟前
Python性能提升50%:这5个隐藏技巧让你的代码快如闪电⚡
前端·人工智能·后端
自由生长20241 小时前
Protocol Buffers 技术解析:为什么叫「协议缓冲区」
后端
悟空码字1 小时前
手把手搭建Java微服务:从技术选型到生产部署
java·后端·微服务
leonardee1 小时前
MySQL----case的用法
java·后端
骑着bug的coder1 小时前
吃烤鱼时突然悟到的:为什么 Java 线程池的扩容逻辑是“反直觉”的?
后端
v***8572 小时前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis
武昌库里写JAVA2 小时前
Java如何快速入门?Java基础_Java入门
java·vue.js·spring boot·后端·sql
程序员爱钓鱼2 小时前
Python职业路线规划:从入门到高级开发者的成长指南
后端·python·trae
程序员爱钓鱼2 小时前
Python 编程实战 · 进阶与职业发展:自动化运维(Ansible、Fabric)
后端·python·trae