Jenkins Kubernetes: Mount subpath of volume

5/28/2020

As far as i understood, the kubernetes api allows one to mount a subpath of a pvc into the container in the volumeMounts spec.

In my example i want to mount the pvc my-pvc, but in the subdirectory /my-subpath to /my-mount.

So the directory /my-subpath on my-pvc would be mounted in the container under /my-mount.

When using Kubernetes normally, this would look like follows if i understood the docs:

volumeMounts:
- mountPath: /my-mount
      name: my-pvc
      subPath: "my-subpath"

My problem now is, that in the jenkins kubernetes plugin this doesn't seem to be possible.

If i understood the docs correctly, it seems that it is only possible to mount the root directory, i.e. /, of the pvc my-pvc to /my-mount in the container, since there is no subPath option: Jenkins documentation screenshot

Is there something i am missing, or is it just not possible to do this?

-- Mark G
jenkins
kubernetes
kubernetes-jenkins-plugin
persistent-volumes

1 Answer

5/28/2020

It is not possible by available options of Jenkins Kubernetes plugin ATM. But still, you can achieve this by applying a raw pod template in Kubernetes cloud pod configuration.

Sample output

Started by user admin
Replayed #11
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
‘hello-docker-j0rk6’ is offline
Agent hello-docker-j0rk6 is provisioned from template hello-docker
---
apiVersion: "v1"
kind: "Pod"
metadata:
  annotations: {}
  labels:
    run: "hello-docker"
    jenkins: "slave"
    jenkins/label: "hello-docker"
  name: "hello-docker-j0rk6"
spec:
  containers:
  - command:
    - "cat"
    image: "jenkins/jnlp-slave:3.27-1-alpine"
    name: "hello-docker"
    resources: {}
    tty: true
    volumeMounts:
    - mountPath: "/app/logs"
      name: "tmp"
      subPath: "logs"
    - mountPath: "/home/jenkins/agent"
      name: "workspace-volume"
      readOnly: false
-- hariK
Source: StackOverflow