IT技术博客大学习 共学习 共进步

如何在本地打包 StarRocks 发行版

crossoverJie's Blog 2026-06-03 09:03:23 累计浏览 1 次
本机暂存

最近我们在使用 StarRocks 的时候碰到了一些小问题:

而提交的 PR 是有发布流程的,通常需要间隔一段时间才会发布版本,但是我们线上又等着用这些修复,没办法就只有在本地打包了。

好在社区已经考虑到这种场景了,专门为我们提供了打包的镜像。

FE 是 Java 开发的,本地构建还比较容易,而 BE 是基于 cpp 开发的,构建环境比较复杂,在统一的 docker 镜像里构建会省去不少环境搭建流程。

我们先要拉取对应的打包镜像:

1
starrocks/dev-env-ubuntu:3.3.9

根据自己的版本号拉取即可,比如我这里使用的是 3.3.9 的版本。

然后需要根据我使用的 tag 拉取一个我们自己的开发分支,在这个分支上将修复的代码手动合并进来。

然后便可以开始打包了。

1
2
3
4
5
6
7
8
9
10
11
git clone git@github.com:StarRocks/starrocks.git /xx/starrocks

docker run -it -v /xx/starrocks/.m2:/root/.m2 \
-v /xx/starrocks:/root/starrocks \
--name 3.3.9 -d starrocks/dev-env-ubuntu:3.3.9

docker exec -it 3.3.9 bash

cd /root/starrocks/

./build.sh --fe --clean

我们需要将宿主机的代码磁盘挂载到镜像里,这样镜像就会使用我们的源码进行编译构建。

最终会在 /xx/starrocks/output 目录生成我们的目标文件。

替换目标镜像

既然 fe 的各种 jar 包都已经构建出来了,那就可以基于这些 jar 包手动打出 fe 的 image 了。

我们可以参考官方例子,使用 fe-ubuntu.Dockerfile 来构建 FE 的镜像。

1
DOCKER_BUILDKIT=1 docker build --build-arg ARTIFACT_SOURCE=local --build-arg LOCAL_REPO_PATH=. -f fe-ubuntu.Dockerfile -t fe-ubuntu:main ../../..

除此之外还有更简单的方式,也是更加稳妥的方法。

我们可以直接使用官方的镜像作为基础镜像,只替换其中核心的 starrocks-fe.jar

这个 jar 包会在编译的时候构建出来

因为 starrocks-fe.jar 也是通过同样的镜像打包出来的,所以运行起来不会出现兼容性问题(同样的 jdk 版本),而且也能保证原有的镜像没有修改。

1
2
FROM starrocks/fe-ubuntu:3.3.9
COPY starrocks-fe.jar /opt/starrocks/fe/lib/
1
docker build -t fe-ubuntu:3.3.9-fix-{branch} .

这样我们就可以放心的替换线上的镜像了。

参考链接:

建议继续学习

  1. 我的git笔记 (累计阅读 20,161)
  2. Facebook 网站架构 (累计阅读 11,061)
  3. 腾讯php程序员面试题目答案 (累计阅读 8,881)
  4. 分布式系统的事务处理 (累计阅读 7,321)
  5. PHP Extension开发基础 (累计阅读 6,580)
  6. 如何设计用户登录 (累计阅读 6,580)
  7. MySQL 5.6 测试之 Replication(主从复制) (累计阅读 6,201)
  8. 给年轻程序员的几句话 (累计阅读 6,002)
  9. 注释里的诅咒:哪种语言遭受最多的咒骂? (累计阅读 5,580)
  10. 用 redis 实现和保护 12306 (累计阅读 5,542)