Hello everyone,
I am just setting up our project's bitbucket-pipelines.yml file. We have a PHP web application that uses the gRPC extension.
My current default build steps are:
image: php:7.3-cli
definitions:
steps:
- step: &build
name: Build
caches:
- composer
script:
- apt-get update && apt-get install -y ssh unzip autoconf libz-dev git
- pecl install grpc
- docker-php-ext-enable grpc
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
- composer install
- step: &run_tests
name: Run Tests
script:
- vendor/bin/phpunit --testdox protected/tests
pipelines:
default:
- step: *build
- step: *run_tests
The problem is, pecl install grpc takes over 7 minutes to compile and install.
I was reading the article on Caching dependencies, but I'm not sure how to cache grpc in this case, so I don't have to wait over 7 minutes each time this builds.
Any suggestions on how this is achieved?
Thank you!
Alright, so after spending a good amount of time trying to figure this out, I ended up realizing that I should simply create my own Docker image.
So I made one based on the PHP Docker image "php:7.3-cli" by creating this Dockerfile:
FROM php:7.3-cli
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/
RUN apt-get update && apt-get install -qy ssh unzip autoconf libz-dev git
RUN yes | pecl install grpc-1.26.0
RUN install-php-extensions grpc
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
As you may have noticed, I ended up using a php-extension-installer to help me enable grpc; more details on that here: https://github.com/mlocati/docker-php-extension-installer
After that, while referring to this guide, I uploaded my Docker image to DockerHub and modified my Git repo's "bitbucket-pipelines.yml" file accordingly:
image: asimdlvct/php7.3-grpc1.26.0:ctweb
definitions:
steps:
- step: &setup_and_run_tests
name: Setup dependencies and run tests
caches:
- composer
script:
- composer install
- vendor/bin/phpunit --testdox protected/tests
pipelines:
default:
- step: *setup_and_run_tests
And now it works great, all running under a minute in Bitbucket Pipelines!
Also, I realized that my previous YAML file was wrong, since each "step" acts as a different build. So I couldn't install the composer dependencies in one step, and run tests that depended on those packages being installed in a different step! Had to be done in the same step, which makes sense in hindsight.
Thanks for sharing!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks for sharing, it helps a lot :)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
can you site an example using aws codebuild?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.