簡體   English   中英

Jenkins + Kubernetes + ccache

[英]Jenkins + Kubernetes + ccache

我們正在考慮將 Jenkins 移動到 Kubernetes (GKE) 並使用 Jenkins Z30136395F0187979219831 運行作業中的作業。 但是,我們的構建基礎設施使用 ccache 來優化構建速度,並且我們將 ccache 文件保存在 jenkins 代理上(每個構建都會讀取和寫入每個代理上的本地 ccache 文件夾)。

根據我的理解,k8s 中的 Jenkins 代理 pod 是短暫的,這意味着它們僅供一次性使用。 我正在努力了解 ccache 是如何工作的。 這是我的想法:

  • 在 pod 模板中使用 hostpath 卷讓代理 pod 在節點上掛載路徑。 恐怕這行不通,因為基於 GKE 文檔的主機路徑不允許 ReadWriteMany,這意味着多個 pod 將無法同時寫入 ccache 掛載。
  • 使用基於 NFS 的卷 - 我知道它不會很好地工作,因為它會很慢並且會出現鎖定問題。
  • 以某種方式配置帶有“podRetention”和“idleMinutes”選項的 pod 模板,以便重新使用 Pod。 我認為這是可行的,但是 IMO 這違背了使用 Kubernetes 的目的。
  • 使用 StateFull Jenkins 代理 - 我再次認為這是可行的,但違背了使用 Kubernetes 的目的。

我發現https://issues.jenkins.io/browse/JENKINS-42422可能相關,但我認為沒有解決方案。

關於如何實施的任何其他想法? 不能使用 ccache 對我們來說是一個交易破壞者,因為與 static 代理相比,它會使構建周轉時間更糟。

有狀態並不違背 Kubernetes 的目的。 有狀態的應用程序是必需的,例如,如果您在集群中運行數據庫。 我建議您使用 glusterfs/ceph/nfs/EFS(AWS) 並將 readWriteMany 用於 ccache。

這個博客有更多細節:

https://blog.hiya.com/kubernetes-base-jenkins-stateful-agents/

暫無
暫無

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

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