Skip to main content
You can build a job image once and reuse it across multiple job definitions (e.g. different memory / disk / region profiles) without rebuilding. The workflow is:
  1. Build and push the image through a single “dev” job.
  2. Reference the resulting image digest from as many Job manifests as you need.
  3. Roll out changes to production runners by re-applying the manifests.
This is particularly useful when images are large: a full rollout across every host can take up to 20 minutes, so sharing one image across many jobs is much cheaper than rebuilding per job.

1. Build the image via a dev job

Create a blaxel.toml describing the dev job used to build and host the image:
Deploy it with:
Alternatively, use the command below to push the image without deploying it:
Once deployed, obtain the image reference:

2. Create one manifest per runner profile

For every runner variant you need (size, region, timeout, …), write a small Job manifest that points at the image produced above.
Apply it:
You can bootstrap a new manifest from the dev job’s current spec:

3. Create additional jobs from the shared image

You can now use the same image to deploy jobs with different manifests/runner profiles, depending on your requirements. Because the image is shared, hosts only pull it once instead of once per job. To update the image, you can build a new image on github-runner-dev, validate it there, then promote it to production by bumping the image: field in each manifest and re-applying.
Last modified on May 14, 2026