簡體   English   中英

kubernetes 上的 Jenkins 動態從站 - 構建時間非常長

[英]Jenkins dynamic slaves on kubernetes - Very high build time

背景 - 將項目從 CircleCI 遷移到 Jenkins。

項目技術——typescript(node.js)

我使用 Jenkins 官方 helm 圖表並利用動態從站的優勢在新出爐的 GKE 集群上部署了 Jenkins。

我面臨的問題是我的一個應用程序,它是一組 4 個微服務,它們作為一個項目一起構建和部署。

由於所有應用程序一起構建和發布,我已經建立了一個 Jenkins 並行構建管道,該管道提取存儲庫並並行構建所有應用程序以節省構建時間(從現有的 CircleCI 設置復制相同的邏輯)。

在 CircleCI 中,構建應用程序通常需要 5 到 7 分鍾,而在 Jenkins 中則需要 20 多分鍾。

我懷疑我有節點上的資源限制並增加到一個非常高規格的節點,然后使用kubectl top pods命令進行監控,我注意到它在整個構建過程中從未達到超過 3 個 CPU。

為了進一步調試,我認為這可能是 IOPS 問題,因為該項目正在提取大量節點模塊,並且我已將節點磁盤更改為 SSD 進行測試,但沒有運氣。

為了進一步調試,我開始為 Jenkins 生成的每個從站配置一個動態 PV,但又沒有運氣了。

我不確定我錯過了什么我檢查了 docker 統計數據,Kubernetes 日志,但一切看起來都很正常。

我正在破壞 docker 這樣的構建(4 個不同的應用程序):

docker build --build-arg NODE_HEAP_SIZE=8096 --build-arg NPM_TOKEN=$NPM_TOKEN -f "test/Dockerfile" -t "test:123"

這就是我的 Dockerfile 的樣子:

FROM node:10.19.0 AS node
WORKDIR /etc/xyz/test

COPY --from=gcr.io/berglas/berglas:0.5.0 /bin/berglas /usr/local/bin/berglas
COPY docker-entrypoint.sh /

ENTRYPOINT ["/docker-entrypoint.sh"]

#
# development stage used in conjunction with docker-compose for local development
#

FROM node AS dev
ENV NODE_ENV="development"


COPY new/package.json new/package-lock.json ../new/
RUN (cd ../new && npm install)

COPY brand/package.json brand/package-lock.json ../brand/
RUN (cd ../brand && npm install)

COPY chain/package.json chain/package-lock.json ./
RUN npm install

COPY chain ./
COPY new ../new/
COPY brand ../brand/

#
# production stage that compiles and runs production artifacts
#

FROM dev AS prod
ENV NODE_ENV="production"

ARG NODE_HEAP_SIZE="4096"
RUN NODE_OPTIONS="--max-old-space-size=${NODE_HEAP_SIZE}" npm run build:prod

為了驗證節點上的網絡帶寬,我啟動了一個 ubuntu 容器並進行了網絡測試,結果達到了標准。

我什至嘗試通過-cache-from來改進構建期間的緩存,但這里也沒有運氣。

我什至嘗試將NODE_HEAP_SIZE更改為非常高的值,但沒有得到任何改進。

我已經看到npm installnpm cinpm run build中的最長時間

添加進一步調查:

我已經嘗試在 VM 上構建相同的步驟,並且還通過在同一 VM 上啟動 docker 容器並嘗試在內部運行 docker 構建,它所花費的時間比在 Z2E54334C0A5CE2E3E3E5A5845DF3AB3 中運行要少得多。 動態從站上的時間差或多或少是兩倍。

最大時間在npm installnpm ci步驟中。

我不知道 CircleCi 如何能夠更快地構建它。

有人可以幫我調試什么嗎?

如果不檢查日志,很難說 Jenkins 中發生了什么。 請查看這篇關於全局 jenkins 日志和配置其他日志記錄器的文章。

我對 AWS 中的動態 jenkins 從站有類似的問題,因為“Amazon EC2”插件的開發人員更改了安全設置,檢查 ssh 密鑰需要大約 15 分鍾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM