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

相关推荐
智慧老师7 分钟前
Spring基础分析13-Spring Security框架
java·后端·spring
搬码后生仔1 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
Lx3522 小时前
Pandas数据重命名:列名与索引为标题
后端·python·pandas
小池先生2 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
百罹鸟3 小时前
【vue高频面试题—场景篇】:实现一个实时更新的倒计时组件,如何确保倒计时在页面切换时能够正常暂停和恢复?
vue.js·后端·面试
小蜗牛慢慢爬行3 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
wm10434 小时前
java web springboot
java·spring boot·后端
龙少95436 小时前
【深入理解@EnableCaching】
java·后端·spring
溟洵8 小时前
Linux下学【MySQL】表中插入和查询的进阶操作(配实操图和SQL语句通俗易懂)
linux·运维·数据库·后端·sql·mysql