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

三、java项目自动部署流水线搭建

java项目自动部署流水线搭建

背景:希望简化项目的部署发版人为操作,同时运用上新学的k8s方案。希望能帮助到和我一样非运维专业又想简化个人部署发版流程的个人开发者。
方案:云服务器1台+云效(应用交付)+镜像仓库+代码仓库+k3s。

整体流程:代码更新后推送到远程代码仓库(人工) >> 选择代码分支点击部署 (人工) >> 拉取代码编译(自动)>> 构建镜像推送到镜像仓库(自动)>> 在k3s上部署服务(自动) >> 线上项目版本迭代(自动)。

云服务器一台:CPU - 2核 内存 - 2GB 系统盘 - SSD云硬盘 40GB
系统环境:我用的是腾讯云的操作系统OpenCloudOS 9 ,建议centos环境8及以上
部署方式:k8s试过了,配置太低跑不起来,所以用的k3s。自己笔记本也试过了,没公网ip不行,还是得用云服务器,买了个最便宜的。

一、服务器k3s环境准备

  1. 云服务器准备
    云服务器推荐:
    阿里云: 阿里云服务器
    腾讯:腾讯云服务器
    (新人首次购买只要68一年)

系统环境:centos 和 ubuntu 都可以,本文以centos举例。

  1. 安装k3s
    k3s介绍:轻量级k8s。
    输入下方指令进行安装,my-ip替换为自己服务器的公网ip。
# 安装k3s的master节点
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s -  --advertise-address my-ip--node-external-ip my-ip --node-ip my-ip

安装结束后,创建容器源加速文件。

vi /etc/rancher/k3s/registries.yaml 

输入以下内容,保存文件。

mirrors:docker.io:endpoint:- "https://docker.m.daocloud.io"

保存后,输入指令重启k3s。

systemctl daemon-reload 
systemctl restart k3s

输入指令查看k3s集群配置文件,后面需要用到该文件

kubectl config view --raw 

二、镜像仓库准备

我这里用的阿里云免费的
阿里云个人镜像仓库申请地址:https://cr.console.aliyun.com/cn-shenzhen/instances
进来后页面如下:
1
点击个人实例进入,配置下访问凭证(登陆密码),命名空间,镜像仓库。镜像仓库这里就结束了。

在这里插入图片描述

三、云效准备

  1. 云效注册
    云效地址: https://devops.aliyun.com/
    自己注册

  2. 应用交付配置
    进入应用交付功能
    1
    点击资源池,选择导入集群,导入Kubernetes集群 - 通用 K8s,kubeconfig处粘贴之前输出的k3s集群配置文件。将server处的ip地址替换为公网ip。
    1

  3. 应用配置
    点击应用,新建一个应用,然后进入建好的应用。
    1
    选择环境,选一个环境关联刚才创建好的资源。
    1
    点击设置,选择一个流水线模板
    1
    继续下一步,关联你的代码仓库。关联制品仓库,就是之前你创建的镜像仓库,点进去后的公网地址
    1
    其中需要你创建这些连接,其中gitee代码仓库平台的令牌位置我给了个截图示例,至于其他代码仓库平台的自己找下。
    1
    1
    继续下一步,点击编排设置。按标红处添加内容,意思是该项目服务对外暴露的访问端口为:30081。这样发布后就能通过ip:port直接访问到项目。之后保存退出。
    1
    最后一个,研发流程配置,以测试流水线为例。
    1
    先关联代码仓库,然后Maven单元测试这里,安装jdk版本要对上,例如我的版本是17。
    1
    后面也都比较简单,需要的镜像仓库和环境之前都配好了,直接选就行了。最后保存退出。
    1

  4. 应用部署
    最后回到研发流程,点击运行就可以了。这样每次更新完代码就能一键部署了。
    2

四、代码准备

  1. 除了以上步骤,还需要编写个镜像打包文件,之前的研发流程里镜像构建步骤需要用到这个文件。就是这里,空代表该文件在项目根目录下。
    1
  2. 新建一个Dockerfile文件,放到根目录下。
    在1
插入图片描述
    文件如下:意思是拉取jdk17镜像,将jar包拷贝到工作目录下,暴露8081端口,执行java脚本
FROM eclipse-temurin:17
LABEL authors="xfh"
ARG WORKDIR="/app"
ENV WORKDIR_TEST="/app2"
ENV APP_NAME="damai"
ENV LANG=zh_CN.UTF-8
ENV JVM_OPTS="-Xms1024m -Xmx4096m"
ENV SPRING_PROFILES_ACTIVE=pro
RUN mkdir ${WORKDIR}
WORKDIR ${WORKDIR}
COPY ${PROJECT_DIR}/target/*.jar ${WORKDIR}/app.jar
#COPY ./*.jar /${WORKDIR}/app.jar
#COPY ./bin /${WORKDIR}/bin
EXPOSE 8081
ENTRYPOINT ["java", "-jar","app.jar"]
CMD ["${JVM_OPTS}","-Dapp.name=pre","-Dspring.profiles.active=$SPRING_PROFILES_ACTIVE"]

如果中途遇见问题可以评论区一起交流,个人各种踩坑才终于把这些流程跑通,所以熬夜发布这篇文章,希望帮到更多的人。
完结撒花
制作不易,给个赞吧!!!

http://www.lryc.cn/news/576235.html

相关文章:

  • Java--数组
  • 如何使用免费软件写论文?六个免费论文生成软件使用指南
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的目标轨迹预测与防范策略制定(325)
  • Class2基础优化算法
  • 悦己汉服体验馆小程序(协同过滤算法、WebSocket即时聊天)
  • 优化 ArcPy 脚本性能
  • 桌面小屏幕实战课程:DesktopScreen 13 HTTP SERVER
  • 电子电气架构 --- 涵盖“诊断与 ECU 平台”领域特有项目要求(上)
  • 鸿蒙 List 组件解析:从基础列表到高性能界面开发指南
  • 智能制造数字孪生集成交付生态链:智慧产线极速克隆,孪生重构生产周期
  • 什么是 A/B 测试?
  • swift 对象转Json
  • matplotlib 绘制热力图
  • 基于JavaWeb的校园失物招领系统设计与实现
  • 【图像处理入门】12. 综合项目与进阶:超分辨率、医学分割与工业检测
  • SQL学习笔记4
  • 华为云Flexus+DeepSeek征文|高可用部署 Dify 平台构建 Flux 绘画中台 Chatflow 的设计与实现
  • SYSCFG 时钟在 GD32F4 系列微控制器中的作用
  • 【策划所需编程知识】
  • 每日算法刷题Day39 6.26:leetcode前缀和2道题,用时1h20min
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向
  • Spring Boot整合Redis指南
  • C++ 快速回顾(三)
  • PICkit3编程器MCLR引脚全解析
  • vue-27(实践练习:将现有组件重构为使用组合式 API)
  • <script setup> 语法糖
  • Netty入门案例:简单Echo服务器(同步)
  • 预训练语言模型
  • 关于USB模式的一些内容(附USB接口颜色释义图)