Search code examples
ruby-on-railsselenium-chromedrivercontainersbitbucketbitbucket-pipelines

Bitbucket pipeline - Is it possible to share a folder between a service and the step that uses the service?


I'm starting in the bitbucket pipeline world and I would like to understand how to share something between a service and the step that uses the service.

I have a working pipeline that runs automatically some system tests, and I'm creating a new test. This test just is to download a file from the browser and to check if the file is in a specific folder. To do it I'm using some services that are used in the step. I have something like this pipeline.yml file:

pipelines:
  default:
      - step:
          ...
          script:
           - exec system_tests
          services:
            - selenium_chrome
  ...
definitions:
  services:
    selenium_chrome:
      image: selenium/standalone-chrome:4.0.0-beta-1-prerelease-20210128.

This is a simplification of my scenario, but I think it is enough to explain the issue I'm having.

The tests are executed from the step and, once the tests finish, I know that the file is being stored in a folder in the selenium_chrome container. Now I want to check from the step container if the file is there. i.e. Basically, I want to access a folder in the selenium_chrome service container from the step that uses that service.

I did a lot of tries, but I think the closest one was to use volumes in the service, maybe? I tried something like this:

definitions:
  services:
    selenium_chrome:
      volumes:
        - $BITBUCKET_CLONE_DIR/build/tmp/downloads:/build/tmp/downloads
      image: selenium/standalone-chrome:4.0.0-beta-1-prerelease-20210128

but, when I look into the tmp folder of the step container, I can't find any downloads folder.

I have also configured the chrome driver in another configuration file using the same directory ('download.default_directory': '/build/tmp/downloads').

Can someone help me to know what I'm misunderstanding or doing wrong? I'm missing something in the .yml file maybe?

Thanks in advance


Solution

  • In the end, we didn't find a way to keep the service, so, the solution that worked for us was to remove the selenium_chrome service and just add the dockerization of this into the script:

    pipelines:
      default:
          - step:
              ...
              script:
               - mkdir -p tmp/tests_downloads
               - docker run -d -p 4444:4444 -v $BITBUCKET_CLONE_DIR/tmp/tests_downloads:/tmp/tests_downloads selenium/standalone-chrome:89.0
               - exec system_tests
              services:
                ...
      ...
    definitions:
      services:
    

    It is not exactly what I was looking for ( ideally we wanted to keep the docker layer as a service ), but it works.