GoogleContainerTools/jib · error · BuildStepsExecutionException
${helpfulSuggestions.none()}
Error message
${helpfulSuggestions.none()} What it means
When a RegistryAuthenticationFailedException has no ResponseException cause, runBuild treats it as an unknown failure and throws a BuildStepsExecutionException with HelpfulSuggestions.none() — Jib could not authenticate to the registry but the underlying cause is unrecognized, so no targeted suggestion is attached. Inspect the wrapped cause for the real problem.
Solutions
- Run with -e/--debug (or -Djib.http.trace=true) and inspect the cause chain of the BuildStepsExecutionException.
- Verify `docker login <registry>` works — if not, the registry auth endpoint/TLS is at fault.
- Check ~/.docker/config.json is valid and points to working credential helpers.
- Test TLS: `curl -v https://<registry>/v2/` and fix certificate issues (add CA to truststore if self-signed).
Example fix
// before (opaque failure) ./gradlew jib // after (see the real cause) ./gradlew jib --debug -Djib.http.trace=true
Defensive patterns
Strategy: try-catch
Validate before calling
// preflight: can we authenticate at all? docker login registry.example.com
Try / catch
try { jibBuild() } catch (BuildStepsExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof RegistryAuthenticationFailedException
&& !(cause.getCause() instanceof ResponseException)) {
// unknown auth failure: log full cause chain, check TLS/docker config
}
} Prevention
- Enable -Djib.http.trace=true / --debug to capture root causes
- Validate ~/.docker/config.json and credential helpers periodically
- Verify registry auth endpoint TLS with curl -v
- Test with `docker login` to isolate registry-side auth problems
When it happens
Trigger: RegistryAuthenticationFailedException is thrown during runBuild whose getCause() is not a ResponseException — e.g. malformed auth endpoint response, keychain/helper failure, TLS handshake failure during token exchange.
Common situations: Misconfigured custom registries with non-standard auth flows; broken Docker config.json; credential helper crashing mid-auth; TLS certificate issues on the token endpoint.
Related errors
- ${helpfulSuggestions.forCredentialsNotSent()}
- 'Bearer' was not found in the 'WWW-Authenticate' header…
- ${helpfulSuggestions.forNoCredentialsDefined(registryUnautho…
- 'realm' was not found in the 'WWW-Authenticate' header…
- Credentials were not sent to
AI-assisted analysis of GoogleContainerTools/jib@fb949e2676 (2026-09-06).
Data as JSON: /api/errors/eeae647c65b36242.
Report an issue: GitHub.
Appendix: source
Thrown at jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java:269
} catch (HttpHostConnectException ex) {
// Failed to connect to registry.
throw new BuildStepsExecutionException(helpfulSuggestions.forHttpHostConnect(), ex);
} catch (RegistryUnauthorizedException ex) {
handleRegistryUnauthorizedException(ex, helpfulSuggestions);
} catch (RegistryCredentialsNotSentException ex) {
throw new BuildStepsExecutionException(helpfulSuggestions.forCredentialsNotSent(), ex);
} catch (RegistryAuthenticationFailedException ex) {
if (ex.getCause() instanceof ResponseException) {
handleRegistryUnauthorizedException(
new RegistryUnauthorizedException(
ex.getServerUrl(), ex.getImageName(), (ResponseException) ex.getCause()),
helpfulSuggestions);
} else {
// Unknown cause
throw new BuildStepsExecutionException(helpfulSuggestions.none(), ex);
}
} catch (UnknownHostException ex) {
throw new BuildStepsExecutionException(helpfulSuggestions.forUnknownHost(), ex);
} catch (InsecureRegistryException ex) {
throw new BuildStepsExecutionException(helpfulSuggestions.forInsecureRegistry(), ex);
} catch (RegistryException ex) {
String message = Verify.verifyNotNull(ex.getMessage()); // keep null-away happy
throw new BuildStepsExecutionException(message, ex);
} catch (ExecutionException ex) {
String message = ex.getCause().getMessage();
throw new BuildStepsExecutionException(
message == null ? "(null exception message)" : message, ex.getCause());
} catch (InterruptedException ex) {View on GitHub (pinned to fb949e2676)