【学习Docker(七)】详细讲解Jenkins部署SpringCloud微服务项目,Docker-compose启动

news2025/1/18 20:09:28

Jenkins部署SpringCloud微服务项目,Docker-compose启动

座右铭:《坚持有效输出,创造价值无限》

本文介绍使用Jenkins部署SpringCloud微服务项目,Docker-compose启动。

之前写过安装Jenkins的过程,这里就不写安装细节了。

因为我的项目用到了MySQL、Redis、Nacos,所以按顺序安装就好了,可以自行选择。

【学习Docker(一)】centos系统 Docker 安装与卸载

【学习Docker(二)】Docker Jenkins的安装与卸载

【学习Docker(三)】Docker Mysql8.0.26的安装与卸载

【学习Docker(四)】Docker-compose的安装与卸载

【学习Docker(五)】Docker Redis的安装与卸载

【学习Docker(六)】Docker Nacos的安装与卸载

这里说一个安装Jenkins我遇到的问题,当时我按照学习Docker二安装的Jenkins没问题,现在安装后插件一直安装不了。

这里你可以安装Jenkins稳定版本

docker pull jenkins/jenkins:lts
docker run -d \
    -p 8080:8080 \
    -p 50000:50000 \
    -v /docker-local/jenkins-lts:/var/jenkins_home \
    -v /etc/localtime:/etc/localtime \
    --restart=always \
    --name=jenkins-lts \
    jenkins/jenkins:lts

这里我目前安装是没问题的。

安装配置

下载必要插件

  1. 安装 Maven Integration
  2. 安装 Publish Over SSH(如果不需要远程推送,不用安装)
  3. 如果使用 Gitee 码云,安装插件Gitee(自带 Git 不用单独安装)

安装maven

在这里插入图片描述

配置jdk

在这里插入图片描述

配置SSH Servers

在这里插入图片描述

这里的Remote Directory需要填写服务器的一个目录,因为我准备把jar等都放在docker-local下,所以我指定了这个路径

创建maven项目

在这里插入图片描述

General

根据自己的需求填写就行

在这里插入图片描述

源码管理

在这里插入图片描述

这里选择git、填写git链接、用户名和密码及对应打包的分支。

构建环境

在这里插入图片描述

在这里插入图片描述

建议勾选Delete workspace before build starts,这样可以保证每次打包的代码是最新的,避免删除了某些文件还会再进行打包进来的情况。

勾选Send files or execute commands over SSH after the build runs,当构建完成后,会执行ssh脚本。

因为我是使用docker启动项目,所以我是把所有的jar包放在了/docker-local/blog/jar目录下,该目录放了一个脚本。

start.sh脚本

脚本内容首先是把jar包都copy到该目录,再进行关闭项目相关的docker镜像,最后打包启动。

