Using S2I to deploy Quarkus applications to OpenShift
You can deploy your Quarkus applications to OpenShift by using the Source-to-Image (S2I) method. With S2I, you must provide the source code to the build container through a Git repository or by uploading the source code at build time.
You can deploy Quarkus applications to OpenShift with Java 17, 21, or 25 versions.
Prerequisites
-
You have a Quarkus application built with Java 17, 21, or 25.
-
Optional: You have a Quarkus project that includes the
quarkus-openshiftextension. -
You are working in the correct OpenShift project namespace.
-
Your project is hosted in a Git repository.
Procedure
-
Open the
pom.xmlfile, and set the Java version.<maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target>where ${java.version} is 17, 21, or 25.
-
Package your application, by entering the following command:
./mvnw clean package -
Create a directory called
.s2iat the same level as thepom.xmlfile. -
Create a file called
environmentin the.s2idirectory and add the following content:MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 AB_JOLOKIA_OFF=true JAVA_APP_JAR=/deployments/quarkus-run.jar -
Commit and push your changes to the remote Git repository.
-
Import the supported OpenShift image.
Java 17:
oc import-image ubi9/openjdk-17 --from=registry.access.redhat.com/ubi9/openjdk-17 --confirmJava 21:
oc import-image ubi9/openjdk-21 --from=registry.access.redhat.com/ubi9/openjdk-21 --confirmJava 25:
oc import-image ubi9/openjdk-25 --from=registry.access.redhat.com/ubi9/openjdk-25 --confirm-
If you are using the OpenShift image registry and pulling from image streams in the same project, your pod service account must already have the correct permissions.
-
If you are pulling images across other OpenShift projects or from secured registries, additional configuration steps might be required.
For more information, see the Red Hat Openshift Container Platform documentation.
-
If you are deploying on IBM Z infrastructure, enter
oc import-image ubi9/openjdk-21 --from=registry.redhat.io/ubi9/openjdk-21 --confirminstead. For information about this image, see OpenJDK 21 runtime image on UBI9.
-
-
Build the project, create the application, and deploy the OpenShift service.
Java 17:
oc new-app registry.access.redhat.com/ubi9/openjdk-17~<git_path> --name=<project_name>Java 21:
oc new-app registry.access.redhat.com/ubi9/openjdk-21~<git_path> --name=<project_name>Java 25:
oc new-app registry.access.redhat.com/ubi9/openjdk-25~<git_path> --name=<project_name>-
Replace
<git_path>with the path of the Git repository that hosts your Quarkus project. For example, for Java 21:oc new-app registry.access.redhat.com/ubi9/openjdk-21~https://github.com/johndoe/code-with-quarkus.git --name=code-with-quarkus.If you do not have SSH keys configured for the Git repository, when specifying the Git path, use the HTTPS URL instead of the SSH URL.
-
Replace
<project_name>with the name of your application.If you are deploying on IBM Z infrastructure, enter
oc new-app ubi9/openjdk-21~<git_path> --name=<project_name>instead.
-
-
To deploy an updated version of the project, push changes to the Git repository, and then run:
oc start-build <project_name> -
To expose a route to the application, run the following command:
oc expose svc <project_name>
Verification
-
List the pods associated with your current OpenShift project:
oc get pods -
To get the log output for your application’s pod, run the following command, replacing
<pod_name>with the name of the latest pod prefixed by your application name:oc logs -f <pod_name>