This lab will walk you through the process of deploying an application
to
Tanzu Application Service (Tanzu Application Service).
This is known as “pushing an app to Tanzu Application Service”.
Learning outcomes
After completing the lab, you will be able to:
- Use the Tanzu Application Service CLI to push an app
Getting started
- 
You must have completed (or fast-forwarded to) the 
 Building a Spring Boot Application lab.
- 
In a terminal window, 
 make sure you start in the~/workspace/pal-trackerdirectory.
- 
Make sure you view the 
 Tanzu Application Service Push
 slides after completing this lab for more information about how
 the push process works.
If you get stuck during this lab and need a little more help, please
see the Hints section at the end.
Deploy
In order to deploy a JVM application to Tanzu Application Service you
will first need to create a standalone executable jar file.
This will be a “fat jar” — a single jar file that contains
all of its dependent libraries as well as your application code.
Assemble the jar file
Use Gradle to build the jar file for your application using the
bootJar task.
Push the jar file
- 
Use the cf pushcommand to push your code to an application named
 pal-trackerwhile making sure that you:- Use the -pflag to specify the jar file to push.
- Add the appropriate option to generate a random route.
- Add another option so that it does not start immediately when
 you push it for the first time.
 Use the help for the pushcommand if you need to find the right
 options to use.
- Use the 
- 
Watch the cf pushcommand output closely.
 You will see the CF CLI upload the jar file.
- 
When the command completes, 
 look closely at the output after the
 Waiting for API to complete processing files...line.It will look similar (but not identical) to this: name: pal-tracker requested state: stopped routes: pal-tracker-thankful-wolverine-vv.apps.evans.pal.pivotal.io last uploaded: stack: buildpacks: type: web instances: 0/1 memory usage: 1024M state since cpu memory disk details #0 down 2021-08-13T19:46:20Z 0.0% 0 of 0 0 of 0
- 
Notice the routeslist contains a single route.
 This is also the DNS host name for your application.
 The URL for your application will behttps://<ROUTE>
 Remember it,
 you will need it later in the lab.
- 
Also notice the application is created on 
 Tanzu Application Service,
 but it is in adownstate with noinstances
 (processes) running.
Setting the Java version
Set an environment variable to tell the buildpack to use Java 11.
cf set-env pal-tracker JBP_CONFIG_OPEN_JDK_JRE '{ jre: { version: 11.+ } }'
Start the application
- 
Start the application now that the environment variable is 
 set.cf start pal-tracker
- 
Tanzu Application Service begins the staging process. 
 Once staging finishes, Tanzu Application Service will start your
 application.When the command completes, 
 look close at the output after the
 Waiting for app to start...line.name: pal-tracker requested state: started routes: pal-tracker-thankful-wolverine-vv.apps.evans.pal.pivotal.io last uploaded: Fri 13 Aug 14:59:06 CDT 2021 stack: cflinuxfs3 buildpacks: java type: web instances: 1/1 memory usage: 1024M start command: JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -XX:ActiveProcessorCount=$(nproc) -Djava.ext.dirs= -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=19129 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/.:$PWD/.java-buildpack/container_security_provider/container_security_provider-1.18.0_RELEASE.jar org.springframework.boot.loader.JarLauncher state since cpu memory disk details #0 running 2021-08-13T19:59:22Z 0.0% 131.9M of 1G 160.9M of 1GYou should now see your application is running one instance
 (web process),
 and is in anupstate.
 You can also see the command that Tanzu Application Service
 executed to run yourpal-trackerapplication,
 and it is not the same one you used to run locally.You will see more details in the wrap up section. 
What if you forgot to suppress the start?
Note that if you accidentally set your application to start
when you initially pushed it,
it would have failed to start.
You would have to use the restage command instead of
start after setting the Java Build Pack environment
variable to start the application.
You should be able to explain why this is the case after
completing the next module.
Verify your app on Tanzu Application Service
Check that the application is running by visiting its URL
in a browser and verifying that you see the correct message.
The application that you have built up to now is minimal,
but there is now a solid foundation to build upon.
Learning outcomes
Now that you have completed the lab, you should be able to:
- Use the Tanzu Application Service CLI to push an app
Wrap up
- Review the
 Push an App
 slides for details of the interactions between the CLI and the
 Tanzu Application Service foundation components during the push
 process.
- Review the
 Staging an App
 slides for details about the staging process and the role of
 buildpacks.
Hints
Where can you find the “fat jar” file?
Run the following commands:
cd ~/workspace/pal-tracker
./gradlew bootJar
ls build/libs
You should see a pal-tracker.jar file,
and you can run this locally using:
java -jar build/libs/pal-tracker.jar
This is the file that you need to give to cf push.
What happens if the cf push command fails?
First check that you have provided all of the options described in the
instructions.
If you see a message something like “An app was not successfully
detected by any available buildpack” then you probably omitted the -p
option or gave it the wrong argument.
If you saw a message something like “Routes cannot be mapped” then
you have probably missed the --random-route option.
If the command hangs with “Instances starting” or fails to start
(before setting the JBP_CONFIG_OPEN_JDK_JRE environment variable)
then, as described above, you probably forgot the --no-start option.
Your command should look something like this:
cf push pal-tracker -p build/libs/pal-tracker.jar --random-route --no-start
If you are not certain what state your application is in and want
to try the push again, it is safe to delete your app first:
cf delete pal-tracker
 
         
                 
         
                 
         
                 
        