Рабочее пространство PersistentVolumeClaim для подчиненного jenkins

Я пытаюсь оставить свое рабочее место в PersistentVolumeClaimс помощью плагина kubernetes

Я создал PV а также PVCи я сохранил свои файлы на локальном диске. Этот конвейер и раньше работал нормально, но теперь рабочие области больше не создаются на локальном диске.

Вот мой конвейер. Любая идея, почему не работает?

def podTemplate = """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: maven
    image: maven
    command:
    - sleep
    args:
    - infinity
    volumeMounts:
      - name: workspace-volume
        mountPath: /home/jenkins/agent
    workingDir: "/home/jenkins/agent"
  volumes:
      - name: "workspace-volume"
        persistentVolumeClaim:
          claimName: "jenkins-slave-pvc"
          readOnly: false
"""


pipeline {
    agent none
    stages {
        stage ('maven') {
            agent { 
                kubernetes {
                    yaml podTemplate 
                    defaultContainer 'maven' 
                } 
            }
            stages {
                stage('Nested 1') {                  
                    steps {
                        sh "touch Nested1 && mvn -version"
                    }
                }
                stage('Nested 2') {                  
                    steps {
                        sh "mvn -version 2 && touch Nested2 "
                    }
                }
            }
        }
    }
}

Теперь Дженкинс всегда монтирует том следующим образом:

volumeMounts:
 - mountPath: "/home/jenkins/agent"
   name: "workspace-volume"
   readOnly: false
volumes:
  - emptyDir:
      medium: ""
    name: "workspace-volume"

Мой вопрос: как я могу перезаписать значение по умолчаниюemptyDir со мной persistentVolumeClaim быть моим рабочим пространством?

1 ответ

Чтобы помочь всем, кто сталкивается с этим вопросом намного позже, как и я, есть свойство на kubernetesв agentраздел, который определяет, как обрабатывается объем рабочей области. Jenkins расширит все, что содержит файл YAML вашего агента, с помощью монтирования и тома для рабочей области.

Таким образом, чтобы использовать существующую претензию на постоянный том, вы должны сделать следующее:

      pipeline {
    agent {
        kubernetes {
            yaml podTemplate
            workspaceVolume persistentVolumeClaimWorkspaceVolume(claimName: 'jenkins-slave-pvc', readOnly: false)
        }
    }
...
}

В зависимости от того, как настроен ваш постоянный том и какие параллельные сборки вы поддерживаете, вы можете вместо этого использовать динамические утверждения постоянного тома, чтобы каждый агент сборки получал свой собственный том рабочей области. Вы можете настроить эту функциональность с помощью:

      pipeline {
    agent {
        kubernetes {
            yaml podTemplate
            workspaceVolume dynamicPVC(accessModes: 'ReadWriteOnce', requestsSize: "10Gi")
        }
    }
...
}