I'm trying to run firebase emulators in a Bitbucket pipeline and simultaneously run commands that would interact with them.
Whilst the emulators are running, new commands cannot be ran. I haven't been able to find a method to run the emulators in the background.
I've tried:
Bitbucket offers parallel steps (Parallel step options), but these are self-contained. There is no way to pass information between the two containers.
How can I run two processes at the same time? If this is by design, how can I pass information between parallel steps? And if this is intended behaviour, what is the justification?
I solved this another way.
I created a new docker image and ran it as a service like so: https://support.atlassian.com/bitbucket-cloud/docs/databases-and-service-containers/
Dockerfile:
FROM node:bullseye
COPY .firebaserc /.firebaserc
COPY entrypoint.sh /entrypoint.sh
COPY firebase.json /firebase.json
RUN apt update
RUN apt install -y openjdk-17-jdk-headless
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh
#!/bin/bash
npm i -g firebase-tools
npx firebase-tools emulators:start --token "$TOKEN"
Note: TOKEN is stored as a repository variable and generated using:
firebase login:ci
Then modify your bitbucket-pipelines.yml to include:
definitions:
services:
emu:
image: <username>/<image name>
variables:
TOKEN: $TOKEN
and the emu service under step:
- step:
script:
...
services:
- emu
I hope that helps someone!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.