Мы рассматриваем возможность переноса 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 является для нас преградой, поскольку она значительно сокращает время выполнения сборки по сравнению со статическими агентами.