【问题标题】:Jenkins + Kubernetes + ccache詹金斯 + Kubernetes + ccache
【发布时间】:2021-08-04 23:21:20
【问题描述】:

我们正在考虑将 Jenkins 迁移到 Kubernetes (GKE) 并使用 Jenkins Kubernetes 插件在 pod 中运行作业。但是,我们的构建基础设施使用 ccache 来优化构建速度,并且我们将 ccache 文件保存在 jenkins 代理上(每个构建都会读取和写入每个代理上的本地 ccache 文件夹)。

据我了解,k8s 中的 Jenkins 代理 pod 是短暂的,这意味着它们仅供一次性使用。我正在努力了解 ccache 是如何工作的。这是我的想法:

  • 在 pod 模板中使用 hostpath 卷让代理 pod 在节点上挂载路径。恐怕这行不通,因为根据 GKE 文档,hostpath 不允许 ReadWriteMany,这意味着多个 pod 将无法同时写入 ccache 挂载。
  • 使用基于 NFS 的卷 - 我知道它不会很好地工作,因为它会很慢并且会出现锁定问题。
  • 以某种方式配置带有“podRetention”和“idleMinutes”选项的 pod 模板,以便重新使用 Pod。我认为这是可行的,但 IMO 这违背了使用 Kubernetes 的目的。
  • 使用 StateFull Jenkins 代理 - 我再次认为这是可行的,但违背了使用 Kubernetes 的目的。

我找到了可能相关的https://issues.jenkins.io/browse/JENKINS-42422,但我认为没有解决方案。

关于如何实现它的任何其他想法?无法使用 ccache 对我们来说是个大问题,因为与静态代理相比,它会缩短构建周转时间。

【问题讨论】:

    标签: jenkins kubernetes ccache jenkins-kubernetes


    【解决方案1】:

    有状态并不违背 Kubernetes 的目的。有状态的应用程序是必需的,例如,如果您在集群中运行数据库。 我建议您使用 glusterfs/ceph/nfs/EFS(AWS) 并将 readWriteMany 用于 ccache。

    此博客有更多详细信息:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-03
      • 2017-06-26
      • 2018-08-02
      • 1970-01-01
      • 2021-12-21
      • 2021-09-12
      • 2018-06-19
      • 1970-01-01
      相关资源
      最近更新 更多