【服务器部署篇】Jenkins配置后端工程自动化部署

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产生了写一个博客专栏想法,介绍当前互联网企业JAVA项目开发如何快速入门。

本文收录于《30天企业JAVA项目开发实战入门》专栏,该专栏内容以当前互联网软件企业中的项目实战为线索,介绍企业JAVA项目开发中涉及到的开发流程、技术、工具、规范要求等等。帮助想从事JAVA开发的大学生或新人,更快、更好的入门JAVA后端开发工作。

文章目录

    • 一、前言
    • 二、准备资源
    • 三、配置项目的阿里云镜像仓库
    • 四、编写项目dockerfile和docker-compose文件
    • 五、编写项目发布shell脚本
    • 六、配置项目的Jenkins任务
    • 七、执行项目的Jenkins任务,实现自动化部署
    • 八、总结

一、前言

本文介绍如何通过Jenkins配置后端工程进行自动化部署。这里以若依Spring-cloud后端工程为示例,介绍如何通过Jenkins配置若依Spring-cloud后端工程,实现自动化发布部署到服务器上。

在这里插入图片描述

首先,梳理一下,我们要实现的自动化发布部署的流程如下:

1)首先,使用git从远程代码仓库中拉取最新的代码;

2)之后,使用jdk、maven对代码进行编译打包;

3)之后,根据定义的dockfile文件,生成对应的docker镜像;

4)之后,把docker镜像推送到harbor远程镜像仓库中;

5)之后,从harbor远程镜像仓库中拉取docker镜像;

6)最后,使用对应的docker镜像,启动docker容器。至此,自动化发布部署完成。

二、准备资源

1)环境要求

CentOS7.9 64位、JDK1.8、Tomcat8.5.87、maven3.3.1、Git1.8、Jenkins2.260

2)服务器资源购买

阿里云ECS服务器172.22.187.36(安装Jenkins等第三方应用)、阿里云ECS服务器172.22.187.40(部署Spring-cloud项目)、阿里云RDS Mysql服务器(部署项目数据库)

3)服务器上应用安装清单

Redis服务器,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/137829140

Nacos服务器,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/137886006

Jenkins发布工具,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/138182743

Docker容器工具,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/137435897

Ansible部署工具,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/138136832

4)其他资源

代码仓库使用码云gitee,RuoYi-Cloud代码下载地址:https://gitee.com/y_project/RuoYi-Cloud

镜像仓库使用阿里云仓库,阿里云仓库地址:https://cr.console.aliyun.com/cn-shanghai/instances

三、配置项目的阿里云镜像仓库

首先,登录阿里云控制台,创建一个自己的镜像仓库实例;
在这里插入图片描述

之后,新增一个项目对应的命令空间;
在这里插入图片描述

之后,为项目中不同的微服务,创建对应的镜像仓库;
在这里插入图片描述

最后,当我们把镜像推送到仓库中后,可以在“镜像版本”列表中,查看到对应的推送记录;

在这里插入图片描述

四、编写项目dockerfile和docker-compose文件

dockerfile文件定义如下:(以ruoyi-system后端服务为示例)

# 基础镜像
FROM  openjdk:1.8# author
MAINTAINER ruoyi# 挂载目录
VOLUME /home/ruoyiv# 创建目录
RUN mkdir -p /home/ruoyi# 指定路径
WORKDIR /home/ruoyi# 复制jar文件到路径
COPY ./ruoyi-modules-system.jar /home/ruoyi/ruoyi-modules-system.jar# 启动系统服务
ENTRYPOINT java ${JAVA_OPTS}  -jar ruoyi-modules-system.jar

docker-compose文件定义如下:(以ruoyi-system后端服务为示例)

version: "2"
services:ruoyi-system:restart: alwaysimage: registry-vpc.cn-shanghai.aliyuncs.com/ruoyi_project/ruoyi-systemports:- "9201:9201"container_name: ruoyi-systemmem_limit: 1.5genvironment:- JAVA_OPTS=-Xmx1g -Xms1g- SPRING_PROFILES_ACTIVE=dev

五、编写项目发布shell脚本

docker镜像创建、推送、启动相关的Shell脚本定义如下:(以ruoyi-system后端服务为示例)

