CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
- CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
- 安装
- Docker
- GitLab
- GitLab-Runner
- 阿里云容器仓库
- GitLab-CI
- Java微服务的GitLab-CI应用
CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
日常开发中,每次代码编写完成后,都需要手动打包,并且上传服务器,无论本地打包的时间或者上传文件到服务器都需要花费大量的时间来完成,都是重复的并且毫无意义,应该将时间花费在更有价值的时间上;所以编写这篇文章,将自己收集、搭建、测试的步骤或经验汇总一下,也欢迎大家提出或一起讨论更好的解决方案。
前置技能:
- Shell简单脚本编写(此项满足则说明了解并能够使用Linux)
- Docker
- Git
- Java(可选,既然看了这篇文章,这个会的吧,不过无论自动化部署什么,原理都是相通的)
安装
因为都是本地测试,采用Docker容器来进行快速安装,减少部署所花费的时间,并且大部分之前都有写过对应的安装文章,这里就不重复粘贴了。
Docker
Docker离线安装
GitLab
Docker GitLab安装
GitLab-Runner
Docker GitLab-Runner安装
阿里云容器仓库
(未使用跳过),原本打算使用Harbor镜像私服仓库或者阿里云容器仓库,发现可以省略此步骤,将打包好的docker镜像直接通过宿主机运行(需要Runner配置docker in docker)。
GitLab-CI
进入到CI/CD的核心,语法部分,都是死的,这里推荐一篇文章,原本是b站的视频,发现有对应文章就直接浏览了一遍文章再进行测试,文章链接。
Java微服务的GitLab-CI应用
- 拉取
gitlab-ci
模版仓库,并上传到自己的gitlab上(注意CI/CD引入模版的代码仓库需要此仓库权限)
gitlab-ci模版仓库(develop分支):https://github.com/zsl0/devops-ci-template.git
- Java仓库项目目录下创建.gitlab-ci.yml文件
简化版本,能够满足代码提交后自动docker运行,注意需要根据需要运行的辅助配置stage为deploy的job任务,如下面配置的gateway
和admin
服务器自动化部署,需要配置variables
的三个变量IMAGE_NAME
、MODULE_PATH
、JAR_NAME
,分别对应服务名、服务模块相对路径、打包后的jar包名称。
项目相对路径:
.gitlab-ci.yml配置:
include:- project: 'zsl0/devops-ci-template'ref: developfile: 'templates/default-pipeline.yml'variables:## 全局配置GIT_CLONE_PATH: ${CI_BUILDS_DIR}/builds/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_PIPELINE_ID}GIT_CHECKOUT: "false"CACHE_DIR: "**/target/**.jar"## 作业控制RUN_PIPELINE_BUILD: "yes" #是否运行构建 yes/noRUN_PIPELINE_TEST: "no" #是否运行测试 yes/noRUN_CODE_ANALYSIS: "no" #是否代码扫描 yes/noRUN_BUILD_IMAGE: "no" #是否生成镜像 yes/noRUN_DEPLOY_ARTIFACTS: "no" #是否上传制品 yes/noRUN_DEPLOY_K8S: "no" #是否发布K8S yes/noRUN_DEPLOY_DOCKER: "yes" #是否发布DOCKER yes/no## 依赖容器镜像BUILD_IMAGE: "registry.cn-hangzhou.aliyuncs.com/zsl0/maven-build:0.0.2"CURL_IMAGE: "curlimages/curl:7.70.0"SONAR_IMAGE: "sonarsource/sonar-scanner-cli:latest"KUBECTL_IMAGE: "lucj/kubectl:1.17.2"## 构建测试参数MAVEN_OPTS: "-Dmaven.repo.local=/home/gitlab-runner/ci-build-cache/maven " #maven构建参数
# BUILD_SHELL: 'mvn clean package -DskipTests -P zsl0-prod' #构建命令BUILD_SHELL: 'mvn clean package -DskipTests -P hxkj-dev' #构建命令#GRADLE_OPTS: "" #gradle构建参数## 单元测试参数TEST_SHELL : 'mvn test ' #测试命令JUNIT_REPORT_PATH: 'target/surefire-reports/TEST-*.xml' #单元测试报告 #项目扫描参数## 构建镜像#CI_REGISTRY: 'registry.cn-beijing.aliyuncs.com' #镜像仓库地址#CI_REGISTRY_USER: '610556220zy' #仓库用户信息#CI_REGISTRY_PASSWD: 'xxxxxxxx.' #仓库用户密码IMAGE_NAME: "${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" #镜像名称DOCKER_FILE_PATH: "./Dockerfile" #Dockerfile位置## 上传制品库(artifactory)#ARTIFACTORY_URL: "http://192.168.1.200:30082/artifactory" #制品库地址#ARTIFACTORY_NAME: "${CI_PROJECT_NAMESPACE}" #制品库名称#ARTIFACT_PACKAGE: "jar" #制品类型#ARTIFACT_PATH: "target/*.${ARTIFACT_PACKAGE}" #制品位置#TARGET_FILE_PATH: "${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" #目标制品位置(目录结构)#TARGET_ARTIFACT_NAME: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}.${ARTIFACT_PACKAGE}" #目标制品名称## 部署应用k8sAPP_NAME: "$CI_PROJECT_NAME" #应用名称 <-->deploymentNameCONTAINER_PORT: "8081" #服务端口 <--> servicesPortNAMESPACE: "$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG" #名称空间ENV_URL: "${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com" #IngressHostscache:paths:# 后续修改解决mvn打包repository缓存问题,需要根据路径设置本地仓库路径- /root/.m2/repository- /opt/repository- ~/.m2/repository- ${CACHE_DIR}## 构建作业
build:# 指定Runner,不指定默认使用共享Runnertags:- runner-java## 部署
## gateway Docker自动化部署
deploy-gateway:stage: deployimage: docker:latesttags:- runner-javaextends: .deploy_dockervariables:# 镜像名称,默认使用服务名IMAGE_NAME: "gateway"# 模块路径MODULE_PATH: "data-center/gateway/"# jar包名称JAR_NAME: gateway.jar## gateway Docker自动化部署
deploy-admin-server:stage: deployimage: docker:latesttags:- runner-javaextends: .deploy_dockervariables:# 镜像名称,默认使用服务名IMAGE_NAME: "admin-server"# 模块路径MODULE_PATH: "data-center/admin/admin-server/"# jar包名称JAR_NAME: admin-server.jar
- 创建Dockerfile_template模版
FROM openjdk:11MAINTAINER 249269610@qq.comWORKDIR /opt/jarRUN mkdir -p /opt/shell/
#ADD /zsl0/shell/ /opt/shell/RUN mkdir -p /opt/jar/
ADD MODULE_PATH/target/JAR_NAME /opt/jar/java-program.jarENTRYPOINT ["java", "-jar"]
CMD ["java-program.jar"]
相关文章:

CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集 CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集安装DockerGitLabGitLab-Runner阿里云容器仓库 GitLab-CIJava微服务的GitLab-CI应用 CI/CD:GitLab-CI 自动化集成/部署 JAVA微服…...

Flask 上传文件,requests通过接口上传文件
这是一个使用 Flask 框架实现文件上传功能的示例代码。该代码定义了两个路由: /upload:处理文件上传请求。在该路由中,我们首先从请求中获取上传的文件,然后将文件保存到本地磁盘上,并返回一个字符串表示上传成功。 /…...

kvm webvirtcloud 如何添加直通物理机的 USB 启动U盘
第一步:查看USB设备ID 在物理机上输入 lsusb 命令 rootubuntu:/media/usb1# lsusb Bus 002 Device 002: ID 0781:5581 SanDisk Corp. Ultra Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 0424:2514 Microchip Technolo…...
html- a标签包裹img标签, 点击图片无法跳转问题记录及解决方法
html- a标签包裹img标签, 点击图片无法跳转问题记录及解决方法 首先明确我们的目标, 就是a标签包裹的内容, 都能点击后以后直接跳转 可以通过更改html结构和css解决: <div v-for"(item, index) in newsData" :key"index" class"flexcol">&…...
Halcon转OpenCV实例--保险丝颜色识别(附源码)
导 读 本文主要介绍Halcon转OpenCV实例--保险丝颜色识别(附源码)。 实例来源 实例来源于Halcon例程color_fuses.hdev--classify fuses by color 下面是Halcon实例代码和实现效果: * color_fuses.hdev: classify fuses by colordev_update_window (off)* ***** step: set up …...

制造业中的微小缺陷检测——应用场景分析与算法选择(YoloV8/CANet)
一、缺陷检测任务 缺陷检测的任务通常可以分为三个主要阶段,包括缺陷分类、缺陷定位和缺陷分割。 1.缺陷分类 缺陷分类是检测过程的第一步,目的是将检测到的缺陷区域分类为不同的类别,通常是根据缺陷的性质或类型进行分类。分类的类别包括…...

支持多校 微信课表小程序源码 排课小程序源码 支持导入课表 情侣课表 背景设置
练手Lab课程表小程序源码是一个基于thinkphp系统进行开发的前后端分离系统。 源码功能介绍 1、情侣功能 2、情侣间留言 3、情侣间互相设置课程表背景 4、自己日、周课程表背景设置 5、教务系统课程表导入 6、导入别人分享的课表 7、导入别人分享的单课 8、多校支持 9…...

