How to mount volumes inside a container that is started from a bash script in Google Cloud Build?

Viewed 27

I have a cloudbuild.yaml file that looks like this:

steps:
  - name: 'gcr.io/cloud-builders/gsutil'
    args: [ "-m", "rsync", "-r", "gs://${_BUCKET}/maven-repository", "/cache/.m2" ]
    volumes:
      - path: '/cache/.m2'
        name: 'm2_cache'
  - name: docker/compose:debian-1.29.2
    entrypoint: bash
    args:
      - -c
      - |
        ./test.sh
    volumes:
      - path: '/cache/.m2'
        name: 'm2_cache'
    timeout: 2700s

substitutions:
  _BUCKET: 'my-bucket'

In the first step we download our maven settings.xml file from GCS. This file is crucial for subsequent build steps since it contain the username/password to our Artifact Registry Maven repository (I've simplified this example as we don't actually store the credential in the settings.xml as plain text). Without these credentials, our Maven build won't run. Normally the script that we call in the second step starts several docker containers and then run our maven tests. But I've replaced it with test.sh to easier show what the problem is. The test.sh file is shown below:

#!/bin/bash

echo "### [Host] Contents in /cache/.m2"
ls -la /cache/.m2

mkdir ~/test
echo "Johan" > ~/test/ikk.txt

echo "### [Host] Contents in ~/test"
ls -la ~/test

docker run --rm -v /cache/.m2:/cache/.m2 -v ~/test:/root/test -w /usr/src/somewhere ubuntu bash -c 'echo "### [Docker] Contents in /cache/.m2" && ls -la /cache/.m2 && echo "### [Docker] Contents in /root/test" && ls -la /root/test'

I.e. we try to mount two volumes to the ubuntu container that we start in the test.sh file. I list the contents in two directors both outside (### [Host]) and inside (### [Docker]) the ubuntu container. Here's the relevant output of running this in cloud build:

### [Host] Contents in /cache/.m2
total 16
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwxr-xr-x 3 root root 4096 Sep 15 08:55 ..
-rw-r--r-- 1 root root 8063 Sep 13 11:03 settings.xml
### [Host] Contents in ~/test
total 12
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwxr-xr-x 6 root root 4096 Sep 15 08:55 ..
-rw-r--r-- 1 root root    6 Sep 15 08:55 ikk.txt
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
Digest: sha256:20fa2d7bb4de7723f542be5923b06c4d704370f0390e4ae9e1c833c8785644c1
Status: Downloaded newer image for ubuntu:latest
### [Docker] Contents in /cache/.m2
total 8
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwxr-xr-x 3 root root 4096 Sep 15 08:55 ..
### [Docker] Contents in /root/test
total 8
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwx------ 1 root root 4096 Sep 15 08:55 ..

As you can see, the volume mounts doesn't seem to work when I run the ubuntu container from the test.sh file in cloud build (since the contents of /root/test and /cache/.m2 are empty).

Running the test.sh locally on my machine yields the expected outcome:

### [Host] Contents in /cache/.m2
total 40
drwxr-xr-x    7 johan  staff   224 Mar 15  2022 .
drwxr-x---+  87 johan  staff  2784 Sep 15 10:58 ..
-rw-r--r--    1 johan  staff  2344 Sep 14 11:37 copy_reference_file.log
drwxr-xr-x  221 johan  staff  7072 Sep 14 10:52 repository
-rw-r--r--    1 johan  staff   327 Nov 24  2021 settings-docker.xml
-rw-r--r--@   1 johan  staff  9842 Mar 15  2022 settings.xml
drwxr-xr-x    3 johan  staff    96 Nov 19  2021 wrapper
### [Host] Contents in ~/test
total 8
drwxr-xr-x@   3 johan  staff    96 Sep 15 10:53 .
drwxr-xr-x@ 135 johan  staff  4320 Sep 15 10:49 ..
-rw-r--r--    1 johan  staff     6 Sep 15 10:58 ikk.txt
### [Docker] Contents in /cache/.m2
total 24
drwxr-xr-x   7 root root  224 Mar 15  2022 .
drwxr-xr-x   3 root root 4096 Sep 15 08:58 ..
-rw-r--r--   1 root root 2344 Sep 14 09:37 copy_reference_file.log
drwxr-xr-x 221 root root 7072 Sep 14 08:52 repository
-rw-r--r--   1 root root  327 Nov 24  2021 settings-docker.xml
-rw-r--r--   1 root root 9842 Mar 15  2022 settings.xml
drwxr-xr-x   3 root root   96 Nov 19  2021 wrapper
### [Docker] Contents in /root/test
total 8
drwxr-xr-x 3 root root   96 Sep 15 08:53 .
drwx------ 1 root root 4096 Sep 15 08:58 ..
-rw-r--r-- 1 root root    6 Sep 15 08:58 ikk.txt

Here you can see that the volumes are mounted correctly and I can access the files inside the ubuntu container.

How can I mount volumes inside a container in cloud build?

0 Answers
Related