TL;DR: composer saved cache in different directory then Bitbucket's predefined
composer
cache location. AddingCOMPOSER_HOME=~/.composer
before thecomposer install
fixed the issue.
In our company we are using Bitbucket as our Git hosting service. We also use they're Pipelines feature for CI/CD automation. All has been running fine and dandy but after a while I found a small issue.
The last stage of Pipelines is a Build teardown process, which also saves cache between builds providing faster builds, and reducing the number of consumed build minutes. Our bitbucket-pipelines.yml
file lookes something like this:
image: funky-org/bitbucket-pipelines-php
pipelines:
default:
- step:
name: Run unit tests
caches:
- composer
script:
- composer install --no-progress
- ./vendor/bin/phpunit
- ls -la ~/.composer/cache
We are using composer as our PHP dependencies manager and the image is based on php:7.4-cli.
When the pipeline executed the composer install
the cache should be saved in the ~/.composer/cache
directory (based on the documentation). Bitbucket's predefined composer
cache location is also ~/.composer/cache
so the Build teardown should save the cache in Bitbucket for later use. But that directory was empty 🧐.
I reproduced this issue locally on my computer by running the following command and running the scripts manually:
docker run --rm -it -v ${PWD}:/app funky-org/bitbucket-pipelines-php bash
I found out that the cache got saved into ~/.cache/composer
. Thus the reason why the Pipelines didn't find any cache files to save.
The solution I did was to manually specifity the COMPOSER_HOME
environment variable so that composer saved cache in the Bitbucket's predefined composer
cache location. The final yml file looks like this
image: funky-org/bitbucket-pipelines-php
pipelines:
default:
- step:
name: Run unit tests
caches:
- composer
script:
- COMPOSER_HOME=~/.composer composer install --no-progress
- ./vendor/bin/phpunit
- ls -la ~/.composer/cache
I hope this article helps someone not to lose so much time as I did 😆
Top comments (0)