Дженкинс + Kubernetes + ccache

Мы рассматриваем возможность переноса Jenkins в Kubernetes (GKE) и использования плагина Jenkins Kubernetes для выполнения заданий в модулях. Однако наша инфраструктура сборки использует ccache для оптимизации скорости сборки, и мы храним файлы ccache на агентах jenkins (каждая сборка читает и записывает в локальную папку ccache на каждом агенте).

Насколько я понимаю, агенты Jenkins в k8s недолговечны, то есть предназначены только для одноразового использования. Я изо всех сил пытаюсь понять, как настроить ccache для работы. Вот что я думаю:

  • Используйте том hostpath в шаблонах модулей, чтобы модуль агента монтировал путь к узлу. Я боюсь, что это не сработает, потому что, согласно документации GKE, путь к хосту не позволяет ReadWriteMany, а это означает, что несколько модулей не смогут одновременно писать в монтирование ccache.
  • Используйте том на основе NFS - я точно знаю, что это не сработает, так как он будет медленным и будет иметь проблемы с блокировкой.
  • Каким-то образом настройте шаблоны модулей с опциями «podRetention» и «idleMinutes», чтобы модули можно было использовать повторно. Я думаю, что это выполнимо, но ИМО это противоречит цели использования Kubernetes.
  • Используйте StateFull Jenkins Agents - опять же, я думаю, что это выполнимо, но лишает смысла использование Kubernetes.

Я нашел https://issues.jenkins.io/browse/JENKINS-42422, который может быть связано, но я не думаю, что есть решение.

Есть ли другие идеи о том, как это можно реализовать? Невозможность использовать ccache является для нас преградой, поскольку она значительно сокращает время выполнения сборки по сравнению со статическими агентами.


person Cube    schedule 14.05.2021    source источник


Ответы (1)


Сохранение состояния не отменяет цели Kubernetes. Приложения с отслеживанием состояния необходимы, например, если вы используете БД в своем кластере. Я бы посоветовал вам использовать glusterfs / ceph / nfs / EFS (AWS) и использовать readWriteMany для ccache.

В этом блоге есть более подробная информация:

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

person Rakesh Gupta    schedule 14.05.2021