####步骤一、开始服务器A操作#cd到项目jar包所在目录下
cd  /root/.jenkins/workspace/ruoyi-system/ruoyi-modules/ruoyi-system/target#创建docker镜像
docker  build  -t  registry-vpc.cn-shanghai.aliyuncs.com/ruoyi_project/ruoyi-system:latest -f  /root/.jenkins/workspace/ruoyi-system/ruoyi-modules/ruoyi-system/src/main/resources/dockerfile .#登录docker镜像仓库,PS:可以先手执行镜像仓库的登陆命令,后续就不需要重复登录了
docker login --username=你的镜像仓库登陆账号名  registry-vpc.cn-shanghai.aliyuncs.com#给docker镜像打tag
docker tag registry-vpc.cn-shanghai.aliyuncs.com/ruoyi_project/ruoyi-system   registry-vpc.cn-shanghai.aliyuncs.com/ruoyi_project/ruoyi-system:latest#推送docker镜像到仓库中
docker push registry-vpc.cn-shanghai.aliyuncs.com/ruoyi_project/ruoyi-system:latest####步骤二、通过ansible工具,开始服务器B操作#拉取docker镜像
ansible 172.22.187.40  -m command  -a  'docker pull registry-vpc.cn-shanghai.aliyuncs.com/ruoyi_project/ruoyi-system:latest'#使用镜像启动docker容器
ansible 172.22.187.40  -m command  -a  'docker-compose -f  /opt/ruoyi/docker-compose.yml up -d ruoyi-system'

六、配置项目的Jenkins任务

下面开始新建和配置Jenkins任务。(以ruoyi-system后端服务为示例)

首先,新增一个Maven任务;
在这里插入图片描述
之后,输入任务名称,选择任务类型为Maven,点击确定;
在这里插入图片描述

之后,填写任务描述;
在这里插入图片描述

之后,配置丢弃旧的构建参数;
在这里插入图片描述
之后,配置源码管理中git参数;
在这里插入图片描述
之后,配置Maven编译参数;

在这里插入图片描述

之后,配置要执行的shell脚本;
在这里插入图片描述

最后,点击应用保存按钮,完成任务创建。

七、执行项目的Jenkins任务,实现自动化部署

Jenkins任务创建完成后,下面可以使用Jenkins的自动构建功能,执行自动化发布任务。

选择要发布的任务,点击立即构建。

在这里插入图片描述

之后,查看控制台输出信息;
在这里插入图片描述

最后,如果控制台输出Success字样,说明自动构建成功,发布任务完成了。
在这里插入图片描述

八、总结

以上介绍了如何通过Jenkins配置后端工程进行自动化部署。关于Jenkins自动化部署,在实际的项目中,一般会涉及到多个节点服务器、服务高可用等等情况,需要对shell脚本进一步做优化处理。


http://www.ppmy.cn/embedded/19084.html

相关文章

时间序列预测:基于PyTorch框架的循环神经网络(RNN)实现销量预测

之前随手一写,没想到做预测的同学还挺多,但是之前那个效果并不好,于是在之前的基础上重新修改完善,到了现在这一步才感觉预测算是初步能应用。 上文地址:LSTM模型预测时间序列:根据历史销量数据预测商品未…

微服务项目实战-黑马头条(八):App端-文章ES搜索、MongoDB搜索记录和关键词联想

文章目录 一、今日内容介绍1.1 App端搜索-效果图1.2 今日内容 二、搭建ElasticSearch环境2.1 拉取镜像2.2 创建容器2.3 配置中文分词器 ik2.4 使用postman测试 三、app端文章搜索3.1 需求分析3.2 思路分析3.3 创建索引和映射3.4 数据初始化到索引库3.4.1 导入es-init到heima-le…

SAP Fiori开发中的JavaScript基础知识17 - 用JavaScript生成斐波那契(Fibonacci)数列

1. 什么是斐波那契(Fibonacci)数列 Fibonacci数列是一个无限序列,起始于0和1,后续的每个数字都是前两个数字的和。数列的前几个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … 数列中的每个数字称为Fibonacci数。数列的定义可以用递归方式表示…

施耐德 Unity Pro 编程软件导入导出变量

适用范围 施耐德中高端PLC,使用的编程软件为 UnityPro (最新版更名为 Ecostructure Control Expert) 中端 PLC:Premium,M340高端 PLC:Quantum,M580 导出/导入变量 导出变量可导出【变量和 FB…

Django 学习 笔记

Django 一、模型models 继承django.db.models.Model 1.模型字段 / 模型字段选项参考: 官网:https://docs.djangoproject.com/zh-hans/3.2/ref/models/fields/#common-model-field-options 2.模型Meta选项(定义模型类的属性): csdn: https:/…

【OceanBase诊断调优】—— 4013 内存爆问题的排查

