use of com.google.cloud.tools.jib.builder.TimerEventDispatcher in project jib by google.
the class CheckManifestStep method call.
@Override
public Optional<ManifestAndDigest<ManifestTemplate>> call() throws IOException, RegistryException {
DescriptorDigest manifestDigest = Digests.computeJsonDigest(manifestTemplate);
EventHandlers eventHandlers = buildContext.getEventHandlers();
try (TimerEventDispatcher ignored = new TimerEventDispatcher(eventHandlers, DESCRIPTION);
ProgressEventDispatcher ignored2 = progressEventDispatcherFactory.create("checking existence of manifest for " + manifestDigest, 1)) {
eventHandlers.dispatch(LogEvent.info("Checking existence of manifest for " + manifestDigest + "..."));
if (!JibSystemProperties.skipExistingImages()) {
eventHandlers.dispatch(LogEvent.info("Skipping manifest existence check; system property set to false"));
return Optional.empty();
}
return registryClient.checkManifest(manifestDigest.toString());
}
}
use of com.google.cloud.tools.jib.builder.TimerEventDispatcher in project jib by google.
the class LoadDockerStep method call.
@Override
public BuildResult call() throws InterruptedException, IOException {
EventHandlers eventHandlers = buildContext.getEventHandlers();
try (TimerEventDispatcher ignored = new TimerEventDispatcher(eventHandlers, "Loading to Docker daemon")) {
eventHandlers.dispatch(LogEvent.progress("Loading to Docker daemon..."));
ImageTarball imageTarball = new ImageTarball(builtImage, buildContext.getTargetImageConfiguration().getImage(), buildContext.getAllTargetImageTags());
// See https://github.com/GoogleContainerTools/jib/pull/1960#discussion_r321898390
try (ProgressEventDispatcher progressEventDispatcher = progressEventDispatcherFactory.create("loading to Docker daemon", imageTarball.getTotalLayerSize());
ThrottledAccumulatingConsumer throttledProgressReporter = new ThrottledAccumulatingConsumer(progressEventDispatcher::dispatchProgress)) {
// Load the image to docker daemon.
eventHandlers.dispatch(LogEvent.debug(dockerClient.load(imageTarball, throttledProgressReporter)));
return BuildResult.fromImage(builtImage, buildContext.getTargetFormat());
}
}
}
use of com.google.cloud.tools.jib.builder.TimerEventDispatcher in project jib by google.
the class ObtainBaseImageLayerStep method call.
@Override
public PreparedLayer call() throws IOException, CacheCorruptedException, RegistryException {
EventHandlers eventHandlers = buildContext.getEventHandlers();
DescriptorDigest layerDigest = layer.getBlobDescriptor().getDigest();
try (ProgressEventDispatcher progressEventDispatcher = progressEventDispatcherFactory.create("checking base image layer " + layerDigest, 1);
TimerEventDispatcher ignored = new TimerEventDispatcher(eventHandlers, String.format(DESCRIPTION, layerDigest))) {
StateInTarget stateInTarget = blobExistenceChecker.check(layerDigest);
if (stateInTarget == StateInTarget.EXISTING) {
eventHandlers.dispatch(LogEvent.info("Skipping pull; BLOB already exists on target registry : " + layer.getBlobDescriptor()));
return new PreparedLayer.Builder(layer).setStateInTarget(stateInTarget).build();
}
Cache cache = buildContext.getBaseImageLayersCache();
// Checks if the layer already exists in the cache.
Optional<CachedLayer> optionalCachedLayer = cache.retrieve(layerDigest);
if (optionalCachedLayer.isPresent()) {
CachedLayer cachedLayer = optionalCachedLayer.get();
return new PreparedLayer.Builder(cachedLayer).setStateInTarget(stateInTarget).build();
} else if (buildContext.isOffline()) {
throw new IOException("Cannot run Jib in offline mode; local Jib cache for base image is missing image layer " + layerDigest + ". Rerun Jib in online mode with \"-Djib.alwaysCacheBaseImage=true\" to " + "re-download the base image layers.");
}
try (ThrottledProgressEventDispatcherWrapper progressEventDispatcherWrapper = new ThrottledProgressEventDispatcherWrapper(progressEventDispatcher.newChildProducer(), "pulling base image layer " + layerDigest)) {
CachedLayer cachedLayer = cache.writeCompressedLayer(Verify.verifyNotNull(registryClient).pullBlob(layerDigest, progressEventDispatcherWrapper::setProgressTarget, progressEventDispatcherWrapper::dispatchProgress));
return new PreparedLayer.Builder(cachedLayer).setStateInTarget(stateInTarget).build();
}
}
}
use of com.google.cloud.tools.jib.builder.TimerEventDispatcher in project jib by google.
the class AuthenticatePushStep method call.
@Override
public RegistryClient call() throws CredentialRetrievalException, IOException, RegistryException {
String registry = buildContext.getTargetImageConfiguration().getImageRegistry();
try (ProgressEventDispatcher progressDispatcher = progressEventDispatcherFactory.create("authenticating push to " + registry, 2);
TimerEventDispatcher ignored2 = new TimerEventDispatcher(buildContext.getEventHandlers(), String.format(DESCRIPTION, registry))) {
Credential credential = RegistryCredentialRetriever.getTargetImageCredential(buildContext).orElse(null);
progressDispatcher.dispatchProgress(1);
RegistryClient registryClient = buildContext.newTargetImageRegistryClientFactory().setCredential(credential).newRegistryClient();
if (!registryClient.doPushBearerAuth()) {
// server returned "WWW-Authenticate: Basic ..." (e.g., local Docker registry)
if (credential != null && !credential.isOAuth2RefreshToken()) {
registryClient.configureBasicAuth();
}
}
return registryClient;
}
}
use of com.google.cloud.tools.jib.builder.TimerEventDispatcher in project jib by GoogleContainerTools.
the class JibContainerBuilder method containerize.
/**
* Builds the container.
*
* @param containerizer the {@link Containerizer} that configures how to containerize
* @return the built container
* @throws IOException if an I/O exception occurs
* @throws CacheDirectoryCreationException if a directory to be used for the cache could not be
* created
* @throws HttpHostConnectException if jib failed to connect to a registry
* @throws RegistryUnauthorizedException if a registry request is unauthorized and needs
* authentication
* @throws RegistryAuthenticationFailedException if registry authentication failed
* @throws UnknownHostException if the registry does not exist
* @throws InsecureRegistryException if a server could not be verified due to an insecure
* connection
* @throws RegistryException if some other error occurred while interacting with a registry
* @throws ExecutionException if some other exception occurred during execution
* @throws InterruptedException if the execution was interrupted
*/
public JibContainer containerize(Containerizer containerizer) throws InterruptedException, RegistryException, IOException, CacheDirectoryCreationException, ExecutionException {
try (BuildContext buildContext = toBuildContext(containerizer);
TimerEventDispatcher ignored = new TimerEventDispatcher(buildContext.getEventHandlers(), containerizer.getDescription())) {
logSources(buildContext.getEventHandlers());
BuildResult buildResult = containerizer.run(buildContext);
return JibContainer.from(buildContext, buildResult);
} catch (ExecutionException ex) {
// If an ExecutionException occurs, re-throw the cause to be more easily handled by the user
if (ex.getCause() instanceof RegistryException) {
throw (RegistryException) ex.getCause();
}
throw ex;
}
}
Aggregations