diff --git a/extensions/container-image/container-image-jib/deployment/src/main/java/io/quarkus/container/image/jib/deployment/JibProcessor.java b/extensions/container-image/container-image-jib/deployment/src/main/java/io/quarkus/container/image/jib/deployment/JibProcessor.java
index 3f18c66689740..3201af4240fd0 100644
--- a/extensions/container-image/container-image-jib/deployment/src/main/java/io/quarkus/container/image/jib/deployment/JibProcessor.java
+++ b/extensions/container-image/container-image-jib/deployment/src/main/java/io/quarkus/container/image/jib/deployment/JibProcessor.java
@@ -4,6 +4,9 @@
import java.io.IOException;
import java.io.UncheckedIOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.nio.charset.StandardCharsets;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
@@ -82,6 +85,8 @@ public class JibProcessor {
private static final String JAVA_17_BASE_IMAGE = "registry.access.redhat.com/ubi8/openjdk-17-runtime:1.10";
private static final String JAVA_11_BASE_IMAGE = "registry.access.redhat.com/ubi8/openjdk-11-runtime:1.10";
+ private static final String OPENTELEMETRY_CONTEXT_CONTEXT_STORAGE_PROVIDER_SYS_PROP = "io.opentelemetry.context.contextStorageProvider";
+
@BuildStep
public AvailableContainerImageExtensionBuildItem availability() {
return new AvailableContainerImageExtensionBuildItem(JIB);
@@ -205,11 +210,20 @@ public void buildFromNative(ContainerImageConfig containerImageConfig, JibConfig
private JibContainer containerize(ContainerImageConfig containerImageConfig,
JibConfig jibConfig, ContainerImageInfoBuildItem containerImage, JibContainerBuilder jibContainerBuilder,
boolean pushRequested) {
+
Containerizer containerizer = createContainerizer(containerImageConfig, jibConfig, containerImage, pushRequested);
for (String additionalTag : containerImage.getAdditionalTags()) {
containerizer.withAdditionalTag(additionalTag);
}
+ String previousContextStorageSysProp = null;
try {
+ // Jib uses the Google HTTP Client under the hood which attempts to record traces via OpenCensus which is wired
+ // to delegate to OpenTelemetry.
+ // This can lead to problems with the Quarkus OpenTelemetry extension which expects Vert.x to be running,
+ // something that is not the case at build time, see https://github.com/quarkusio/quarkus/issues/22864.
+ previousContextStorageSysProp = System.setProperty(OPENTELEMETRY_CONTEXT_CONTEXT_STORAGE_PROVIDER_SYS_PROP,
+ "default");
+
log.info("Starting container image build");
JibContainer container = jibContainerBuilder.containerize(containerizer);
log.infof("%s container image %s (%s)\n",
@@ -219,6 +233,12 @@ private JibContainer containerize(ContainerImageConfig containerImageConfig,
return container;
} catch (Exception e) {
throw new RuntimeException("Unable to create container image", e);
+ } finally {
+ if (previousContextStorageSysProp == null) {
+ System.clearProperty(OPENTELEMETRY_CONTEXT_CONTEXT_STORAGE_PROVIDER_SYS_PROP);
+ } else {
+ System.setProperty(OPENTELEMETRY_CONTEXT_CONTEXT_STORAGE_PROVIDER_SYS_PROP, previousContextStorageSysProp);
+ }
}
}
diff --git a/integration-tests/container-image/maven-invoker-way/src/it/container-build-jib/pom.xml b/integration-tests/container-image/maven-invoker-way/src/it/container-build-jib/pom.xml
index 9a53152b1a407..2058eca2a97e5 100644
--- a/integration-tests/container-image/maven-invoker-way/src/it/container-build-jib/pom.xml
+++ b/integration-tests/container-image/maven-invoker-way/src/it/container-build-jib/pom.xml
@@ -32,6 +32,19 @@
io.quarkus
quarkus-container-image-jib
+
+
+
+
+ io.quarkus
+ quarkus-opentelemetry-exporter-otlp
+
+
+ io.opentelemetry.instrumentation
+ opentelemetry-grpc-1.6
+ 1.9.2-alpha
+
+
io.quarkus
quarkus-junit5