#jenkins #kubernetes
#дженкинс #kubernetes
Вопрос:
У меня есть конвейер Jenkins, использующий плагин kubernetes для запуска docker в контейнере docker и сборки образов:
pipeline {
agent {
kubernetes {
label 'kind'
defaultContainer 'jnlp'
yaml """
apiVersion: v1
kind: Pod
metadata:
labels:
name: dind
...
У меня также есть пул постоянных томов в пространстве имен jenkins, каждый из которых помечен app=dind
. Я хочу, чтобы один из этих томов выбирался для каждого запуска конвейера и использовался как /var/lib/docker
в моем контейнере dind, чтобы кэшировать любые извлечения изображений при каждом запуске. Я хочу иметь пул и кэши, а не только один, поскольку я хочу, чтобы несколько запусков конвейера могли выполняться одновременно. Как я могу это настроить?
Это может быть достигнуто изначально в kubernetes путем создания постоянного требования к объему следующим образом:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dind
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
selector:
matchLabels:
app: dind
и монтировать его в модуль, но я не уверен, как настроить конвейер для создания и очистки такого постоянного требования к объему.
Комментарии:
1. Вы проверили docs.docker.com/develop/develop-images/multistage-build ?
2. @AmritBera Я знаком с ними, да, но не слишком уверен, как они помогут здесь?
Ответ №1:
Прежде всего, я думаю, что способ, которым, по вашему мнению, это может быть достигнуто изначально в kubernetes, не сработает. Вам либо придется повторно использовать тот же PVC, что сделает модули сборки доступными для одновременного доступа к одному и тому же PV, либо, если вы хотите иметь PV для каждой сборки, ваши PV будут заблокированы в Released
статусе и не будут автоматически доступны для новых PVC’ов.
Более подробная информация и обсуждение доступны здесь https://issues.jenkins.io/browse/JENKINS-42422.
Так получилось, что я написал два простых контроллера — automatic PV releaser (который снова найдет и создаст Released
PVS Available
для новых PVCs) и dynamic PVC provisioner (специально для плагина Jenkins Kubernetes — чтобы вы могли определить PVC как аннотацию в Pod). Проверьте это здесь https://github.com/plumber-cd/kubernetes-dynamic-reclaimable-pvc-controllers. Здесь есть полный Jenkinsfile
пример https://github.com/plumber-cd/kubernetes-dynamic-reclaimable-pvc-controllers/tree/main/examples/jenkins-kubernetes-plugin-with-build-cache .