本文介绍 4013 内存爆问题的排查。 内存爆的类型 内存爆主要分为五类,可以通过关键词 OOPS 确定内存爆的类型。 内存爆的类型日志信息(关键字为 [OOPS])SINGLE_ALLOC_SIZE_OVERFLOWsingle alloc size large than 4G is not allowed(alloc_…

OpenHarmony语言基础类库【@ohos.util.HashSet (非线性容器HashSet)】

HashSet基于[HashMap]实现。在HashSet中,只对value对象进行处理。 HashSet和[TreeSet]相比,HashSet中的数据无序存放,即存放元素的顺序和取出的顺序不一致,而TreeSet是有序存放。它们集合中的元素都不允许重复,但Hash…

JAVA基础之并发编程02-Synchronized

同步器的意义 多线程编程中,可能会出现多个线程同时访问同一个共享、可变资源,这个资源我们称之为临界资源;这种资源可能是:对象、变量、文件等 共享:资源可以被多个线程同时访问。可变:资源可以在生命周…

程序员学CFA——数量分析方法(四)

数量分析方法(四) 常见概率分布基本概念离散型随机变量与连续型随机变量离散型随机变量连续型随机变量 分布函数概率密度函数(PDF)累积分布函数(CDF) 离散分布离散均匀分布伯努利分布二项分布定义股价二叉树…

Beego框架学习流程方法

学习Beego框架的流程和方法可以大致分为以下几个步骤: 了解框架基础知识: 初步了解Beego框架的特性和优势,比如其模块化设计、高性能、以及采用Go语言的一些特性(接口、结构体嵌入等)。熟悉MVC(Model-View-…

基于MLP算法实现交通流量预测(Pytorch版)

在海量的城市数据中,交通流量数据无疑是揭示城市运行脉络、洞察出行规律的关键要素之一。实时且精准的交通流量预测不仅能为交通规划者提供科学决策依据,助力提升道路使用效率、缓解交通拥堵,还能为公众出行提供参考,实现个性化导…

【架构】Elasticsearch+Logstash+Kibana架构

目录 什么是ELK ELK架构的应用场景 什么是ELK ELK是由Elasticsearch、Logstash和Kibana三个开源项目组成的技术栈,广泛用于搜索、日志管理和日志分析。这三个组件协同工作,提供了一个强大的方法来收集、存储、搜索和可视化日志数据和其他时间序列数据…

【STM32+HAL+Proteus】系列学习教程4---GPIO输入模式(独立按键)

实现目标 1、掌握GPIO 输入模式控制 2、学会STM32CubeMX配置GPIO的输入模式 3、具体目标:1、按键K1按下,LED1点亮;2、按键K2按下,LED1熄灭;2、按键K3按下,LED2状态取反; 一、STM32 GPIO 输入…

侯毅张勇收购盒马传闻不实;英伟达大跌10%;用于Llama3训练的高质量数据集首次公开!

一、商业圈 1.网传侯毅、张勇要20亿美元联手收购盒马,知情人士:消息不实 4月21日,有报道称,盒马创始人侯毅和阿里巴巴前CEO张勇有意联手竞购盒马,出价20亿美元。从接近侯毅方面的知情人士处得知,该消息不…

(学习日记)2024.04.20:UCOSIII第四十八节:各文件功能概览

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

微信小程序:12.页面导航

什么是页面导航 页面导航指的是页面之间的相互跳转。例如,浏览器中实现的页面导航的方式有两种: 连接location.href 小程序中实现页面导航的两种方式 声明式导航 在页面上声明一个导航组件 通过点击组件实现页面跳转 导航TabBar页面 是指配置TabB…

.NET高级面试指南专题二十八【模板模式介绍,通过共享对象来最大程度地减少内存使用和提高性能】

模板模式是一种行为设计模式,它定义了一个算法的框架,将算法的具体步骤延迟到子类中实现。模板模式通过将共同的行为封装在一个模板方法中,并允许子类重写特定步骤的行为来实现算法的不同变体。 下面是模板模式的一些优点和缺点: …

因何卓越?追寻混合式部署防火墙的前世今生

历经变迁,防火墙依然是企业网络安全的关键角色。然而,面对日益复杂多变的网络攻击,以及变得无处不在的攻击平面,防火墙的局限性再次显露。如何构建一套灵活、高效、安全的网络防护体系,已成为摆在企业面前的重要课题。…

场景文本检测识别学习 day07(BERT论文精读)

BERT 在CV领域,可以通过训练一个大的CNN模型作为预训练模型,来帮助其他任务提高各自模型的性能,但是在NLP领域,没有这样的模型,而BERT的提出,解决了这个问题BERT和GPT、ELMO的区别: BERT是用来…

JavaScript进阶(十五):JS 垃圾回收机制_vue gc

内存:由可读写单元组成,表示一片可操作空间;管理:人为的去操作一片空间的申请、使用和释放;内存管理:开发者主动申请空间、使用空间、释放空间;管理流程:申请-使用-释放;…