当前位置: 首页 > article >正文

GITLIbCICD流水线搭建

1,搭建gitLIb服务器,创建gitlibRunner  并且注册,

2. 写dockerfile  包块java程序运行的环境,jdk,参数等 ,

2.1ai生成版本,

	# 基础镜像(JDK 17)FROM eclipse-temurin:17-jdk-alpine# 设置工作目录WORKDIR /app# 复制Maven配置(可选)COPY .m2/settings.xml /root/.m2/# 复制项目文件COPY pom.xml .COPY src/ src/# 构建应用(跳过测试)RUN mvn -B -DskipTests clean package# 使用JRE运行时镜像FROM eclipse-temurin:17-jre-alpine# 复制构建好的应用COPY target/*.jar app.jar# 配置端口EXPOSE 8080# 定义启动命令ENTRYPOINT ["java","-jar","app.jar"]

2.2实战版本  这里还不完全,实战中应该dockerfile中还应该写日志挂载等目录同步到服务器上,

# 使用更小的基础镜像
FROM openjdk:17-jdkWORKDIR /app# 创建自定义java.security(保持原有安全配置)
RUN echo "jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \\" > /app/java.security && \echo "    EC keySize < 224, 3DES_EDE_CBC, anon, NULL" >> /app/java.security# 直接复制CI生成的JAR文件(需确保文件路径正确)
COPY *.jar app.jar# 环境变量配置(保持原有)
ENV JDK_TLS_CLIENT_PROTOCOLS="TLSv1,TLSv1.1,TLSv1.2,TLSv1.3"
ENV HTTPS_PROTOCOLS="TLSv1,TLSv1.1,TLSv1.2,TLSv1.3"
EXPOSE 48080# 合并JAVA_OPTS定义(更清晰)
ENV JAVA_OPTS="-Xms512m -Xmx1024m \-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 \-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 \-Djava.security.properties=/app/java.security"# 使用exec格式启动(保持原有最佳实践)
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]

3.编写.gitlib-ci.yml文件  放置在根目录下 ,

3.1ai生成版本,

	# GitLab CI/CD配置image: eclipse-temurin:17-jdk-alpinestages:- build- test- deployvariables:DOCKER_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHORT_SHA}"DOCKER_COMPOSE_FILE: docker-compose.ymlbefore_script:- echo "$DOCKER_PASSWORD" | docker login "${CI_REGISTRY}" -u "$DOCKER_USER" --password-stdin- mvn -vbuild-job:stage: buildscript:- mvn clean package -DskipTests- docker build -t "${DOCKER_IMAGE}" .artifacts:paths:- target/*.jartest-job:stage: testscript:- mvn testdependencies:- build-jobdocker-push:stage: deployscript:- docker push "${DOCKER_IMAGE}"dependencies:- test-jobdeploy-dev:stage: deployscript:- docker-compose -f "${DOCKER_COMPOSE_FILE}" down- docker-compose -f "${DOCKER_COMPOSE_FILE}" pull- docker-compose -f "${DOCKER_COMPOSE_FILE}" up -donly:- main# 生产环境部署(示例)deploy-prod:stage: deployscript:- ssh -i ~/.ssh/deploy_key "root@production-server" "docker stop spring-app || true"- ssh -i ~/.ssh/deploy_key "root@production-server" "docker rm spring-app || true"- ssh -i ~/.ssh/deploy_key "root@production-server" "docker pull ${DOCKER_IMAGE}"- ssh -i ~/.ssh/deploy_key "root@production-server" "docker run -d --name spring-app -p 8080:8080 ${DOCKER_IMAGE}"only:- mainwhen: manualenvironment:name: productionurl: http://your-production-url.com

3.2实战使用版本,  

