The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
Edit this Page

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.

Requisitos previos

  • You have a Quarkus application built with Java 17, 21, or 25.

  • Optional: You have a Quarkus project that includes the quarkus-openshift extension.

  • You are working in the correct OpenShift project namespace.

  • Your project is hosted in a Git repository.

Procedimiento

  1. Open the pom.xml file, and set the Java version, where ${java.version} is 17, 21, or 25.

    <maven.compiler.release>${java.version}</maven.compiler.release>
  2. Package your application, by entering the following command:

    ./mvnw clean package
  3. Create a directory called .s2i at the same level as the pom.xml file.

  4. Create a file called environment in the .s2i directory 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
  5. Commit and push your changes to the remote Git repository.

  6. Import the supported OpenShift image.

    • Java 17:

      oc import-image ubi9/openjdk-17 --from=registry.access.redhat.com/ubi9/openjdk-17 --confirm
    • Java 21:

      oc import-image ubi9/openjdk-21 --from=registry.access.redhat.com/ubi9/openjdk-21 --confirm
    • Java 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 --confirm instead. For information about this image, see OpenJDK 21 runtime image on UBI9.

  7. 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>
      1. 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.

      2. 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.

  8. To deploy an updated version of the project, push changes to the Git repository, and then run:

    oc start-build <project_name>
  9. To expose a route to the application, run the following command:

    oc expose svc <project_name>

Verification

  1. List the pods associated with your current OpenShift project:

    oc get pods
  2. 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>

Related content