如何在本地打包 StarRocks 發(fā)行版
最近我們?cè)谑褂?StarRocks 的時(shí)候碰到了一些小問題:
? 重啟物化視圖的時(shí)候會(huì)導(dǎo)致視圖全量刷新,大量消耗資源。
修復(fù) PR:https://github.com/StarRocks/starrocks/pull/57371
? excluded_refresh_tables 參數(shù)與 MV 不在一個(gè)數(shù)據(jù)庫的時(shí)候,無法生效。
修復(fù) PR:https://github.com/StarRocks/starrocks/pull/58752
而提交的 PR 是有發(fā)布流程的,通常需要間隔一段時(shí)間才會(huì)發(fā)布版本,但是我們線上又等著用這些修復(fù),沒辦法就只有在本地打包了。
好在社區(qū)已經(jīng)考慮到這種場(chǎng)景了,專門為我們提供了打包的鏡像。
FE 是 Java 開發(fā)的,本地構(gòu)建還比較容易,而 BE 是基于 cpp 開發(fā)的,構(gòu)建環(huán)境比較復(fù)雜,在統(tǒng)一的 docker 鏡像里構(gòu)建會(huì)省去不少環(huán)境搭建流程。
我們先要拉取對(duì)應(yīng)的打包鏡像:
starrocks/dev-env-ubuntu:3.3.9
根據(jù)自己的版本號(hào)拉取即可,比如我這里使用的是 3.3.9 的版本。
然后需要根據(jù)我使用的 tag 拉取一個(gè)我們自己的開發(fā)分支,在這個(gè)分支上將修復(fù)的代碼手動(dòng)合并進(jìn)來。
然后便可以開始打包了。
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
我們需要將宿主機(jī)的代碼磁盤掛載到鏡像里,這樣鏡像就會(huì)使用我們的源碼進(jìn)行編譯構(gòu)建。
最終會(huì)在 /xx/starrocks/output
目錄生成我們的目標(biāo)文件。
替換目標(biāo)鏡像
既然 fe 的各種 jar 包都已經(jīng)構(gòu)建出來了,那就可以基于這些 jar 包手動(dòng)打出 fe 的 image 了。
我們可以參考官方例子,使用 fe-ubuntu.Dockerfile
來構(gòu)建 FE 的鏡像。
DOCKER_BUILDKIT=1 docker build --build-arg ARTIFACT_SOURCE=local --build-arg LOCAL_REPO_PATH=. -f fe-ubuntu.Dockerfile -t fe-ubuntu:main ../../..
除此之外還有更簡(jiǎn)單的方式,也是更加穩(wěn)妥的方法。
我們可以直接使用官方的鏡像作為基礎(chǔ)鏡像,只替換其中核心的 starrocks-fe.jar
。
這個(gè) jar 包會(huì)在編譯的時(shí)候構(gòu)建出來
因?yàn)?nbsp;starrocks-fe.jar
也是通過同樣的鏡像打包出來的,所以運(yùn)行起來不會(huì)出現(xiàn)兼容性問題(同樣的 jdk 版本),而且也能保證原有的鏡像沒有修改。
FROM starrocks/fe-ubuntu:3.3.9
COPY starrocks-fe.jar /opt/starrocks/fe/lib/
docker build -t fe-ubuntu:3.3.9-fix-{branch} .
這樣我們就可以放心的替換線上的鏡像了。
參考鏈接:
? https://docs.starrocks.io/zh/docs/developers/build-starrocks/Build_in_docker/
?https://github.com/StarRocks/starrocks/blob/759a838ae15b91056233f180aedc88da67a84937/docker/dockerfiles/fe/README.md#L15