stages:- package- build- deployvariables:APP_NAME: "process-app"TARGET_USER: "root"package:stage: packageimage: maven:3.8.5-openjdk-17variables:MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"cache:key: ${CI_JOB_NAME}-mavenpaths:- ./.m2/repository- target/policy: pull-pushbefore_script:- mkdir -p ~/.m2- cp settings.xml ~/.m2/settings.xml  # 强制覆盖script:- mvn -s settings.xml help:effective-settings  # 验证配置生效- mvn -s ~/.m2/settings.xml clean package -DskipTests -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" -Dhttps.protocols="TLSv1,TLSv1.1,TLSv1.2"- mkdir -p target- cp sdn-server/target/*.jar target/- cp sdn-server/Dockerfile .artifacts:paths:- target/*.jar- Dockerfile
#  rules:
#    - if: $CI_COMMIT_BRANCH == "main"docker-build:stage: buildimage: alpine:latestdependencies:- packagebefore_script:# SSH密码认证方式- apk add --no-cache openssh-client sshpass- mkdir -p ~/.ssh- chmod 700 ~/.ssh- ssh-keyscan $TARGET_SERVER >> ~/.ssh/known_hostsscript:# 验证文件存在- ls -lth target/*.jar- cat Dockerfile# 预拉取基础镜像步骤- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "docker pull openjdk:17-jdk || true"- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "docker pull alpine:latest || true"# 停止并删除旧容器- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "docker stop $APP_NAME || true"- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "docker rm $APP_NAME || true"# 删除旧镜像- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "docker rmi $APP_NAME || true"- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "rm -f /opt/app/$APP_NAME || true"# 删除目录- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "rm -rf /opt/app/$APP_NAME/*"# 准备目标服务器目录- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "mkdir -p /opt/app/$APP_NAME"# - ssh $TARGET_USER@$TARGET_SERVER "mkdir -p /opt/app/$APP_NAME"  # 密钥认证时使用# 传输构建文件- sshpass -p "$SSH_PASSWORD" scp -v target/*.jar Dockerfile $TARGET_USER@$TARGET_SERVER:/opt/app/$APP_NAME/# - scp -v target/*.jar Dockerfile $TARGET_USER@$TARGET_SERVER:/opt/app/$APP_NAME/  # 密钥认证时使用# 执行Docker构建(确保在目标服务器安装有Docker)- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "DOCKER_BUILDKIT=1 docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t $APP_NAME ."# - ssh $TARGET_USER@$TARGET_SERVER "cd /opt/app/$APP_NAME && docker build --no-cache --memory=3g -t $APP_NAME ."  # 密钥认证时使用
#  rules:
#    - if: $CI_COMMIT_BRANCH == "main"deploy:stage: deployimage: alpine:latestbefore_script:- apk add --no-cache openssh-client sshpass- mkdir -p ~/.ssh- chmod 700 ~/.ssh- ssh-keyscan $TARGET_SERVER >> ~/.ssh/known_hostsscript:# 启动新容器(添加健康检查参数)- sshpass -p "$SSH_PASSWORD" ssh $TARGET_USER@$TARGET_SERVER "docker run -d --name $APP_NAME -p 48080:48080 --memory=3g --restart=unless-stopped $APP_NAME"retry:max: 2when:- runner_system_failure- stuck_or_timeout_failure
#  rules:
#    - if: $CI_COMMIT_BRANCH == "main"

3.4 对应的一些私钥应该配置在 gitlib的变量当中,

如 sshkey私钥等。

相关文章:

GITLIbCICD流水线搭建

1&#xff0c;搭建gitLIb服务器&#xff0c;创建gitlibRunner 并且注册&#xff0c; 2. 写dockerfile 包块java程序运行的环境&#xff0c;jdk&#xff0c;参数等 &#xff0c; 2.1ai生成版本&#xff0c; # 基础镜像&#xff08;JDK 17&#xff09;FROM eclipse-temurin:1…...

详细介绍Qwen3技术报告中提到的模型架构技术

详细介绍Qwen3技术报告中提到的一些主流模型架构技术&#xff0c;并为核心流程配上相关的LaTeX公式。 这些技术都是当前大型语言模型&#xff08;LLM&#xff09;领域为了提升模型性能、训练效率、推理速度或稳定性而采用的关键组件。 1. Grouped Query Attention (GQA) - 分组…...

【慧游鲁博】【8】前后端用户信息管理:用户基本信息在小程序端的持久化与随时获取

文章目录 本次更新整体流程概述1. 用户登录流程前端登录处理 (login.vue)后端登录处理 (AuthServiceImpl.java) 2. 用户信息存储机制前端状态管理 (member.js) 3. 后续请求的身份验证登录拦截器 (LoginInterceptor.java)前端请求携带token 4. 获取用户信息获取用户信息接口 (Us…...

上位机知识篇---keil IDE操作

文章目录 前言文件操作按键新建打开保存保存所有编辑操作按键撤销恢复复制粘贴剪切全选查找书签操作按键添加书签跳转到上一个书签跳转到下一个书签清空所有书签编译操作按键编译当前文件构建目标文件重新构建调试操作按键进入调试模式复位全速运行停止运行单步调试逐行调试跳出…...

Odoo: Owl Hooks 深度解析技术指南

你好&#xff01;作为一名 Odoo 开发者&#xff0c;深入理解其前端框架 Owl.js&#xff0c;尤其是 Hooks&#xff0c;是提升开发效率和代码质量的关键。这份指南将带你从基础概念到高级应用&#xff0c;全面掌握 Odoo 18 中 Owl Hooks 的所有知识点。 1. Hooks 核心概念介绍 什…...

SpringBoot返回xml

默认情况下引入web依赖后自带了JackJson 返回JSON数据 你也可以引入fastJSON 那么方便使用可以用JSON.xxx 如果希望Boot默认返回xml数据 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml<…...

【案例篇】 实现简单SSM工程-后端

简介 本篇文章将带你从0到1的实现一个SSM项目&#xff0c;通过此案例可以让你在项目中对SpringBoot的使用有一个更加详细的认识&#xff0c;希望这个简单的案例能够帮到你。文章内容若存在错误或需改进的地方&#xff0c;欢迎大家指正&#xff01;若对操作有任何疑问欢迎留言&a…...

零基础学习计算机网络编程----网络基本知识

目录 1. 计算机网络发展 1.1 网络发展 1.2 媒介 2 认识协议 2.1 为什么要有协议 2.2 协议的本质 3 网络协议的初识 3.1 什么是协议分层 3.2 为什么会有 4. OSI七层模型 4.1 定义 5. TCP/IP五层(或四层)模型 5.1 有什么 6. 网络传输基本流程 6.1 网络传输流程图…...

Zynq和Microblaze的区别和优势

Zynq芯片包含了一颗双核ARM Cortex-A9处理器&#xff0c;这是一颗“硬”处理器---它是芯片上专用 而且优化过的硅片原件。 MicroBlaze为“软”处理器&#xff0c;它是由可编程逻辑部分的单元组合而成的&#xff0c; 也就是说&#xff0c;一个 软处理器的实现和部署在FPGA的逻…...

FastAPI 支持文件下载

FastAPI 支持文件下载 FastAPI 支持文件上传 Python 获取文件类型 mimetype 文章目录 1. 服务端处理1.1. 下载小文件1.2. 下载大文件&#xff08;yield 支持预览的&#xff09;1.3. 下载大文件&#xff08;bytes&#xff09;1.4. 提供静态文件服务 2. 客户端处理2.1. 普通下载2…...

CNN卷积神经网络到底卷了啥?

参考视频&#xff1a;卷积神经网络&#xff08;CNN&#xff09;到底卷了啥&#xff1f;8分钟带你快速了解&#xff01; 我们知道&#xff1a; 图片是由像素点构成&#xff0c;即最终的成像效果是由背后像素的颜色数值所决定 在Excel中&#xff1a;有这样一个由数值0和1组成的66…...

vue中v-clock指令

基础 v-cloak 是 Vue 中的一个非常实用的指令&#xff0c;用于防止在 Vue 实例尚未挂载完成前&#xff0c;用户看到模板中的插值语法&#xff08;如 {{ message }}&#xff09;一闪而过。 ✅ 场景举例 你在页面还没加载完前&#xff0c;可能会看到这样一瞬间的内容&#xff…...

MIT 6.S081 2020Lab5 lazy page allocation 个人全流程

文章目录 零、写在前面一、Eliminate allocation from sbrk()1.1 说明1.2 实现 二、Lazy allocation2.1 说明2.2 实现 三、Lazytests and Usertests3.1 说明3.2 实现3.2.1 lazytests3.2.2 usertests 零、写在前面 可以阅读下4.6页面错误异常 像应用程序申请内存&#xff0c;内…...

C++初阶-list的使用2

目录 1.std::list::splice的使用 2.std::list::remove和std::list::remove_if的使用 2.1remove_if函数的简单介绍 基本用法 函数原型 使用函数对象作为谓词 使用普通函数作为谓词 注意事项 复杂对象示例 2.2remove与remove_if的简单使用 3.std::list::unique的使用 …...

PHP序列化数据格式详解

PHP序列化数据格式详解 概述 PHP序列化是将PHP变量&#xff08;包括对象&#xff09;转换为可存储或传输的字符串表示形式的过程。了解这些序列化格式对于数据处理、调试和安全性分析非常重要。本文将详细介绍PHP中各种数据类型的序列化表示方式。 基本数据类型序列化格式 …...

如何优化 MySQL 存储过程的性能?

文章目录 1. 优化 SQL 语句避免全表扫描减少子查询&#xff0c;改用 JOIN避免 SELECT 2. 合理使用索引3. 优化存储过程结构减少循环和临时变量避免重复计算 4. 使用临时表和缓存5. 优化事务处理6. 分析和监控性能7. 优化数据库配置8. 避免用户自定义函数&#xff08;UDF&#…...

深度学习:损失函数与激活函数全解析

目录 深度学习中常见的损失函数和激活函数详解引言一、损失函数详解1.1 损失函数的作用与分类1.2 回归任务损失函数1.2.1 均方误差&#xff08;MSE&#xff09;1.2.2 平均绝对误差&#xff08;MAE&#xff09; 1.3 分类任务损失函数1.3.1 交叉熵损失&#xff08;Cross-Entropy&…...

【大前端】Node Js下载文件

NodeJs 获取远程文件有很多方式&#xff0c;常见的方式有以下两种&#xff1a; - fetch&#xff08;原生&#xff09; - axios&#xff08;插件&#xff09; 通过 Fetch 下载文件&#xff0c;代码如下&#xff1a; import fs from node:fsfunction main(){fetch(http://xxx.x…...

自训练NL-SQL模型

使用T5小模型在笔记本上训练 nature language to SQL/自然语言 转SQL 实测通过。 本文介绍了如何在笔记本上使用T5小模型训练自然语言转SQL的任务。主要内容包括:1) 创建Python 3.9环境并安装必要的依赖包;2) 通过Hugging Face镜像下载wikisql数据集和T5-small模型;3) 实现…...

创新点!贝叶斯优化、CNN与LSTM结合,实现更准预测、更快效率、更高性能!

能源与环境领域的时空数据预测面临特征解析与参数调优双重挑战。CNN-LSTM成为突破口&#xff1a;CNN提取空间特征&#xff0c;LSTM捕捉时序依赖&#xff0c;实现时空数据的深度建模。但混合模型超参数&#xff08;如卷积核数、LSTM层数&#xff09;调优复杂&#xff0c;传统方法…...

【Flutter】创建BMI计算器应用并添加依赖和打包

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍创建BMI计算器应用并添加依赖和打包。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…...

【Linux 学习计划】-- 倒计时、进度条小程序

目录 \r 、\n、fflush 倒计时 进度条 进度条进阶版 结语 \r 、\n、fflush 首先我们先来认识这三个东西&#xff0c;这将会是我们接下来两个小程序的重点之一 首先是我们的老演员\n&#xff0c;也就是回车加换行 这里面其实包含了两个操作&#xff0c;一个叫做回车&…...

微服务的应用案例

从“菜市场”到“智慧超市”&#xff1a;一场微服务的变革之旅 曾经&#xff0c;我们的系统像一个熙熙攘攘的传统菜市场。所有功能模块&#xff08;摊贩&#xff09;都挤在一个巨大的单体应用中。用户请求&#xff08;买菜的顾客&#xff09;一多&#xff0c;整个市场就拥堵不堪…...

后端开发概念

1. 后端开发概念解析 1.1. 什么是服务器&#xff0c;后端服务 1.1.1. 服务器 服务器是一种提供服务的计算机系统&#xff0c;它可以接收、处理和响应来自其他计算机系统&#xff08;客户端&#xff09;的请求。服务器主要用于存储、处理和传输数据&#xff0c;以便客户端可以…...

2025网络安全趋势报告 内容摘要

2025 年网络安全在技术、法规、行业等多个维度呈现新趋势。技术上&#xff0c;人工智能、隐私保护技术、区块链、量子安全技术等取得进展&#xff1b;法规方面&#xff0c;数据安全法规进一步细化&#xff1b;行业应用中&#xff0c;物联网、工业控制系统安全升级&#xff0c;供…...

云原生安全基石:深度解析HTTPS协议(从原理到实战)

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念&#xff1a;HTTPS是什么&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是HTTP协议的安全版本&#xff0c…...

Autodl训练Faster-RCNN网络--自己的数据集(一)

参考文章&#xff1a; Autodl服务器中Faster-rcnn(jwyang)复现(一)_autodl faster rcnn-CSDN博客 Autodl服务器中Faster-rcnn(jwyang)训练自己数据集(二)_faster rcnn autodl-CSDN博客 食用指南&#xff1a;先跟着参考文章一进行操作&#xff0c;遇到问题再来看我这里有没有解…...

python打卡day36

复习日 仔细回顾一下神经网络到目前的内容&#xff0c;没跟上进度的补一下进度 作业&#xff1a;对之前的信贷项目&#xff0c;利用神经网络训练下&#xff0c;尝试用到目前的知识点让代码更加规范和美观。探索性作业&#xff08;随意完成&#xff09;&#xff1a;尝试进入nn.M…...

8.Java 8 日期时间处理:从 Date 的崩溃到 LocalDate 的优雅自救​

一、被 Date 逼疯的程序员&#xff1a;那些年踩过的坑​ 还记得刚学 Java 时被Date支配的恐惧吗&#xff1f;​ 想获取 "2023 年 10 月 1 日"&#xff1f;new Date(2023, 9, 1)—— 等等&#xff0c;为什么月份是 9&#xff1f;哦对&#xff0c;Java 的月份从 0 开…...

基于Python的全卷积网络(FCN)实现路径损耗预测

以下是一份详细的基于Python的全卷积网络(FCN)实现路径损耗预测的技术文档。本方案包含理论基础、数据生成、模型构建、训练优化及可视化分析,代码实现约6000字。 基于全卷积网络的无线信道路径损耗预测系统 目录 问题背景与需求分析系统架构设计合成数据生成方法全卷积网络…...