Your hardened base image is rebuilt monthly, but services pin it by digest. How do you make the rebuild reach them?
answer
- Immutability versus currency
- The supply side is the easy half
- Nothing consumes the new digest
- Turn silence into a build failure
- Rebuild is not redeploy
basics
~20 sA digest names one immutable build, so a rebuild produces a new digest nobody consumes. Rebuilding is the supply side; you need a push mechanism: automated bump changes per repository, a build-time staleness failure, and retirement of the old digest.
solid answer
~50 sPinning by digest means a service is bound to one exact image build, so publishing a patched rebuild changes nothing for anyone until something moves the pin. Rebuilding monthly is the supply side of the problem; the distribution side needs three things. First, automation that opens a change per consuming repository whenever a new digest publishes, running that service's tests so the bump is a review-and-merge rather than a project. Second, a build-time freshness check that fails, or first warns, when the pinned base digest is older than an agreed maximum age — that converts silent staleness into a visible failure with an owner. Third, a retirement policy so the old digest stops being a comfortable place to sit. And remember a base bump only takes effect on a rebuild and a redeploy; services that are not rebuilt keep running the old image regardless.
go deeper
Know that a digest names one exact image build and cannot move, so a patched rebuild is a different digest that nobody is referencing until someone updates the pin.
Explain the push mechanisms and how they differ: automated bump changes per repository, a build-time maximum-age check that fails a stale pin, and retirement of the superseded digest.
Demonstrate the rollout judgment: warn before failing, publish the date, keep the image interface stable, and measure base-layer age on what is deployed rather than what is merged.
Own the tension between reproducibility and currency across an estate. Argue where the breakage budget goes, who absorbs the migration cost, and what the platform team owes teams in return for forcing monthly change.
## Why the rebuild does not arrive on its own An internal hardened base image line exists so that patching the operating system layer and the shared runtime happens once, for everyone, on a schedule. The platform team rebuilds monthly and publishes. Consumers, correctly, pin their build to a digest rather than a moving tag, because a digest is content-addressed: it names exactly one image and cannot be moved under them. Those two good practices collide. A rebuild with new patches is, by construction, different content, therefore a different digest, therefore something nobody is referencing. Currency and immutability pull in opposite directions, and nothing about pinning is wrong — what is missing is a mechanism that moves the pin. ## The three mechanisms that actually move it **1. Raise the change for them.** The platform team's automation watches for a new base digest and opens a change in every consuming repository that updates the pinned reference, runs that repository's own test suite, and carries the changelog in the description. The important design point is who does the work: if adopting the monthly rebuild costs a service team a planning conversation, it will not happen. If it costs one review of an already-green change, it will. Where a team's tests are trusted, allowing that change to merge automatically on green pushes adoption further. **2. Make staleness fail rather than sit.** A build-time check compares the age of the pinned base digest against a maximum age and warns, then fails, once it is exceeded. This is the crucial inversion. Without it, a stale pin has no symptom at all: builds are green, the service runs, and the only person who knows is whoever later reads a scan report. With it, staleness becomes a build failure that lands on the team that owns the service, at a time of your choosing, with a documented fix. Roll it out as a warning first with a published date on which it starts failing, so the deadline is predictable rather than an outage. **3. Retire the old image.** A digest that stays pullable forever is a comfortable place to stay. A retirement policy — the old digest becomes unavailable, or builds against it are refused, after the support window — closes the option. This is the sharpest of the three and needs the most warning, because it turns a currency problem into a build outage for anyone who ignored the first two mechanisms. ## Rebuild is not redeploy A common mistake in interviews is stopping at the pin. Updating the base digest in a repository patches the *next image the service builds*. The service running in production is still the old image until it is rebuilt and rolled out. If the point of the monthly line is patch currency, the metric has to be the age of the base layer in what is *deployed*, not what is committed. That usually means the automation ends in a deploy, or that services rebuild and redeploy on a cadence of their own. ## The breakage budget A monthly forced upgrade is a monthly opportunity to break several hundred builds, and the goodwill you spend is finite. Three things keep it affordable. Keep the image line boring: a stable interface — the same paths, the same user, the same entrypoint conventions — so a patch rebuild is genuinely a patch. Separate the cadence: routine patch rebuilds flow automatically, while a change that moves a major runtime version gets its own announced track with a longer window. And publish what changed each time, so a team whose tests fail can tell in a minute whether the cause is theirs or yours. If teams learn that the monthly bump is safe, they stop reviewing it carefully — which is fine, because that is the outcome you wanted. ## What to say about the tradeoff The honest framing is that immutability of a reference and currency of its content are in permanent tension, and you resolve it not by loosening the pin but by owning the movement of the pin. A floating tag looks like a shortcut, and it does deliver patches automatically, but it also means the content of a build changes without a recorded decision and the same build cannot be reproduced later. Most estates land on pinned digests plus aggressive, cheap, automated movement — with the staleness failure as the backstop for the repositories where the automation is ignored.
- A team merges the base digest bump but the running workload is unchanged. Why?Because the bump only affects the next image the service builds. Until that build runs and the result is rolled out, production is still executing the previous image. Patch currency must therefore be measured on what is deployed, not on what is committed, which usually means the automation has to carry through to a release rather than stopping at a merged change.
- How do you stop a monthly forced bump from being dismissed as noise?Keep the image interface stable so a patch rebuild really is a patch, and split cadences: routine patches flow automatically on green tests, while a runtime major version gets an announced track and a longer window. Publish a changelog per rebuild so a failing team can tell in a minute whether the break is yours or theirs. Predictability is what buys the next bump.
- Why not just have everyone track a floating tag on the base image line?It does deliver patches without any push mechanism, but the content of a build then changes with no recorded decision, two builds of the same commit can differ, and an incident becomes hard to reconstruct. Most estates keep the digest pin for that reproducibility and instead invest in making the pin cheap and automatic to move.
saying these in an interview costs you the question
- Assuming a rebuild automatically reaches digest-pinned consumers
- Treating publishing the new image as the end of the job
- Proposing a floating tag as the whole answer
- Confusing bumping the pin with redeploying the workload
- Forcing failures with no warning period or changelog