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-tracker
directory. -
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 push
command to push your code to an application named
pal-tracker
while making sure that you:- Use the
-p
flag 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
push
command if you need to find the right
options to use. - Use the
-
Watch the
cf push
command 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
routes
list 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 adown
state 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 1G
You should now see your application is running one
instance
(web process),
and is in anup
state.
You can also see the command that Tanzu Application Service
executed to run yourpal-tracker
application,
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