I have a Jenkins Pipeline using Kubernetes Agent.
I schedule multiple containers in my pod template.
I recently wanted to add volumes that would be shared some of the containers and am having difficulties.
I need to know how to create a volume that will be shared between 2 or more containers in a pod. That volume should mount to a specific path on each container.
Specifics:
- Using GCE (Google Cloud Engine) with Kubernetes Jenkins
- Using emptyDir volumes
There also seems to be a severe lack of documentation for this. So any direction on that would also be appreciated. The documentation I did find says that the way to do this is to define volumes in the pipeline that will be shared by all containers.
Sample Jenkinsfile:
Below is not my actual pipeline, but it recreates the issue.
pipeline { agent { kubernetes { label 'test-pod' defaultContainer 'jnlp' yaml """ apiVersion: v1 kind: Pod spec: containers: - name: frontend-test image: centos:7 command: - cat tty: true - name: backend-test image: centos:7 command: - cat tty: true volumes: - name: sharedvolume emptyDir: {} mountPath: '/opt/app/shared' """ } } stages { stage('Test Pipeline Configuration') { steps { container('frontend-test') { sh 'touch /opt/app/shared/test_file' } container('backend-test') { sh 'ls /opt/app/shared/test_file ; echo $?' } } } } } Result:
[Pipeline] podTemplate [Pipeline] { [Pipeline] node Still waiting to schedule task All nodes of label ‘test-pod’ are offline Agent test-pod-5t0gj-wln8d is provisioned from template Kubernetes Pod Template Agent specification [Kubernetes Pod Template] (test-pod): Running on test-pod-5t0gj-wln8d in /home/jenkins/workspace/pipeline-test [Pipeline] { [Pipeline] container [Pipeline] { [Pipeline] stage [Pipeline] { (Test Pipeline Configuration) [Pipeline] container [Pipeline] { [Pipeline] sh [pipeline-test] Running shell script + touch /opt/app/shared/test_file touch: cannot touch '/opt/app/shared/test_file': No such file or directory [Pipeline] } [Pipeline] // container [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // container [Pipeline] } [Pipeline] // node [Pipeline] } [Pipeline] // podTemplate [Pipeline] End of Pipeline ERROR: script returned exit code 1 Finished: FAILURE