description |
---|
Sorry-cypress installation instructions for Google Cloud Run |
The suggested setup uses the following stack:
- Google Cloud Run services to run sorry-cypress Director, API and Dashboard
- Google Cloud Storage with signed Read and Write URLs
- MongoDB setup of your choice
{% hint style="info" %} Please make sure that you have
- recent version of
gcloud
installed - Google Cloud project is configured and you have sufficient permissions
- recent version of Docker installed {% endhint %}
Please use MongoDB provider of your choice. MongoDB Atlas is a simple and popular managed solution that also has a free tier.
Once you've created MongoDB cluster and a database, please obtain credentials and database name, you will need it in subsequent steps.
{% hint style="info" %} You can use AWS S3 Storage instead, please refer to AWS S3 setup instructions {% endhint %}
- Navigate to the API Console Storage page
- Select a project or create a new project. Note the project ID.
- Select Create and follow the steps to create the bucket. Note the bucket name.
{% hint style="info" %} Consider setting up a Lifecycle Rule to keep only the most recent objects and keep costs down. Eg: Delete object, 7+ days since object was created {% endhint %}
Sorry-cypress Director authenticates on Google Cloud Storage using the Service Account assigned on the cloud run revision (usually Compute Engine default service account)
Make sure that service account has the Storage Object Creator
Role, or assign the role / create a new service account with the role instead.
By default the google-cloud-storage driver uses Signed URLs for both Read & Write URLs. This means the bucket access can be set to Uniform
- Not Public
However, Google Cloud Storage Signed URLs have a max expiration time of 7 days. If you need to view the recording of your runs from sorry-cypress Dashboard for more than 7 days consider one of the following:
- Allow public read access to the bucket
- Use MinIO Gateway to access Google Cloud Storage instead. Instructions
Let's create 3 Cloud Run Services and deploy sorry-cypress components. We are going to run the following sequence of commands for each service:
- Pull latest docker image from Dockerhub
- Tag and push image to GCR associated with your project
- Deploy Google Cloud Run service using the newly generated image
Running a simple script hosted on GitHub would deploy the services.
-p
is the current Google Cloud project-n
is the name prefix for generated Google Cloud Run services
curl -sL https://git.io/Jt4cB \
| source /dev/stdin -p <project> -n <services-prefix>
## Example output:
# 🏁 Finished deployment to Google Cloud Run
#
# test001-director: https://test001-dashboard-dwpifb4gla-uc.a.run.app
# test001-api: https://test001-dashboard-dwpifb4gla-uc.a.run.app
# test001-dashboard: https://test001-dashboard-dwpifb4gla-uc.a.run.app
Note the URLs of the generated services, we'll use those in the next step to configure the services so they'll be able to communicate one with another.
Run the commands below, please be careful while substituting template strings with values obtained at previous steps
# director configuration
gcloud run services update <services_prefix>-director \
--platform managed \
--set-env-vars DASHBOARD_URL="<dashboard_service_url>" \
--set-env-vars EXECUTION_DRIVER="../execution/mongo/driver" \
--set-env-vars MONGODB_URI="<mongodb_uri>" \
--set-env-vars MONGODB_DATABASE="<mongodb_dbname>" \
--set-env-vars SCREENSHOTS_DRIVER="../screenshots/google-cloud-storage.driver" \
--set-env-vars GCS_BUCKET="<bucket_name>" \
--set-env-vars GCS_PROJECT_ID="<project_id>" \
--set-env-vars GCS_IMAGE_KEY_PREFIX="screenshot/" \ # optional, default blank
--set-env-vars GCS_VIDEO_KEY_PREFIX="video/" \ # optional, default blank
--set-env-vars GCS_IS_BUCKET_PUBLIC_READ="false" # optional, use 'true' only if the bucket has public read access
# api configuration
gcloud run services update <services_prefix>-api \
--platform managed \
--set-env-vars MONGODB_URI="<mongodb_uri>" \
--set-env-vars MONGODB_DATABASE="<mongodb_dbname>" \
--set-env-vars APOLLO_PLAYGROUND="<apollo_playground>"
# dashboard configuration
gcloud run services update <services_prefix>-dashboard \
--platform managed \
--set-env-vars GRAPHQL_SCHEMA_URL="<api_service_url>"
🎉 Congratulations!
You've finished setting up sorry-cypress on Google Cloud - now you can open the Dashboard URL to see the dashboard.
Don't forget to reconfigure cypress agents to use Director service before running test.