可重复构建(reproducible builds)是一组软件开发实践,如果给定相同的源代码、构建环境和构建指令,任何一方都可以bit-by-bit重新构建出相同副本,则构建是可重复的。本文将探讨可重复构建的重要性,以及在maven项目中如何实现这一目标。

为什么需要可重复构建?

不知道你有没有发现,你的java工程在没有修改代码的情况下,两次构建出来的jar/war包md5值是不一样的。为什么会出现这种情况呢?jar包其实是一个zip压缩包,当你解包两次构建查看其中的差异时,你会发现最明显的区别就是文件夹的时间不一样了:

截屏2024-05-30 19.58.28.png

除了时间不一样以外,还有元数据等等,具体要解决的问题,在apache官网有个提案,记录了可重复构建需要解决的问题。

- 阅读剩余部分 -

KT-Connect 是一个用于 Kubernetes 环境下的网络代理工具,旨在简化开发和测试过程中对 Kubernetes 集群内服务的访问。它通过创建一个或多个代理,使得本地开发环境可以直接与 Kubernetes 集群内的服务进行通信,而无需复杂的端口映射或修改服务配置。这种方式有助于开发者在本地开发、调试容器化应用时,如同直接操作本地服务一样便捷。

KT-Connect 的主要功能和特点包括:

  1. 零配置代理:用户无需手动配置端口映射或修改服务定义,就能将集群内服务的流量透明地转发到本地开发环境。
  2. 双向通信:不仅支持从本地到集群的服务请求,也支持集群内服务调用本地服务,实现了真正的双向通信。
  3. 环境隔离:通过为每个开发者创建独立的命名空间或环境,保持开发环境的隔离性,避免开发间互相干扰。
  4. 服务模拟:允许开发者模拟集群内的服务,便于在没有依赖服务就绪的情况下进行开发和测试。
  5. 一键式操作:提供命令行工具,使得启动、停止代理、查看状态等操作变得简单快捷。
  6. 安全接入:通过 TLS 加密和其他安全机制确保通信的安全性,保护集群资源不被非法访问。

使用 KT-Connect 可以显著提升 Kubernetes 应用的开发效率,尤其是对于需要频繁调试、集成测试的场景,它提供了一个灵活且高效的本地开发解决方案。

KT-Connect实践

要想运行KT-Connect,需要确保两个镜像能在你的Kubernetes集群中正常拉取:

  • registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-router:v0.3.7
  • registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:v0.3.7

如果你的网络受限,不能拉取以上镜像,需要你提前将镜像导入到每个Kubernetes节点。

- 阅读剩余部分 -

SkyWalking简介

Apache SkyWalking是一款开源的观测性能平台,专为分布式系统设计,提供了全面的应用性能监控(APM)、服务网格观测、以及分布式追踪等功能。它帮助开发者和运维人员深入洞察应用的性能状况,快速定位问题根源,从而提升系统的稳定性和效率。SkyWalking的核心组件包括OAP服务器(Observability Analysis Platform)和UI界面,两者协同工作,为用户提供强大的可视化监控能力。

SkyWalking-UI简介

SkyWalking-UI是SkyWalking的可视化界面,它负责展示从OAP服务器收集来的监控数据,包括服务拓扑图、追踪详情、性能指标、告警信息等。通过SkyWalking-UI,用户可以直观地了解系统的健康状况,进行性能分析,以及配置监控规则。UI的设计旨在易于使用,同时支持高度定制化,以满足不同场景下的监控需求。

定制UI访问路径并重新编译

在某些场景下,用户可能需要将SkyWalking-UI的访问路径固定为特定的URL前缀,例如/skywalking-ui,以便更好地融入现有系统架构或便于管理。要实现这一需求,需要对SkyWalking-UI源码进行适当修改并编译。以下是一个简化的编译与配置步骤指南,适用于具有Java和Maven环境的用户。

准备工作

首先你得有JDK、Maven,版本要求参考官网

拉取代码

git clone --recurse-submodules https://github.com/apache/skywalking.git
cd skywalking/
git checkout v9.7.0 # 根据你的需求切换版本

