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:
- Build and push the image through a single “dev” job.
- Reference the resulting image digest from as many
Job manifests as you need.
- 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:
type = "job"
name = "github-runner-dev"
[runtime]
diskPercent = 50
memory = 4096
timeout = 3600
maxRetries = 0
Deploy it with:
Alternatively, use the command below to push the image without deploying it:
Once deployed, obtain the image reference:
bl get job github-runner-dev -o json | jq -r '.[].spec.runtime.image'
# -> job/github-runner-dev:jv7lsvdihfqz
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.
# 4grunner.yaml
apiVersion: blaxel.ai/v1alpha1
kind: Job
metadata:
name: github-runner-4g
spec:
region: us-was-1
runtime:
diskPercent: 50
image: job/github-runner-dev:<your-image-digest> # from: bl get job github-runner-dev -o json | jq -r '.[].spec.runtime.image'
memory: 4096
timeout: 3600
Apply it:
bl apply -f 4grunner.yaml
You can bootstrap a new manifest from the dev job’s current spec:
bl get job github-runner-dev -o yaml
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 28, 2026