谷歌计划从Chrome119起测试IP隐私保护功能
目前,谷歌正为Chrome浏览器测试一项新的“IP保护”功能。因为该公司认为用户IP地址一旦被黑客滥用或秘密跟踪,都可能导致用户隐私信息泄露。 而这项功能可通过代理服务器屏蔽用户的IP地址,以增强用户的隐私性,这样就可以尽量在确…...

【技能树笔记】网络篇——练习题解析(九)
目录 前言 一、OSPF双栈 1.1 OSPFv3 LSA 1.2 OSPFv3 二、ISIS双栈 2.1 ISISv6 2.2 ISIS高级特性 三、BGP双栈 四、PIM双栈 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filot…...

c++ qt连接操作sqlite
qt客户端编程,用到数据库的场景不多,但是部分项目还是需要数据库来保存同步数据,客户端用到的数据库,一般是sqlite。 Qt提供了数据库模块,但是qt本身的数据库模块并不好用,会有各种问题, 建议大家不要,可以自己封装数据库的操作。本篇博客介绍qt连接操作sqlite。 sqlit…...

Qt之自定义QStringListModel设置背景色和前景色
一.效果 二.实现 QStringListModel里只实现了Qt::EditRole和Qt::DisplayRole,不能直接设置背景色和前景色,所以我们要继承QStringListModel,重写其中的data和setData方法,使其支持Qt::ForegroundRole和Qt::BackgroundRole。 QHStringListModel.h #ifndef QHSTRINGLISTMO…...

人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040
线性和回归,就是自然规律,比如人类是身高趋于某个值的概率最大,回归就是通过数学方法找到事物的规律. 机器学习作用: 该专业实际应用于机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜索、定理证明、博弈、自动程序设计、智能控制…...
Linux 错误处理(字符设备基础三)
在Linux字符设备驱动中,即使是最简单的注册字符设备,也存在注册失败的可能性,因此在之前编写的驱动代码中采用检查函数返回值的方式,确认函数是否成功执行 一、goto 语句 在编写驱动程序时,驱动程序应该提供函数执行失…...

STM32 PWM配置及呼吸灯
PWM的英文全称是"Pulse Width Modulation",中文翻译为"脉冲宽度调制"。 在PWM中可以调节的其实只有两个东西,一个叫做可调周期(调频率),另一个叫做占空比(高电平/周期)。 而…...

华为云 CodeArts Snap 智能编程助手 PyCharm 插件安装与使用指南
1 插件安装下载 1.1 搜索插件 打开 PyCharm,选择 File,点击 Settings。 选择 Plugins,点击 Marketplace,并在搜索框中输入 Huawei Cloud CodeArts Snap。 1.2 安装插件 如上图所示,点击 Install 按钮安装 Huawei Cl…...

SpringSecurity分布式安全框架
Spring Security是一个基于Spring框架的安全框架,它提供了全面的安全解决方案,包括用户认证和用户授权等Web应用安全性问题。Spring Security可以轻松扩展以满足自定义需求,它的真正强大之处在于它可以轻松扩展以满足自定义要求。 对于分布式…...

高速下载b站视频的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Qt之彻底解决QSpinBox限定范围无效的问题
QSpinBox有个比较啃爹的问题,不管取值范围设置为多少,都能一直输入0,如下图所示: 当取值范围包含负数时,负号后也可以一直输入0,如下图所示: 还有就是当取值范围设置为10以上时,比如10~100,却可以输入1~9 虽然上述非法输入最终都未生效,当QSpinBox失去焦点时会显示为…...
Ktor vs Spring Boot:哪个框架能帮助你构建更高性能的 Web 应用?
文章首发地址 Ktor 和 Spring Boot 是两个在 Kotlin Web 开发中常用的框架,它们有一些共同点,也有一些区别。 共同点: 都支持 Kotlin:Ktor 和 Spring Boot 都能够完全支持 Kotlin 语言,这使得开发者可以使用 Kotlin …...

【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)
LivoxHIKROBOT联合标定 引言1 海康机器人HIKROBOT SDK二次开发并封装ROS1.1 介绍1.2 安装MVS SDK1.3 封装ROS packge 2 览沃Livox SDK二次开发并封装ROS3 相机雷达联合标定3.1 环境配置3.1.1 安装依赖——PCL 安装3.1.2 安装依赖——Eigen 安装3.1.3 安装依赖——Ceres-solver …...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...