- 阅读剩余部分 -

CentOS 7 生命周期在2024年6月30日结束,官方不再为 CentOS7 提供任何的技术支持和软件更新服务。

常见 RHEL 系列的操作系统有:

  • Red Hat Enterprise Linux(RHEL)
  • CentOS
  • CentOS Stream
  • Rocky Linux
  • AlmaLinux

几者的关系:

  • rpm 包通用。
  • 命令通用。
  • CentOS 是 CentOS 社区重新编译 Red Hat 源代码生成的免费版本。
  • CentOS Stream 是 CentOS 滚动升级的版本,由 CentOS 官方提供。
  • Rocky Linux 和 AlmaLinux 都是基于 RHEL 源代码和二进制文件的克隆版本。

AlmaLinux 官网有一张对比表:

Benchmarking against RHELAlmaLinuxOracle LinuxRocky LinuxCentOS StreamCentOS Linux
Production VersionSince March 2021Since 2006Since June 2021Since 2019Since 2004
RHEL compatibilityBinary CompatibleABI Compatible?Binary compatibleCompatible within the limits of the ACGBinary Compatible
Regular updates delayAbout 1 business dayAbout 1 business dayAbout 1 business dayUpstream of RHELAbout 1 business day
Last minor version release delay1 day7 days5 daysN/AN/A
ErrataYesYesYesNoNo
Lifecycle10 Years10 Years10 Years5-6 YearsEOL on 2021-12-31
Commercial support3rd partyOracle, 3rd parties3rd Party3rd party3rd party
Livepatching serviceKernelCareOracle Ksplice, KernelCare AvailableKernelCare AvailableNot availableKernelCare, Kpatch
FIPS complianceYesYesPlannedNot availableNot available
ARM supportYesYesYesYesYes
IBM PowerPC supportYesNoYes (versions ≥ 9)YesYes
IBM Z (s390x) supportYesNoYes (versions ≥ 9)NoNo
SecureBootYesYesYesYesYes
Owned By:AlmaLinux OS FoundationOracle IncRocky Enterprise Software FoundationRed Hat IncRed Hat Inc
Owned by org type:Non-Profit 501(c)6For Profit C-CorpFor Profit, Public Benefit CorpFor Profit C-CorpFor Profit C-Corp

- 阅读剩余部分 -

HBuilderX 目前仅支持 Windows 和 macOS,这给发布流水线造成不小的阻碍,我们最初的做法是在一台 Windows 上安装 HBuilderX、Jenkins(下文称之为HXJenkins),HXJenkins 使用 HBuilder cli 命令行打包,主 Jenkins 调用 HXJenkins API 进行构建。我们实践之后,发现不少问题:

  • HXJenkins 打包 h5,我们要制作成容器镜像,打包后的 dist 需要回传给 Linux 服务器,Linux 服务器再制作容器镜像。流程非常复杂,还需要考虑文件如何回传等问题;
  • HBuilder cli 时不时会出现打不开项目的问题,需要重启 HBuilderX
  • 有时打包会特别的慢,且容易报错
  • 主 Jenkins 调用 HXJenkins API 进行构建,HXJenkins 构建报错上游无法知道,增加心智负担
  • ……

我们希望能实现基于容器的 uniapp 打包方案,经过在 DCloud 官网及搜索一番了解后,主要的方案有两个:

  1. HBuilderX 项目转为 vue cli 项目
  2. 底层都是 node,HBuilderX 只是把操作封装罢了,因此研究 HBuilderX 的打包原理,通过一些技术手段分析 HBuilderX 最终是执行的什么命令来打包的

方案一相对简单,也是本文所探讨的方案,但是可能在你的项目上实践不会轻而易举就能成功,一般会在依赖包以及依赖包的版本上会踩坑。

方案二相对复杂,但是通用性应该更好,方案二已经有大佬写了博客以及在 github 上维护了源码,有兴趣的读者请参考 漫谈Uniapp App热更新包-Jenkins CI/CD打包工具链的搭建_uniapp jenkins-CSDN博客

- 阅读剩余部分 -