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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.