rm -rf /docker-local/blog/jar/*.jar
cp /docker-local/blog/out/cloud-api/ants-manage/target/* /docker-local/blog/jar
cp /docker-local/blog/out/cloud-api/ants-web/target/* /docker-local/blog/jar
cp /docker-local/blog/out/cloud-gateway/target/* /docker-local/blog/jar
cp /docker-local/blog/out/cloud-oauth/target/* /docker-local/blog/jar
cp /docker-local/blog/out/cloud-service/ants-user-service/target/* /docker-local/blog/jar

echo "清理已有容器及镜像资源"
	for container in {"cloud-gateway","ants-user-service","cloud-oauth","ants-web","ants-manage"}
do
	image=docker_${container}
	if docker ps | grep ${container} ;then
	    docker stop ${container}
	fi
	if docker ps -a | grep ${container};then
	    docker rm ${container}
	fi
	if docker images | grep ${image};then
	    docker rmi ${image}
	fi
done

docker-compose up -d;

exit 0;

Build

在这里插入图片描述

clean package  -DskipTests=true

打包,跳过测试。

Post-Steps

注意:如果是单体项目,这个就添加一个SSH就好了(第二张图即可)。

这里是指定服务器,然后从文件中找到jar包上传到第三步的Remote Directory目录下。

这个第四步,不需要加docker-local的前缀。

因为我这里是微服务,有些服务进目录以后就是target,有些更深一级,所以我增加了两个配置,然后把打包jar包都放在/blog/out目录下。

在这里插入图片描述

在这里插入图片描述

保存即可

立即构建

因为我是docker-compose部署项目,所以在/docker-local/blog/jar目录增加一个docker-compose.yml

这里贴出我的配置信息,可以按需配置

version: '3'
services:
  cloud-gateway:
    # 指定容器名称
    container_name: cloud-gateway
    # 重启机制
    restart: always
    image: openjdk:8
    volumes:
      # 挂载本地jar包路径 /docker-local/blog/jar
      - /docker-local/blog/jar/cloud-gateway.jar:/cloud-gateway.jar
      # 挂载日志
      - ./log:/log
    ports:
    - "1000:1000"
    network_mode: host
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    command: java -jar cloud-gateway.jar --spring.profiles.active=test > cloud-gateway.jar.log
    
  ants-user-service:
    # 指定容器名称
    container_name: ants-user-service
    # 重启机制
    restart: always
    image: openjdk:8
    
    volumes:
      # 挂载本地jar包路径
      - /docker-local/blog/jar/ants-user-service.jar:/ants-user-service.jar
      # 挂载日志
      - ./log:/log
    ports:
    - "8001:8001"
    network_mode: host
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    command: java -jar ants-user-service.jar --spring.profiles.active=test > ants-user-service.jar.log
    
  cloud-oauth:
    # 指定容器名称
    container_name: cloud-oauth
    # 重启机制
    restart: always
    image: openjdk:8
    
    volumes:
      # 挂载本地jar包路径
      - /docker-local/blog/jar/cloud-oauth.jar:/cloud-oauth.jar
      # 挂载日志
      - ./log:/log
    ports:
    - "6003:6003"
    network_mode: host
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    command: java -jar cloud-oauth.jar --spring.profiles.active=test > cloud-oauth.jar.log 
    
  ants-web:
    # 指定容器名称
    container_name: ants-web
    # 重启机制
    restart: always
    image: openjdk:8
    
    volumes:
      # 挂载本地jar包路径
      - /docker-local/blog/jar/ants-web.jar:/ants-web.jar
      # 挂载日志
      - ./log:/log
    ports:
    - "3001:3001"
    network_mode: host
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    command: java -jar ants-web.jar --spring.profiles.active=test > ants-web.jar.log     
  ants-manage:
    # 指定容器名称
    container_name: ants-manage
    # 重启机制
    restart: always
    image: openjdk:8
    
    volumes:
      # 挂载本地jar包路径
      - /docker-local/blog/jar/ants-manage.jar:/ants-manage.jar
      # 挂载日志
      - ./log:/log
    ports:
    - "6002:6002"
    network_mode: host
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    command: java -jar ants-manage.jar --spring.profiles.active=test > ants-manage.jar.log
  redis:
    image: redis:latest
    container_name: redis
    hostname: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - ./config/redis/conf/redis.conf:/etc/redis/redis.conf   #挂载redis.conf不然后续重启redis密码会失效
      - ./config/redis/data:/data
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
    command: ["redis-server","/etc/redis/redis.conf"]          #指定配置文件启动redis
    network_mode: host

点击立即构建,就进入了打包流程。

在这里插入图片描述

打包成功以后,可以看一下out目录下是否有文件。

在这里插入图片描述

这里面的文件都有target,然后只有一个jar包。

上面贴出来的脚本就是这些文件完成之后,把里面的代码进行copy到/docker-local/blog/jar目录下。

在这里插入图片描述

可以发现jar包下的文件也有了,接下来就是docker执行项目了。

这里会发现项目没有执行,因为需要给该目录增加权限。

在这里插入图片描述

chmod u+x /docker-local/blog/jar

开放端口

firewall-cmd --zone=public --add-port=1000/tcp --permanent
重启防火墙
firewall-cmd --reload

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem

雅达利大崩溃 回忆上次内容 个人计算机浪潮已经来临 苹果公司迅速发展微软公司脱离mits准备做纯软件公司IBM用大型机思路制作的5100惨败 Commodore 64 既做计算机又做游戏机 计算机行业和游戏行业 跟随着底层技术不断迭代已经进入了战乱纷纷的年代最终又会如何呢&#xff1f…

31 openEuler使用LVM管理硬盘-管理物理卷

文章目录31 openEuler使用LVM管理硬盘-管理物理卷31.1 创建物理卷31.2 查看物理卷31.3 修改物理卷属性31.4 删除物理卷31 openEuler使用LVM管理硬盘-管理物理卷 31.1 创建物理卷 可在root权限下通过pvcreate命令创建物理卷。 # pvcreate [option] devname ...其中&#xff1…

【linux工具】Tmux简明教程

A Quick and Easy Guide to tmux (hamvocke.com) 一、说明 我们常用ubuntu,用altctlT实现终端窗口弹出。然而当需要多个终端一起工作,切换的效率就成了问题。 tmux是ubuntu下,终端窗口工具。该工具能实现多窗口分屏显示、多个会话在一个终端…

【13】linux命令每日分享——groupadd建立组

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

时间复杂度的计算

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 文章目录123456789时间复杂度(就是一个函数)的计算,…

Flutter开发圆形计时进度条RingProgressBar

演示 先看效果图: 由于无法截取动态图,我就截过程中的两张图片表达了,我想应该能看得懂。 功能1.设置进度条半径 2.设置进度条宽度 3.设置进度条最大值 4.设置进度条背景色以及前景色 5.是否显示进度条文字 6.文字样式设置 7.点击进度条和进…

机器学习100天(三十七):037 朴素贝叶斯-挑个好西瓜!

《机器学习100天》完整目录:目录 机器学习100天,今天讲的是:朴素贝叶斯-挑个好西瓜! 红色石头已经了解了贝叶斯定理和朴素贝叶斯法,接下来已经可以很自信地去买瓜了。买瓜之前,还有一件事情要做,就是搜集样本数据。红色石头通过网上资料和查阅,获得了一组包含 10 组样…

打印名片-课后程序(Python程序开发案例教程-黑马程序员编著-第二章-课后作业)

实例3:文本进度条 进度条以动态方式实时显示计算机处理任务时的进度,它一般由已完成任务量与剩余未完成任务量的大小组成。本实例要求编写程序,实现图1所示的进度条动态显示的效果。 下载中下载完成图1文本进度条 实例分析 在本实例中可以将…

【java】alibaba Fastjson --全解史上最快的JSON解析库

文章目录前序Fastjson 简介Fastjson 的优点速度快使用广泛测试完备使用简单功能完备下载和使用将 Java 对象转换为 JSON 格式JSONField创建 JSON 对象JSON 字符串转换为 Java 对象使用 ContextValueFilter 配置 JSON 转换使用 NameFilter 和 SerializeConfigFastjson 处理日期F…

如何使用SaleSmartly进行Facebook Messenger 营销、销售和支持

如何使用SaleSmartly(ss客服)进行Facebook Messenger 营销、销售和支持上篇文章我们讲了什么是Facebook Messenger CRM以及获得Facebook Messenger CRM的注意事项,现在你有更多时间与客户聊天,让我们看看你如何使用SaleSmartly&am…

缓存穿透和缓存击穿、缓存雪崩

一、Redis作为一个缓存中间件是如何工作的?架构图如下过程如下 客户端发起一个查询请求的时候,首先去缓存中查询,如果数据在缓存中存在,则直接将缓存中数据返回给客户端;如果数据在缓存中不存在,则继续查询…

嵌入式知识点-SPI通讯

该文原自 : 正点原子 01 SPI概述 SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同…

网络营销培训完能达到什么水平?学完能创业吗?

网络营销本身就是一门创业的技术,很多人学习网络营销,往往担心学完以后技术达不到,再工作几年才可以创业,实际这是错误的理解,那么,网络营销培训完能达到什么水平?新手学员参加网络营销培训&…

MAX 10 10M50 FPGA(10M50DDF256I7G)10M50DDF484C8G/10M50DDF484I7G

MAX 10器件是单芯片、非易失性低成本可编程逻辑器件(pld),用于集成最优的系统组件集。MAX 10设备的亮点包括:内部存储双配置闪存用户闪存即时支持集成模数转换器(adc)支持Nios II单芯片软核处理器该器件设备是系统管理、I/O扩展、通信控制平面、工业、汽…

Spark BlockManager数据存储与管理机制

BlockManager是整个Spark底层负责数据存储与管理的一个组件,Driver和Executor的所有数据都由对应的BlockManager进行管理。 Driver上有BlockManagerMaster,负责对各个节点上的BlockManager内部管理的数据的元数据进行维护,比如block的增删改等…

SpringBoot如何自定义一个starter

SpringBoot starter,大家应该在平常写项目中应该非常熟悉,很多依赖都会提供集成SpringBoot的依赖,这样我们用起来就非常顺手,开箱就能用,那如何自定义一个starter呢? SpringBoot starter SpringBoot中的一…

【C++初阶】2. 类和对象_1

1. 面向过程和面向对象的初步认识 2. 类的引入 C语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量&#…

Matlab深度学习实战二:AlexNet图像分类篇提供花分类这里以分二类演示且matlab提供模型框架详细操作流程

1.花数据集简介下载与准备 2.matlab搭建模型 3.matlab软件的操作过程: (1)界面操作 (2)深度学习设计器使用 (3)图像数据导入 (4)训练可视化 一、花数据集简介下载与准备…

学生档案管理系统的设计与实现

技术:Java、JSP等摘要:本设计是为托普学院学生档案的管理实现电子化而设计的,系统开发采用J2EE技术,数据库采用了SQL Server 2005,因而系统具有很好的扩展性、可移植性,实现了教学资源的信息化管理。主要功…

【Python学习笔记】第二十七节 Python 多线程

一、进程和线程进程:是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈及其他记录运行轨迹的辅助数据。线程:所有的线程都运行在同一个进程当中,共享相同的运行环境。线程有开始、顺序执行和结束三个部分, …