極速 Zadig 構建效率是這樣煉成的
Zadig 提供了面向容器執行時環境、大規模微服務的雲原生持續交付方案,被企業和社群廣泛採用。在實際使用中,批量服務接入 ok 了,多套環境拉起完美了,最後卻在構建上遭遇滑鐵盧:一個工作流任務耗時很長才結束,多個工作流任務一直在排隊等待...
這 Zadig 到底該怎麼用,才能讓構建效率最大化?別慌,最佳實踐姿勢和常見排障思路來了。下面我們給出能提升構建效率的系統配置實踐,就 Java/Golang/NodeJS 技術棧給出 demo 示例,並在文末提供一些關於構建效率常見的優化思路。
叢集配置
叢集快取配置
系統管理員訪問 系統設定
-> 叢集管理
,編輯叢集配置,快取資源使用叢集 PVC 儲存。系統還支援對不同的專案/工作流/服務元件實現獨享快取,可參考 快取配置 | Zadig 文件。
經測試,相比物件儲存快取,使用叢集 PVC 快取平均可提升構建效率 40%+。
Dind 配置
在叢集管理裡修改 Dind 資源配置,按需調整 Dind 副本數和資源規格,並使用叢集儲存資源作為映象快取。
- 設定 Dind 多副本後,同一個服務的構建任務會被儘可能排程到同一個 Dind 例項,不同服務的構建任務會被儘可能打散排程到不同的 Dind 例項,避免因單個 Dind 例項承載過多的構建任務而增加失敗概率。
- 使用叢集儲存資源可避免因 Dind 重啟後導致已有快取失效的問題。
構建快取配置
修改構建,開啟快取配置,在自定義目錄中指定需要快取的目錄。下文中也提供了 Java/Golang/NodeJS 技術棧的構建快取配置示例。
工作流配置
編輯工作流,開啟併發執行策略。開啟後,當多個工作流任務先後產生時無需排隊等待即可併發執行,縮短整體執行時間。
工作流任務併發數依賴系統資源的上限,系統管理員可根據實際情況設定,參考:任務併發數。
Demo 示例
下面分別演示 Java、Golang、NodeJS 技術棧中,構建快取具體該如何配置。
Java
以 Maven 構建工具為例,其預設配置檔案位於 ${M2_HOME}/conf/settings.xml
檔案中,可在安裝軟體包時指定 localRepository
來設定快取目錄,並在構建配置中指定。 以 Zadig 內建的 maven 3.3.9
為例說明,安裝時指定 localRepository
為 $WORKSPACE/.m2/repository
。
mkdir -p $HOME/maven
tar -C $HOME/maven -xzf ${FILEPATH} --strip-components=1
# customize .m2 dir
export M2_HOME=$HOME/maven
mkdir -p $WORKSPACE/.m2/repository
cat >$HOME/maven/conf/settings.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>$WORKSPACE/.m2/repository</localRepository>
<pluginGroups/>
<servers/>
<mirrors>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>repo1</name>
<url>http://repo1.maven.org/maven2</url>
</mirror>
</mirrors>
<profiles/>
</settings>
EOF
構建快取配置如下:
Golang
Golang 快取路徑通過 $GOCACHE
環境變數控制,可在構建指令碼中顯式修改。 在應用構建快取配置的自定義目錄中,可以填寫上述配置的 $GOCACHE
路徑。
NodeJS
在構建指令碼中使用 npm install <*> -g --prefix <指定目錄>
,再在高階配置中將目錄快取即可。
優化指南
- 系統按照下載依賴軟體包 -> 拉取程式碼 -> 執行構建指令碼 -> 推送構建映象到映象倉庫的順序來執行構建,每一個環節對於網路的需求因構建配置而異,可根據具體配置確定叢集所在的節點是否存在網路問題。
- 對於執行構建指令碼耗時長的情況,可以在指令碼中每一個步驟執行前後增加時間戳輸出,統計每一步的耗時,找到耗時長的步驟後有的放矢的解決。
- 更多排查思路可閱讀:診斷手冊 | Zadig 文件。
Zadig,讓工程師更專注創造。
歡迎加入 開源吐槽群🔥
- 神奇的 Zadig 工作流:以連結廣大開發者為使命
- 資料庫/SQL 版本管理工具選型指北
- 如何實現 MySQL 程式碼和資料的一站式變更
- Zadig 跨團隊之最佳使用姿勢:搞定開發、測試、運維協作自動化
- 基於 Zadig 的 GitOps 實踐
- 極速 Zadig 構建效率是這樣煉成的
- 主機基礎設施如何使用 Zadig 做持續交付
- Zadig 環境負載均衡:0 人工干預,極速部署
- 打通了!Jira Zadig 實現需求與研發過程追蹤
- 雲原生 DevOps 現狀調研問卷徵集:KodeRover 聯合 OSCHINA 推出
- Zadig v1.13.0 相信開放的力量,工作流連通一切價值
- 飛書影片會議端到端整合測試工程實踐經驗總結 - Zadig 應用案例
- 在解決了 2961 個使用者反饋後,我做出了這樣的改變...
- 基於 Ingress Controller 在叢集外訪問 Zadig 自測環境(最佳實踐)
- iMile 利用 Zadig 多雲環境周部署千次,跨雲跨地域持續交付全球業務
- 穩!上千微服務接入 Zadig 的最佳姿勢(Helm Chart 篇)
- 穩!上千微服務接入 Zadig 的最佳姿勢(K8s YAML 篇)
- Zadig 洞態 IAST:讓安全溶於持續交付
- TT 語音落地 Zadig:開源共創 Helm 接入場景,環境治理搞得定!
- 00後雲工程師用 Zadig 為企業研發開源節流