Bitbucket Support has a good article to start setting up your laravel project with their pipelines feature but for a large scale Laravel project, this article is not complete.
Multi stage builds
Bitbucket pipelines has all the inherent pros and cons of vendor locked-in environment. Memory limitation is one of them. Composer install step was never going to work with this limitation. For that I moved to multi stage build. I created my own custom image and pushed it to docker hub. The dockerFile looks like this
FROM php:7.2-fpm
RUN apt-get update && apt-get install -y unzip ...
RUN printf 'memory_limit = -1;' > /usr/local/etc/php/php.ini
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN mkdir tests
RUN echo '{ \
"require": { \
"laravel/framework": "7.*", \
...
}, \
"require-dev": { \
"phpunit/phpunit": "^8", \
"squizlabs/php_codesniffer": "3.*", \
"phpmd/phpmd": "@stable", \
"pdepend/pdepend" : "@stable" \
}, \
"autoload-dev": { \
"classmap": [ \
"tests" \
] \
} \
}' > composer.json
RUN composer install --no-scripts
RUN composer dump-autoload
Now in the bitbucket-pipelines.yml file, use this custom image and few other statements to make the tests run
image: dockerhub_user/base-image:prod
pipelines:
default:
- step:
script:
- cd $BITBUCKET_CLONE_DIR && ln -s /var/www/html/vendor vendor
- composer dump-autoload
- vendor/bin/phpunit tests
...
You can also test the base image locally using following commands. You'd need to copy the dockerFile in project_root/pipelines folder
# build image
docker build -t dockerhub_user/base-image:prod -f pipeline/dockerfile .
# Run image locally with bitbucket memory constraints
docker run -it --memory=4g --memory-swap=4g --memory-swappiness=0 --entrypoint=/bin/bash -v ${PWD}:/build dockerhub_user/base-image:prod
# With volume use -v $(PWD):/build on linux
#push the image to dockerhub
docker login
docker push dockerhub_user/base-image:prod
Top comments (1)
I want to know more... Please