Hi,
I'm working on a project where we are taking a "microservice" approach with
a bunch of Spring Boot self-executable JAR files (instead of generating the
WAR file and deploying it to a servlet container).
Focusing on one of the microservices (just to make it simple), I managed to
properly configure it as a project in Jenkins using Git as the Source Code
Management and then Gradle to build it --> gradle build
After Jenkins executes the "gradle build" command, I need to "execute" the
just-generated JAR file in a separate process, so Jenkins can finish up the
build and wait for the next one (whatever the trigger mechanism is).
However, I've been playing around different configurations to execute the
JAR file and I cannot find the one which fits perfectly my requirements
(remember: after gradle finishes the build, execute the JAR file and end
the Jenkins build process).
To put it step-by-step, this is what I'm trying to achieve:
1. Pull latest changes from Git repository.
2. Execute shell to kill (if existing from a previous build) the current
JAR execution.
3. Run the gradle build task.
4. Execute shell to start up the self-executable/bootable JAR file.
5. Email notification.
This is what I have accomplished so far, but not sure whether it's the best
approach or not, so asking the experts in this list:
1. OK.
2. I'm using this script:
ps axf | grep user-project-service | grep -v grep | awk '{print "kill -9 "
$1}' | sh
3. OK.
4. The challenge here is that I don't know upfront what the name of the JAR
would be, so I found this workaround:
find $WORKSPACE/user-project-service/build/libs/ -name "*.jar" -exec java
-jar {}
--spring.config.location=$WORKSPACE/user-project-service/config/application.yml
--spring.profiles.active=production \;
However, although Jenkins runs this shell script properly, it uses the same
thread where Jenkins runs the build, so eventually the build keeps running
forever and "linked" to the execution of the JAR file.
I then tried to execute it in the background by appending '&' at the end of
the script:
find $WORKSPACE/user-project-service/build/libs/ -name "*.jar" -exec java
-jar {}
--spring.config.location=$WORKSPACE/user-project-service/config/application.yml
--spring.profiles.active=production \; &
But then Jenkins seems to not like it, because although it executes the
shell script, the JAR application is not started up. I presume this is due
to the fact that Jenkins finishes up the build process and the system
automatically kills the '&' process, not sure, but it definitively doesn't
work.
Therefore, I would like to understand how to achieve in Jenkins the
scenario where I have to build a JAR file, then execute it (java -jar
<generated_jar_file>) and end up the build, leaving the JAR application
running as an independent process.
Moreover, this example shows only one JAR file, but as you can imagine, I
would be generating a bunch of them, and I would like to execute them as
JAR files once they are build, all in independent processes. Should I set
up one Jenkins job per microservice? Or should I handle all them together
in a single job? Please advice.
Thanks in advance for your help.
Regards,
Enrique Medina.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.