ifdef::env-github[] :artifactId: helloworld endif::[] //*********************************************************************************** // Enable the following flag to build README.html files for JBoss EAP product builds. // Comment it out for WildFly builds. //*********************************************************************************** //:ProductRelease: //*********************************************************************************** // Enable the following flag to build README.html files for EAP XP product builds. // Comment it out for WildFly or JBoss EAP product builds. //*********************************************************************************** //:EAPXPRelease: // This is a universal name for all releases :ProductShortName: JBoss EAP // Product names and links are dependent on whether it is a product release (CD or JBoss) // or the WildFly project. // The "DocInfo*" attributes are used to build the book links to the product documentation ifdef::ProductRelease[] // JBoss EAP release :productName: JBoss EAP :productNameFull: Red Hat JBoss Enterprise Application Platform :productVersion: 8.1 :DocInfoProductNumber: {productVersion} :WildFlyQuickStartRepoTag: 8.1.x :helmChartName: jboss-eap/eap81 endif::[] ifdef::EAPXPRelease[] // JBoss EAP XP release :productName: JBoss EAP XP :productNameFull: Red Hat JBoss Enterprise Application Platform expansion pack :productVersion: 6.0 :WildFlyQuickStartRepoTag: XP_6.0.0.GA endif::[] ifdef::ProductRelease,EAPXPRelease[] :githubRepoUrl: https://github.com/jboss-developer/jboss-eap-quickstarts/ :githubRepoCodeUrl: https://github.com/jboss-developer/jboss-eap-quickstarts.git :jbossHomeName: EAP_HOME :DocInfoProductName: Red Hat JBoss Enterprise Application Platform :DocInfoProductNameURL: red_hat_jboss_enterprise_application_platform :DocInfoPreviousProductName: jboss-enterprise-application-platform :quickstartDownloadName: {productNameFull} {productVersion} Quickstarts :quickstartDownloadUrl: https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?product=appplatform&downloadType=distributions :helmRepoName: jboss-eap :helmRepoUrl: https://jbossas.github.io/eap-charts/ // END ifdef::ProductRelease,EAPXPRelease[] endif::[] ifndef::ProductRelease,EAPXPRelease[] // WildFly project :productName: WildFly :productNameFull: WildFly Application Server :ProductShortName: {productName} :jbossHomeName: WILDFLY_HOME :productVersion: 39 :githubRepoUrl: https://github.com/wildfly/quickstart/ :githubRepoCodeUrl: https://github.com/wildfly/quickstart.git :WildFlyQuickStartRepoTag: 39.0.0.Final :DocInfoProductName: Red Hat JBoss Enterprise Application Platform :DocInfoProductNameURL: red_hat_jboss_enterprise_application_platform :DocInfoPreviousProductName: jboss-enterprise-application-platform :helmRepoName: wildfly :helmRepoUrl: http://docs.wildfly.org/wildfly-charts/ :helmChartName: wildfly/wildfly // END ifndef::ProductRelease,EAPCDRelease,EAPXPRelease[] endif::[] :source: {githubRepoUrl} // Values for Openshift S2i sections attributes :EapForOpenshiftBookName: {productNameFull} for OpenShift :EapForOpenshiftOnlineBookName: {EapForOpenshiftBookName} Online :xpaasproduct: {productNameFull} for OpenShift :xpaasproduct-shortname: {ProductShortName} for OpenShift :ContainerRegistryName: Red Hat Container Registry :EapForOpenshiftBookName: Getting Started with {ProductShortName} for OpenShift Container Platform :EapForOpenshiftOnlineBookName: Getting Started with {ProductShortName} for OpenShift Online :OpenShiftOnlinePlatformName: Red Hat OpenShift Container Platform :OpenShiftOnlineName: Red Hat OpenShift Online // Links to the OpenShift documentation :LinkOpenShiftGuide: https://access.redhat.com/documentation/en-us/{DocInfoProductNameURL}/{DocInfoProductNumber}/html-single/getting_started_with_jboss_eap_for_openshift_container_platform/ :LinkOpenShiftOnlineGuide: https://access.redhat.com/documentation/en-us/{DocInfoProductNameURL}/{DocInfoProductNumber}/html-single/getting_started_with_jboss_eap_for_openshift_online/ ifdef::EAPXPRelease[] // Attributes for XP releases :EapForOpenshiftBookName: {productNameFull} for OpenShift :EapForOpenshiftOnlineBookName: {productNameFull} for OpenShift Online :xpaasproduct: {productNameFull} for OpenShift :ContainerRegistryName: Red Hat Container Registry :EapForOpenshiftBookName: {productNameFull} for OpenShift :EapForOpenshiftOnlineBookName: {productNameFull} for OpenShift Online // Links to the OpenShift documentation :LinkOpenShiftGuide: https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/{DocInfoProductNumber}/html/using_eclipse_microprofile_in_jboss_eap/using-the-openshift-image-for-jboss-eap-xp_default :LinkOpenShiftOnlineGuide: https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/{DocInfoProductNumber}/html/using_eclipse_microprofile_in_jboss_eap/using-the-openshift-image-for-jboss-eap-xp_default endif::[] //************************* // Other values //************************* :buildRequirements: Java SE 17.0 or later, and Maven 3.6.0 or later :javaVersion: Jakarta EE 10 ifdef::EAPXPRelease[] :javaVersion: Eclipse MicroProfile endif::[] :guidesBaseUrl: https://github.com/jboss-developer/jboss-developer-shared-resources/blob/master/guides/ :useEclipseUrl: {guidesBaseUrl}USE_JBDS.adoc#use_red_hat_jboss_developer_studio_or_eclipse_to_run_the_quickstarts :useEclipseDeployJavaClientDocUrl: {guidesBaseUrl}USE_JBDS.adoc#deploy_and_undeploy_a_quickstart_containing_server_and_java_client_projects :useEclipseDeployEARDocUrl: {guidesBaseUrl}USE_JBDS.adoc#deploy_and_undeploy_a_quickstart_ear_project :useProductHomeDocUrl: {guidesBaseUrl}USE_OF_{jbossHomeName}.adoc#use_of_product_home_and_jboss_home_variables :configureMavenDocUrl: {guidesBaseUrl}CONFIGURE_MAVEN_JBOSS_EAP.adoc#configure_maven_to_build_and_deploy_the_quickstarts :addUserDocUrl: {guidesBaseUrl}CREATE_USERS.adoc#create_users_required_by_the_quickstarts :addApplicationUserDocUrl: {guidesBaseUrl}CREATE_USERS.adoc#add_an_application_user :addManagementUserDocUrl: {guidesBaseUrl}CREATE_USERS.adoc#add_an_management_user :startServerDocUrl: {guidesBaseUrl}START_JBOSS_EAP.adoc#start_the_jboss_eap_server :configurePostgresDocUrl: {guidesBaseUrl}CONFIGURE_POSTGRESQL_JBOSS_EAP.adoc#configure_the_postgresql_database_for_use_with_the_quickstarts :configurePostgresDownloadDocUrl: {guidesBaseUrl}CONFIGURE_POSTGRESQL_JBOSS_EAP.adoc#download_and_install_postgresql :configurePostgresCreateUserDocUrl: {guidesBaseUrl}CONFIGURE_POSTGRESQL_JBOSS_EAP.adoc#create_a_database_user :configurePostgresAddModuleDocUrl: {guidesBaseUrl}CONFIGURE_POSTGRESQL_JBOSS_EAP.adoc#add_the_postgres_module_to_the_jboss_eap_server :configurePostgresDriverDocUrl: {guidesBaseUrl}CONFIGURE_POSTGRESQL_JBOSS_EAP.adoc#configure_the_postgresql_driver_in_the_jboss_eap_server :configureBytemanDownloadDocUrl: {guidesBaseUrl}CONFIGURE_BYTEMAN.adoc#download_and_configure_byteman :configureBytemanDisableDocUrl: {guidesBaseUrl}CONFIGURE_BYTEMAN.adoc#disable_the_byteman_script :configureBytemanClearDocUrl: {guidesBaseUrl}CONFIGURE_BYTEMAN.adoc#clear_the_transaction_object_store :configureBytemanQuickstartDocUrl: {guidesBaseUrl}CONFIGURE_BYTEMAN.adoc#configure_byteman_for_use_with_the_quickstarts :configureBytemanHaltDocUrl: {guidesBaseUrl}CONFIGURE_BYTEMAN.adoc#use_byteman_to_halt_the_application[ :configureBytemanQuickstartsDocUrl: {guidesBaseUrl}CONFIGURE_BYTEMAN.adoc#configure_byteman_for_use_with_the_quickstarts = helloworld: Helloworld Example :author: Pete Muir :level: Beginner :technologies: Servlet :openshift: true [abstract] The `helloworld` quickstart demonstrates the use of Servlet 6 and is a good starting point to verify {productName} is configured correctly. :standalone-server-type: default :archiveType: war == What is it? The `helloworld` quickstart demonstrates the use of _Servlet 6_ in {productNameFull} {productVersion}. // Link to the quickstart source :leveloffset: +1 ifndef::ProductRelease,EAPXPRelease[] link:https://github.com/wildfly/quickstart/tree/{WildFlyQuickStartRepoTag}/{artifactId}[Browse the source] endif::[] :leveloffset!: // System Requirements :leveloffset: +1 [[system_requirements]] = System Requirements //****************************************************************************** // Include this template to describe the standard system requirements for // running the quickstarts. // // The Forge quickstarts define a `forge-from-scratch` attribute because they // run entirely in CodeReady Studio and have different requirements . //****************************************************************************** The application this project produces is designed to be run on {productNameFull} {productVersion} or later. All you need to build this project is {buildRequirements}. See link:{configureMavenDocUrl}[Configure Maven to Build and Deploy the Quickstarts] to make sure you are configured correctly for testing the quickstarts. :leveloffset!: // Use of {jbossHomeName} :leveloffset: +1 ifdef::requires-multiple-servers[] [[use_of_jboss_home_name]] = Use of the {jbossHomeName}_1, {jbossHomeName}_2, and QUICKSTART_HOME Variables This quickstart requires that you clone your `__{jbossHomeName}__` installation directory and run two servers. The installation path is described in detail here: link:{useProductHomeDocUrl}[Use of __{jbossHomeName}__ and __JBOSS_HOME__ Variables]. In the following instructions, replace `__{jbossHomeName}_1__` with the path to your first {productName} server and replace `__{jbossHomeName}_2__` with the path to your second cloned {productName} server. When you see the replaceable variable __QUICKSTART_HOME__, replace it with the path to the root directory of all of the quickstarts. endif::[] ifdef::optional-domain-or-multiple-servers[] [[use_of_jboss_home_name]] = Use of the {jbossHomeName}_1, {jbossHomeName}_2, and QUICKSTART_HOME Variables When deploying this quickstart to a managed domain, replace `__{jbossHomeName}__` with the actual path to your {productName} installation. The installation path is described in detail here: link:{useProductHomeDocUrl}[Use of __{jbossHomeName}__ and __JBOSS_HOME__ Variables]. When deploying this quickstart to multiple standalone servers, this quickstart requires that you clone your `__{jbossHomeName}__` installation directory and run two servers. In the following instructions, replace `__{jbossHomeName}_1__` with the path to your first {productName} server and replace `__{jbossHomeName}_2__` with the path to your second cloned {productName} server. When you see the replaceable variable __QUICKSTART_HOME__, replace it with the path to the root directory of all of the quickstarts. endif::[] ifndef::requires-multiple-servers,optional-domain-or-multiple-servers[] [[use_of_jboss_home_name]] = Use of the {jbossHomeName} and QUICKSTART_HOME Variables In the following instructions, replace `__{jbossHomeName}__` with the actual path to your {productName} installation. The installation path is described in detail here: link:{useProductHomeDocUrl}[Use of __{jbossHomeName}__ and __JBOSS_HOME__ Variables]. When you see the replaceable variable __QUICKSTART_HOME__, replace it with the path to the root directory of all of the quickstarts. endif::[] :leveloffset!: // build and run with standard server distribution [[build_and_run_the_quickstart_with_server_dist]] == Building and running the quickstart application with a {productName} server distribution // Start the {productName} Standalone Server :leveloffset: +2 [[start_the_eap_standalone_server]] = Start the {productName} Standalone Server //****************************************************************************** // Include this template if your quickstart requires a normal start of a single // standalone server. // // You must define the `standalone-server-type`. Supported values are: // default // full // full-ha // ha // custom // // * For mobile applications, you can define the `mobileApp` variable in the // `README.adoc` file to add `-b 0.0.0.0` to the command line. This allows // external clients, such as phones, tablets, and desktops, to connect // to the application through through your local network // ::mobileApp: {artifactId}-service // //****************************************************************************** //****************************************************************************** // This template sets attributes for the different standalone server profiles. // // You must define the `standalone-server-type`. Supported values are: // default // full // full-ha // ha // microprofile // custom //****************************************************************************** // Standalone server with the default profile. ifeval::["{standalone-server-type}"=="default"] :serverProfile: default profile :configFileName: standalone/configuration/standalone.xml :serverArguments: endif::[] // Standalone server with the full profile. ifeval::["{standalone-server-type}"=="full"] :serverProfile: full profile :configFileName: standalone/configuration/standalone-full.xml :serverArguments: -c standalone-full.xml endif::[] // Standalone server with the full HA profile. ifeval::["{standalone-server-type}"=="full-ha"] :serverProfile: full HA profile :configFileName: standalone/configuration/standalone-full-ha.xml :serverArguments: -c standalone-full-ha.xml endif::[] // Start the standalone server with the HA profile. ifeval::["{standalone-server-type}"=="ha"] :serverProfile: HA profile :configFileName: standalone/configuration/standalone-ha.xml :serverArguments: -c standalone-ha.xml endif::[] // Start the standalone server with the Eclipse MicroProfile profile. ifeval::["{standalone-server-type}"=="microprofile"] :serverProfile: MicroProfile profile :configFileName: standalone/configuration/standalone-microprofile.xml :serverArguments: -c standalone-microprofile.xml endif::[] // Standalone server with the custom profile. // NOTE: This profile requires that you define the `serverArguments` variable // within the quickstart README.adoc file. For example: // :serverArguments: --server-config=../../docs/examples/configs/standalone-xts.xml ifeval::["{standalone-server-type}"=="custom"] :serverProfile: custom profile endif::[] // If there is no match, use the default profile. ifndef::serverProfile[] :standalone-server-type: default :serverProfile: default profile :configFileName: standalone/configuration/standalone.xml :serverArguments: endif::serverProfile[] . Open a terminal and navigate to the root of the {productName} directory. . Start the {productName} server with the {serverProfile} by typing the following command. + ifdef::uses-jaeger[] [source,subs="+quotes,attributes+",options="nowrap"] ---- $ __JAEGER_REPORTER_LOG_SPANS=true JAEGER_SAMPLER_TYPE=const JAEGER_SAMPLER_PARAM=1__ __{jbossHomeName}__/bin/standalone.sh {serverArguments} ---- endif::[] ifndef::uses-jaeger[] [source,subs="+quotes,attributes+",options="nowrap"] ---- $ __{jbossHomeName}__/bin/standalone.sh {serverArguments} ---- endif::[] + NOTE: For Windows, use the `__{jbossHomeName}__\bin\standalone.bat` script. ifdef::mobileApp[] + Adding `-b 0.0.0.0` to the above command allows external clients, such as phones, tablets, and desktops, to connect through your local network. For example: + [source,subs="+quotes,attributes+",options="nowrap"] ---- $ __{jbossHomeName}__/bin/standalone.sh {serverArguments} -b 0.0.0.0 ---- endif::[] :leveloffset!: // Build and Deploy the Quickstart :leveloffset: +2 [[build_and_deploy_the_quickstart]] = Build and Deploy the Quickstart //****************************************************************************** // Include this template if your quickstart does a normal deployment of a archive. // // * Define the `archiveType` variable in the quickstart README file. // Supported values: // :archiveType: ear // :archiveType: war // :archiveType: jar // // * To override the archive name, which defaults to the {artifactId), // define the `archiveName` variable, for example: // :archiveName: {artifactId}-service // // * To override the archive output directory, // define the `archiveDir` variable, for example: // :archiveDir: ear/target // // * To override the Maven command, define the `mavenCommand` variable, // for example: // :mavenCommand: clean install wildfly:deploy //****************************************************************************** // The archive name defaults to the artifactId if not overridden ifndef::archiveName[] :archiveName: {artifactId} endif::archiveName[] // The archive type defaults to war if not overridden ifndef::archiveType[] :archiveType: war endif::archiveType[] // Define the archive file name as the concatenation of "archiveName" + "." + "archiveType+ :archiveFileName: {archiveName}.{archiveType} // If they have not defined the target archive directory, make it the default for the archive type. ifndef::archiveDir[] ifeval::["{archiveType}"=="ear"] :archiveDir: {artifactId}/ear/target endif::[] ifeval::["{archiveType}"=="war"] :archiveDir: {artifactId}/target endif::[] ifeval::["{archiveType}"=="jar"] :archiveDir: {artifactId}/target endif::[] endif::archiveDir[] ifndef::mavenCommand[] ifeval::["{archiveType}"=="ear"] :mavenCommand: clean install endif::[] ifeval::["{archiveType}"=="war"] :mavenCommand: clean package endif::[] ifeval::["{archiveType}"=="jar"] :mavenCommand: clean install endif::[] endif::mavenCommand[] . Make sure {productName} server is started. . Open a terminal and navigate to the root directory of this quickstart. ifdef::reactive-messaging[] . Run this command to enable the MicroProfile Reactive Messaging functionality on the server + [source,subs="attributes+",options="nowrap"] ---- $ __{jbossHomeName}__/bin/jboss-cli.sh --connect --file=enable-reactive-messaging.cli ---- endif::reactive-messaging[] . Type the following command to build the quickstart. + [source,subs="attributes+",options="nowrap"] ---- $ mvn {mavenCommand} ---- . Type the following command to deploy the quickstart. + [source,subs="attributes+",options="nowrap"] ---- $ mvn wildfly:deploy ---- This deploys the `{archiveDir}/{archiveFileName}` to the running instance of the server. You should see a message in the server log indicating that the archive deployed successfully. :leveloffset!: === Access the Application The application will be running at the following URL: http://localhost:8080/{artifactId}/. // Server Distribution Testing :leveloffset: +2 [[run_the_integration_tests_with_server_distribution]] = Run the Integration Tests ifndef::integrationTestsDirectory[:integrationTestsDirectory: src/test/] ifndef::extraStandardDistTestParams[:extraStandardDistTestParams: ] This quickstart includes integration tests, which are located under the `{integrationTestsDirectory}` directory. The integration tests verify that the quickstart runs correctly when deployed on the server. Follow these steps to run the integration tests. . Make sure {productName} server is started. . Make sure the quickstart is deployed. . Type the following command to run the `verify` goal with the `integration-testing` profile activated. + [source,subs="attributes+",options="nowrap"] ---- $ mvn verify -Pintegration-testing {extraStandardDistTestParams} ---- :leveloffset!: // Undeploy the Quickstart :leveloffset: +2 [[undeploy_the_quickstart]] = Undeploy the Quickstart //******************************************************************************* // Include this template if your quickstart does a normal undeployment of an archive. //******************************************************************************* When you are finished testing the quickstart, follow these steps to undeploy the archive. . Make sure {productName} server is started. . Open a terminal and navigate to the root directory of this quickstart. . Type this command to undeploy the archive: + [source,options="nowrap"] ---- $ mvn wildfly:undeploy ---- :leveloffset!: // Build and run sections for other environments/builds :leveloffset: +1 [[build_and_run_the_quickstart_with_provisioned_server]] = Building and running the quickstart application with provisioned {productName} server ifndef::mavenServerProvisioningCommand[] ifeval::["{archiveType}"=="ear"] :mavenServerProvisioningCommand: clean install endif::[] ifeval::["{archiveType}"=="war"] :mavenServerProvisioningCommand: clean package endif::[] ifeval::["{archiveType}"=="jar"] :mavenServerProvisioningCommand: clean install endif::[] endif::mavenServerProvisioningCommand[] ifndef::deploymentTargetDir[] ifndef::deploymentDir[:deploymentTargetDir: target] ifdef::deploymentDir[:deploymentTargetDir: {deploymentDir}/target] endif::deploymentTargetDir[] ifndef::extraStartParams[:extraStartParams: ] ifndef::extraProvisioningTestParams[:extraProvisioningTestParams: ] Instead of using a standard {productName} server distribution, you can alternatively provision a {productName} server to deploy and run the quickstart. The functionality is provided by the WildFly Maven Plugin, and you may find its configuration in the quickstart `pom.xml`: ifndef::ProductRelease[] [source,xml,subs="attributes+"] ---- provisioned-server true org.wildfly.plugins wildfly-maven-plugin ${version.server} ... package ... ---- endif::[] ifdef::ProductRelease[] ifndef::EAPXPRelease[:featurePackLocation: org.jboss.eap:wildfly-ee-galleon-pack] ifdef::EAPXPRelease[:featurePackLocation: org.jboss.eap.xp:wildfly-galleon-pack] [source,xml,subs="attributes+"] ---- provisioned-server true org.jboss.eap.plugins eap-maven-plugin ... {featurePackLocation} ... ... package ... ---- endif::[] ifdef::glowWarnsAboutJNDILookups[] [NOTE] ==== When building, you may notice the following warning: `[WARNING] * jakarta.naming.Context or InitialContext lookup.` This is expected, the quickstart uses JNDI lookups, which WildFly Glow is not able to verify. The warning can be safely ignored. ==== endif::[] [NOTE] ==== When built, the provisioned {productName} server can be found in the `{deploymentTargetDir}/server` directory, and its usage is similar to a standard server distribution, with the simplification that there is never the need to specify the server configuration to be started. ==== Follow these steps to run the quickstart using the provisioned server. .Procedure . Make sure the server is provisioned. + [source,subs="attributes+",options="nowrap"] ---- $ mvn {mavenServerProvisioningCommand} ---- ifdef::addQuickstartUser[] . Add the quickstart user: + [source,subs="+quotes,attributes+",options="nowrap"] ---- $ {deploymentTargetDir}/server/bin/add-user.sh -a -u 'quickstartUser' -p 'quickstartPwd1!' {app-group-command} ---- endif::[] ifdef::addQuickstartAdmin[] . Add the quickstart admin: + [source,subs="+quotes,attributes+",options="nowrap"] ---- $ {deploymentTargetDir}/server/bin/add-user.sh -a -u 'quickstartAdmin' -p 'adminPwd1!' {admin-group-command} ---- [NOTE] ==== For Windows, use the `__{jbossHomeName}__\bin\add-user.bat` script. ==== endif::[] . Start the {productName} provisioned server, using the WildFly Maven Plugin `start` goal. + ifndef::deploymentDir[] [source,subs="attributes+",options="nowrap"] ---- $ mvn wildfly:start {extraStartParams} ---- endif::[] ifdef::deploymentDir[] [source,subs="attributes+",options="nowrap"] ---- $ mvn -f {deploymentDir}/pom.xml wildfly:start {extraStartParams} ---- endif::[] . Type the following command to run the integration tests. + [source,subs="attributes+",options="nowrap"] ---- $ mvn verify -Pintegration-testing {extraProvisioningTestParams} ---- . Shut down the {productName} provisioned server. + ifndef::deploymentDir[] [source,subs="attributes+",options="nowrap"] ---- $ mvn wildfly:shutdown ---- endif::[] ifdef::deploymentDir[] [source,subs="attributes+",options="nowrap"] ---- $ mvn -f {deploymentDir}/pom.xml wildfly:shutdown ---- endif::[] :leveloffset!: // Bootable JAR :leveloffset: +1 [[build_and_run_the_quickstart_with_bootable_jar]] = Building and Running the quickstart application in a bootable JAR //****************************************************************************** // This template sets attributes for the different standalone server profiles. // // You must define the `standalone-server-type`. Supported values are: // default // full // full-ha // ha // microprofile // custom //****************************************************************************** // Standalone server with the default profile. ifeval::["{standalone-server-type}"=="default"] :serverProfile: default profile :configFileName: standalone/configuration/standalone.xml :serverArguments: endif::[] // Standalone server with the full profile. ifeval::["{standalone-server-type}"=="full"] :serverProfile: full profile :configFileName: standalone/configuration/standalone-full.xml :serverArguments: -c standalone-full.xml endif::[] // Standalone server with the full HA profile. ifeval::["{standalone-server-type}"=="full-ha"] :serverProfile: full HA profile :configFileName: standalone/configuration/standalone-full-ha.xml :serverArguments: -c standalone-full-ha.xml endif::[] // Start the standalone server with the HA profile. ifeval::["{standalone-server-type}"=="ha"] :serverProfile: HA profile :configFileName: standalone/configuration/standalone-ha.xml :serverArguments: -c standalone-ha.xml endif::[] // Start the standalone server with the Eclipse MicroProfile profile. ifeval::["{standalone-server-type}"=="microprofile"] :serverProfile: MicroProfile profile :configFileName: standalone/configuration/standalone-microprofile.xml :serverArguments: -c standalone-microprofile.xml endif::[] // Standalone server with the custom profile. // NOTE: This profile requires that you define the `serverArguments` variable // within the quickstart README.adoc file. For example: // :serverArguments: --server-config=../../docs/examples/configs/standalone-xts.xml ifeval::["{standalone-server-type}"=="custom"] :serverProfile: custom profile endif::[] // If there is no match, use the default profile. ifndef::serverProfile[] :standalone-server-type: default :serverProfile: default profile :configFileName: standalone/configuration/standalone.xml :serverArguments: endif::serverProfile[] ifndef::mavenServerProvisioningCommand[] ifeval::["{archiveType}"=="ear"] :mavenServerProvisioningCommand: clean install endif::[] ifeval::["{archiveType}"=="war"] :mavenServerProvisioningCommand: clean package endif::[] ifeval::["{archiveType}"=="jar"] :mavenServerProvisioningCommand: clean install endif::[] endif::mavenServerProvisioningCommand[] ifndef::ProductRelease[:bootableJarPluginName: WildFly] ifdef::ProductRelease[:bootableJarPluginName: EAP] You can use the {bootableJarPluginName} Maven Plugin to build a {productName} bootable JAR to run this quickstart. The quickstart `pom.xml` file contains a Maven profile named *bootable-jar*, which activates the bootable JAR packaging when provisioning {productName}, through the `true` configuration element: ifndef::ProductRelease[] [source,xml,subs="attributes+"] ---- bootable-jar true org.wildfly.plugins wildfly-maven-plugin ${version.server} true ... package ... ---- endif::[] ifdef::ProductRelease[] ifndef::EAPXPRelease[:featurePackLocation: org.jboss.eap:wildfly-ee-galleon-pack] ifdef::EAPXPRelease[:featurePackLocation: org.jboss.eap.xp:wildfly-galleon-pack] [source,xml,subs="attributes+"] ---- bootable-jar true org.jboss.eap.plugins eap-maven-plugin ... {featurePackLocation} ... ... true package ... ---- endif::[] [NOTE] ==== The *bootable-jar* profile is activate by default, and when built the {productName} bootable jar file is named `{artifactId}-bootable.jar`, and may be found in the `target` directory. ==== .Procedure . Ensure the bootable jar is built. + [source,subs="attributes+",options="nowrap"] ---- $ mvn {mavenServerProvisioningCommand} ---- . Start the {productName} bootable jar use the WildFly Maven Plugin `start-jar` goal. + [source,subs="attributes+",options="nowrap"] ---- $ mvn wildfly:start-jar ---- + [NOTE] ==== You may also start the bootable jar without Maven, using the `java` command. [source,subs="attributes+",options="nowrap"] ---- $ java -jar target/{artifactId}-bootable.jar ---- ==== . Run the integration tests use the `verify` goal, with the `integration-testing` profile activated. + [source,subs="attributes+",options="nowrap"] ---- $ mvn verify -Pintegration-testing ---- . Shut down the {productName} bootable jar use the WildFly Maven Plugin `shutdown` goal. + [source,options="nowrap"] ---- $ mvn wildfly:shutdown ---- :leveloffset!: // OpenShift :leveloffset: +1 :cloud-platform: OpenShift :openshift: true ifndef::helm-app-name[] :helm-app-name: {artifactId} endif::helm-app-name[] [[build_and_run_the_quickstart_on_openshift]] = Building and running the quickstart application with OpenShift // The openshift profile :leveloffset: +1 [[build-the-quickstart-for-openshift]] = Build the {productName} Source-to-Image (S2I) Quickstart to {cloud-platform} with Helm Charts On OpenShift, the S2I build with Apache Maven uses an `openshift` Maven profile to provision a {productName} server, deploy and run the quickstart in OpenShift environment. ifndef::ProductRelease[] The server provisioning functionality is provided by the WildFly Maven Plugin, and you may find its configuration in the quickstart `pom.xml`: [source,xml,subs="attributes+"] ---- openshift org.wildfly.plugins wildfly-maven-plugin ${version.server} cloud ... package ... ---- You may note that unlike the `provisioned-server` profile it uses the cloud context which enables a configuration tuned for {cloud-platform} environment. endif::[] ifdef::ProductRelease[] ifndef::EAPXPRelease[:featurePackLocation: org.jboss.eap:wildfly-ee-galleon-pack] ifdef::EAPXPRelease[:featurePackLocation: org.jboss.eap.xp:wildfly-galleon-pack] The server provisioning functionality is provided by the EAP Maven Plugin, and you may find its configuration in the quickstart `pom.xml`: [source,xml,subs="attributes+"] ---- openshift org.jboss.eap.plugins eap-maven-plugin ... {featurePackLocation} org.jboss.eap.cloud:eap-cloud-galleon-pack ... package ... ---- You may note that it uses the cloud feature pack which enables a configuration tuned for the {cloud-platform} environment. endif::[] :leveloffset: 1 // Getting Started with Helm :leveloffset: +1 [[getting_started_with_helm_openshift]] = Getting Started with {xpaasproduct-shortname} and Helm Charts This section contains the basic instructions to build and deploy this quickstart to {xpaasproduct-shortname} using Helm Charts. :leveloffset: +1 = Prerequisites ifndef::kubernetes[] * You must be logged in OpenShift and have an `oc` client to connect to OpenShift endif::[] * https://helm.sh[Helm] must be installed to deploy the backend on {cloud-platform}. Once you have installed Helm, you need to add the repository that provides Helm Charts for {ProductShortName}. ifndef::ProductRelease[] [source,options="nowrap"] ---- $ helm repo add wildfly https://docs.wildfly.org/wildfly-charts/ "wildfly" has been added to your repositories $ helm search repo wildfly NAME CHART VERSION APP VERSION DESCRIPTION wildfly/wildfly ... ... Build and Deploy WildFly applications on OpenShift wildfly/wildfly-common ... ... A library chart for WildFly-based applications ---- endif::[] ifdef::ProductRelease[] [source,options="nowrap",subs="+attributes"] ---- $ helm repo add jboss-eap https://jbossas.github.io/eap-charts/ "jboss-eap" has been added to your repositories $ helm search repo jboss-eap NAME CHART VERSION APP VERSION DESCRIPTION {helmChartName} ... ... A Helm chart to build and deploy EAP applications ---- endif::[] :leveloffset: 2 :leveloffset: 1 ifdef::helm-install-prerequisites-openshift[] // Additional steps needed before deploying in Helm [[deploy_helm_prerequisites_openshift]] include::{helm-install-prerequisites-openshift}[leveloffset=+1] endif::helm-install-prerequisites-openshift[] //Prepare Helm for Quickstart Deployment [[deploy_helm_openshift]] :leveloffset: +1 ifndef::helmSetWildFlyArgumentPrefix[] // For use with nested Helm charts :helmSetWildFlyArgumentPrefix: endif::[] ifeval::[{useHelmChartDir} == true] :helm_chart_values: charts endif::[] ifndef::useHelmChartDir[] :helm_chart_values: -f charts/helm.yaml {helmChartName} endif::[] ifdef::kubernetes[] :helm-set-build-enabled: --set {helmSetWildFlyArgumentPrefix}build.enabled=false :helm-set-deploy-route-enabled: --set {helmSetWildFlyArgumentPrefix}deploy.route.enabled=false :helm-set-image-name: --set {helmSetWildFlyArgumentPrefix}image.name="localhost:5000/{artifactId}" :helm-extra-arguments: {helm-set-build-enabled} {helm-set-deploy-route-enabled} {helm-set-image-name} :cloud-cli: kubectl endif::[] ifndef::kubernetes[] :helm-extra-arguments: :cloud-cli: oc endif::[] = Deploy the {ProductShortName} Source-to-Image (S2I) Quickstart to {cloud-platform} with Helm Charts ifndef::kubernetes[] Log in to your OpenShift instance using the `oc login` command. endif::[] The backend will be built and deployed on {cloud-platform} with a Helm Chart for {ProductShortName}. ifndef::kubernetes[] Navigate to the root directory of this quickstart and run the following command: endif::[] ifdef::kubernetes[] Navigate to the root directory of this quickstart and run the following commands: [source,options="nowrap",subs="+attributes"] ---- mvn -Popenshift package wildfly:image ---- This will use the `openshift` Maven profile we saw earlier to build the application, and create a Docker image containing the {productName} server with the application deployed. The name of the image will be `{artifactId}`. Next we need to tag the image and make it available to Kubernetes. You can push it to a registry like `quay.io`. In this case we tag as `localhost:5000/{artifactId}:latest` and push it to the internal registry in our Kubernetes instance: [source,options="nowrap",subs="+attributes"] ---- # Tag the image docker tag {artifactId} localhost:5000/{artifactId}:latest # Push the image to the registry docker push localhost:5000/{artifactId}:latest ---- In the below call to `helm install` which deploys our application to Kubernetes, we are passing in some extra arguments to tweak the Helm build: * `{helm-set-build-enabled}` - This turns off the s2i build for the Helm chart since Kubernetes, unlike OpenShift, does not have s2i. Instead, we are providing the image to use. * `{helm-set-deploy-route-enabled}` - This disables route creation normally performed by the Helm chart. On Kubernetes we will use port-forwards instead to access our application, since routes are an OpenShift specific concept and thus not available on Kubernetes. * `{helm-set-image-name}` - This tells the Helm chart to use the image we built, tagged and pushed to Kubernetes' internal registry above. endif::[] [source,options="nowrap",subs="+attributes"] ---- $ helm install {helm-app-name} {helm_chart_values} --wait --timeout=10m0s {helm-extra-arguments} NAME: {helm-app-name} ... STATUS: deployed REVISION: 1 ---- This command will return once the application has successfully deployed. In case of a timeout, you can check the status of the application with the following command in another terminal: [source,options="nowrap",subs="+attributes"] ---- {cloud-cli} get deployment {helm-app-name} ---- The Helm Chart for this quickstart contains all the information to build an image from the source code using S2I on Java 17: ifndef::requires-http-route[] ifdef::useHelmChartDir[] [source,yaml] ---- include::{docdir}/charts/Chart.yaml[] ---- endif::useHelmChartDir[] ifndef::useHelmChartDir[] [source,yaml] ---- build: uri: https://github.com/wildfly/quickstart.git ref: main contextDir: helloworld deploy: replicas: 1 ---- endif::useHelmChartDir[] endif::requires-http-route[] ifdef::requires-http-route[] [source,options="nowrap",subs="+attributes"] ---- build: uri: {githubRepoCodeUrl} ref: {WildFlyQuickStartRepoTag} contextDir: {artifactId} deploy: replicas: 1 route: tls: enabled: false ---- endif::requires-http-route[] This will create a new deployment on {cloud-platform} and deploy the application. If you want to see all the configuration elements to customize your deployment you can use the following command: [source,options="nowrap",subs="+attributes"] ---- $ helm show readme {helmChartName} ---- ifdef::openshift[] Get the URL of the route to the deployment. [source,options="nowrap",subs="+attributes"] ---- $ oc get route {helm-app-name} -o jsonpath="{.spec.host}" ---- Access the application in your web browser using the displayed URL. endif::[] ifdef::kubernetes[] To be able to connect to our application running in Kubernetes from outside, we need to set up a port-forward to the `{helm-app-name}` service created for us by the Helm chart. This service will run on port `8080`, and we set up the port forward to also run on port `8080`: [source,options="nowrap",subs="+attributes"] ---- kubectl port-forward service/{helm-app-name} 8080:8080 ---- The server can now be accessed via `http://localhost:8080` from outside Kubernetes. Note that the command to create the port-forward will not return, so it is easiest to run this in a separate terminal. endif::[] ifdef::openshift+post-helm-install-actions-openshift[] include::{post-helm-install-actions-openshift}[leveloffset=+1] endif::openshift+post-helm-install-actions-openshift[] ifdef::kubernetes+post-helm-install-actions-kubernetes[] include::{post-helm-install-actions-kubernetes}[leveloffset=+1] endif::kubernetes+post-helm-install-actions-kubernetes[] :leveloffset: 1 // Testing on Openshift :leveloffset: +1 [[run_the_integration_tests_with_openshift]] = Run the Integration Tests with OpenShift The integration tests included with this quickstart, which verify that the quickstart runs correctly, may also be run with the quickstart running on OpenShift. [NOTE] ==== The integration tests expect a deployed application, so make sure you have deployed the quickstart on OpenShift before you begin. ==== ifdef::extra-testing-actions-openshift[] include::{extra-testing-actions-openshift}[leveloffset=+1] endif::extra-testing-actions-openshift[] ifndef::extra-test-arguments-openshift[:extra-test-arguments-openshift:] Run the integration tests using the following command to run the `verify` goal with the `integration-testing` profile activated and the proper URL: ifndef::requires-http-route[] [source,options="nowrap",subs="+attributes"] ---- $ mvn verify -Pintegration-testing -Dserver.host=https://$(oc get route {helm-app-name} --template='{{ .spec.host }}') {extra-test-arguments-openshift} ---- endif::requires-http-route[] ifdef::requires-http-route[] [source,options="nowrap",subs="+attributes"] ---- $ mvn verify -Pintegration-testing -Dserver.host=http://$(oc get route {helm-app-name} --template='{{ .spec.host }}') {extra-test-arguments-openshift} ---- endif::requires-http-route[] [NOTE] ==== The tests are using SSL to connect to the quickstart running on OpenShift. So you need the certificates to be trusted by the machine the tests are run from. ==== :leveloffset: 1 //Prepare Helm for Quickstart Deployment [[undeploy_helm_openshift]] :leveloffset: +1 = Undeploy the {ProductShortName} Source-to-Image (S2I) Quickstart from {cloud-platform} with Helm Charts [source,options="nowrap",subs="+attributes"] ---- $ helm uninstall {helm-app-name} ---- ifdef::kubernetes[] To stop the port forward you created earlier use: [source,options="nowrap",subs="+attributes"] ---- $ kubectl port-forward service/{helm-app-name} 8080:8080 ---- endif::[] :leveloffset: 1 // Unset the attribute :!openshift: :leveloffset!: ifndef::ProductRelease,EAPXPRelease[] //Kubernetes :leveloffset: +1 :cloud-platform: Kubernetes :kubernetes: true ifndef::helm-app-name[] :helm-app-name: {artifactId} endif::helm-app-name[] [[build_and_run_the_quickstart_on_kubernetes]] = Building and running the quickstart application with Kubernetes // The openshift profile :leveloffset: +1 [[build-the-quickstart-for-kubernetes]] = Build the {productName} Quickstart to Kubernetes with Helm Charts For Kubernetes, the build with Apache Maven uses an `openshift` Maven profile to provision a {productName} server, suitable for running on Kubernetes. ifndef::ProductRelease[] The server provisioning functionality is provided by the WildFly Maven Plugin, and you may find its configuration in the quickstart `pom.xml`: [source,xml,subs="attributes+"] ---- openshift org.wildfly.plugins wildfly-maven-plugin ${version.server} cloud ... package ... ---- You may note that unlike the `provisioned-server` profile it uses the cloud context which enables a configuration tuned for {cloud-platform} environment. endif::[] ifdef::ProductRelease[] ifndef::EAPXPRelease[:featurePackLocation: org.jboss.eap:wildfly-ee-galleon-pack] ifdef::EAPXPRelease[:featurePackLocation: org.jboss.eap.xp:wildfly-galleon-pack] The server provisioning functionality is provided by the EAP Maven Plugin, and you may find its configuration in the quickstart `pom.xml`: [source,xml,subs="attributes+"] ---- openshift org.jboss.eap.plugins eap-maven-plugin ... {featurePackLocation} org.jboss.eap.cloud:eap-cloud-galleon-pack ... package ... ---- You may note that it uses the cloud feature pack which enables a configuration tuned for the {cloud-platform} environment. endif::[] :leveloffset: 1 // Getting Started with Helm :leveloffset: +1 [[getting_started_with_helm_kubernetes]] = Getting Started with Kubernetes and Helm Charts This section contains the basic instructions to build and deploy this quickstart to Kubernetes using Helm Charts. == Install Kubernetes In this example we are using https://github.com/kubernetes/minikube[Minikube] as our Kubernetes provider. See the https://minikube.sigs.k8s.io/docs/start/[Minikube Getting Started guide] for how to install it. After installing it, we start it with 4GB of memory. [source,options="nowrap",subs="+attributes"] ---- minikube start --memory='4gb' ---- The above command should work if you have Docker installed on your machine. If, you are using https://podman-desktop.io[Podman] instead of Docker, you will also need to pass in `--driver=podman`, as covered in the https://minikube.sigs.k8s.io/docs/handbook/config/[Minikube documentation]. Once Minikube has started, we need to enable its https://minikube.sigs.k8s.io/docs/handbook/registry/[registry] since that is where we will push the image needed to deploy the quickstart, and where we will tell the Helm charts to download it from. [source,options="nowrap",subs="+attributes"] ---- minikube addons enable registry ---- In order to be able to push images to the registry we need to make it accessible from outside Kubernetes. How we do this depends on your operating system. All the below examples will expose it at `localhost:5000` [source,options="nowrap",subs="+attributes"] ---- # On Mac: docker run --rm -it --network=host alpine ash -c "apk add socat && socat TCP-LISTEN:5000,reuseaddr,fork TCP:$(minikube ip):5000" # On Linux: kubectl port-forward --namespace kube-system service/registry 5000:80 & # On Windows: kubectl port-forward --namespace kube-system service/registry 5000:80 docker run --rm -it --network=host alpine ash -c "apk add socat && socat TCP-LISTEN:5000,reuseaddr,fork TCP:host.docker.internal:5000" ---- :leveloffset: +1 = Prerequisites ifndef::kubernetes[] * You must be logged in OpenShift and have an `oc` client to connect to OpenShift endif::[] * https://helm.sh[Helm] must be installed to deploy the backend on {cloud-platform}. Once you have installed Helm, you need to add the repository that provides Helm Charts for {ProductShortName}. ifndef::ProductRelease[] [source,options="nowrap"] ---- $ helm repo add wildfly https://docs.wildfly.org/wildfly-charts/ "wildfly" has been added to your repositories $ helm search repo wildfly NAME CHART VERSION APP VERSION DESCRIPTION wildfly/wildfly ... ... Build and Deploy WildFly applications on OpenShift wildfly/wildfly-common ... ... A library chart for WildFly-based applications ---- endif::[] ifdef::ProductRelease[] [source,options="nowrap",subs="+attributes"] ---- $ helm repo add jboss-eap https://jbossas.github.io/eap-charts/ "jboss-eap" has been added to your repositories $ helm search repo jboss-eap NAME CHART VERSION APP VERSION DESCRIPTION {helmChartName} ... ... A Helm chart to build and deploy EAP applications ---- endif::[] :leveloffset: 2 :leveloffset: 1 ifdef::helm-install-prerequisites-kubernetes[] // Additional steps needed before deploying in Helm [[deploy_helm_prerequisites_kubernetes]] include::{helm-install-prerequisites-kubernetes}[leveloffset=+1] endif::helm-install-prerequisites-kubernetes[] //Prepare Helm for Quickstart Deployment [[deploy_helm_kubernetes]] :leveloffset: +1 ifndef::helmSetWildFlyArgumentPrefix[] // For use with nested Helm charts :helmSetWildFlyArgumentPrefix: endif::[] ifeval::[{useHelmChartDir} == true] :helm_chart_values: charts endif::[] ifndef::useHelmChartDir[] :helm_chart_values: -f charts/helm.yaml {helmChartName} endif::[] ifdef::kubernetes[] :helm-set-build-enabled: --set {helmSetWildFlyArgumentPrefix}build.enabled=false :helm-set-deploy-route-enabled: --set {helmSetWildFlyArgumentPrefix}deploy.route.enabled=false :helm-set-image-name: --set {helmSetWildFlyArgumentPrefix}image.name="localhost:5000/{artifactId}" :helm-extra-arguments: {helm-set-build-enabled} {helm-set-deploy-route-enabled} {helm-set-image-name} :cloud-cli: kubectl endif::[] ifndef::kubernetes[] :helm-extra-arguments: :cloud-cli: oc endif::[] = Deploy the {ProductShortName} Source-to-Image (S2I) Quickstart to {cloud-platform} with Helm Charts ifndef::kubernetes[] Log in to your OpenShift instance using the `oc login` command. endif::[] The backend will be built and deployed on {cloud-platform} with a Helm Chart for {ProductShortName}. ifndef::kubernetes[] Navigate to the root directory of this quickstart and run the following command: endif::[] ifdef::kubernetes[] Navigate to the root directory of this quickstart and run the following commands: [source,options="nowrap",subs="+attributes"] ---- mvn -Popenshift package wildfly:image ---- This will use the `openshift` Maven profile we saw earlier to build the application, and create a Docker image containing the {productName} server with the application deployed. The name of the image will be `{artifactId}`. Next we need to tag the image and make it available to Kubernetes. You can push it to a registry like `quay.io`. In this case we tag as `localhost:5000/{artifactId}:latest` and push it to the internal registry in our Kubernetes instance: [source,options="nowrap",subs="+attributes"] ---- # Tag the image docker tag {artifactId} localhost:5000/{artifactId}:latest # Push the image to the registry docker push localhost:5000/{artifactId}:latest ---- In the below call to `helm install` which deploys our application to Kubernetes, we are passing in some extra arguments to tweak the Helm build: * `{helm-set-build-enabled}` - This turns off the s2i build for the Helm chart since Kubernetes, unlike OpenShift, does not have s2i. Instead, we are providing the image to use. * `{helm-set-deploy-route-enabled}` - This disables route creation normally performed by the Helm chart. On Kubernetes we will use port-forwards instead to access our application, since routes are an OpenShift specific concept and thus not available on Kubernetes. * `{helm-set-image-name}` - This tells the Helm chart to use the image we built, tagged and pushed to Kubernetes' internal registry above. endif::[] [source,options="nowrap",subs="+attributes"] ---- $ helm install {helm-app-name} {helm_chart_values} --wait --timeout=10m0s {helm-extra-arguments} NAME: {helm-app-name} ... STATUS: deployed REVISION: 1 ---- This command will return once the application has successfully deployed. In case of a timeout, you can check the status of the application with the following command in another terminal: [source,options="nowrap",subs="+attributes"] ---- {cloud-cli} get deployment {helm-app-name} ---- The Helm Chart for this quickstart contains all the information to build an image from the source code using S2I on Java 17: ifndef::requires-http-route[] ifdef::useHelmChartDir[] [source,yaml] ---- include::{docdir}/charts/Chart.yaml[] ---- endif::useHelmChartDir[] ifndef::useHelmChartDir[] [source,yaml] ---- build: uri: https://github.com/wildfly/quickstart.git ref: main contextDir: helloworld deploy: replicas: 1 ---- endif::useHelmChartDir[] endif::requires-http-route[] ifdef::requires-http-route[] [source,options="nowrap",subs="+attributes"] ---- build: uri: {githubRepoCodeUrl} ref: {WildFlyQuickStartRepoTag} contextDir: {artifactId} deploy: replicas: 1 route: tls: enabled: false ---- endif::requires-http-route[] This will create a new deployment on {cloud-platform} and deploy the application. If you want to see all the configuration elements to customize your deployment you can use the following command: [source,options="nowrap",subs="+attributes"] ---- $ helm show readme {helmChartName} ---- ifdef::openshift[] Get the URL of the route to the deployment. [source,options="nowrap",subs="+attributes"] ---- $ oc get route {helm-app-name} -o jsonpath="{.spec.host}" ---- Access the application in your web browser using the displayed URL. endif::[] ifdef::kubernetes[] To be able to connect to our application running in Kubernetes from outside, we need to set up a port-forward to the `{helm-app-name}` service created for us by the Helm chart. This service will run on port `8080`, and we set up the port forward to also run on port `8080`: [source,options="nowrap",subs="+attributes"] ---- kubectl port-forward service/{helm-app-name} 8080:8080 ---- The server can now be accessed via `http://localhost:8080` from outside Kubernetes. Note that the command to create the port-forward will not return, so it is easiest to run this in a separate terminal. endif::[] ifdef::openshift+post-helm-install-actions-openshift[] include::{post-helm-install-actions-openshift}[leveloffset=+1] endif::openshift+post-helm-install-actions-openshift[] ifdef::kubernetes+post-helm-install-actions-kubernetes[] include::{post-helm-install-actions-kubernetes}[leveloffset=+1] endif::kubernetes+post-helm-install-actions-kubernetes[] :leveloffset: 1 // Testing on Openshift :leveloffset: +1 [[run_the_integration_tests_with_kubernetes]] = Run the Integration Tests with Kubernetes The integration tests included with this quickstart, which verify that the quickstart runs correctly, may also be run with the quickstart running on Kubernetes. [NOTE] ==== The integration tests expect a deployed application, so make sure you have deployed the quickstart on Kubernetes before you begin. ==== ifdef::extra-testing-actions-kubernetes[] include::{extra-testing-actions-kubernetes}[leveloffset=+1] endif::extra-testing-actions-kubernetes[] ifndef::extra-test-arguments-kubernetes[:extra-test-arguments-kubernetes:] Run the integration tests using the following command to run the `verify` goal with the `integration-testing` profile activated and the proper URL: [source,options="nowrap",subs="+attributes"] ---- $ mvn verify -Pintegration-testing -Dserver.host=http://localhost:8080 {extra-test-arguments-kubernetes} ---- :leveloffset: 1 //Prepare Helm for Quickstart Deployment [[undeploy_helm_kubernetes]] :leveloffset: +1 = Undeploy the {ProductShortName} Source-to-Image (S2I) Quickstart from {cloud-platform} with Helm Charts [source,options="nowrap",subs="+attributes"] ---- $ helm uninstall {helm-app-name} ---- ifdef::kubernetes[] To stop the port forward you created earlier use: [source,options="nowrap",subs="+attributes"] ---- $ kubectl port-forward service/{helm-app-name} 8080:8080 ---- endif::[] :leveloffset: 1 // Unset the attribute :!kubernetes: :leveloffset!: endif::[]