Chris,

On 5/19/2017 7:33 AM, Christopher Schultz wrote:
> Israel,
> 
> On 5/18/17 10:52 AM, Israel Timoteo wrote:
>> Any comments from the community for ...
> 
>> 1) What tools is the community using for simultaneous applications 
>> deployment on several servers, let’s say more than 20?
> 
> I am using neither of these strategies, but...
> 
> a. FarmWebDeployer [1]

Doesn't this require a cluster (and therefore multicast)? That becomes
challenging in a cloud environment where there's no multicast easily
available.

> b. Auto-deploy + scp

This would be nice with a little scripting.

> 
> Why in the world are you deploying a web application to 20+
> macos-based servers? Or do you have a Macos client and 20+
> non-macos-based servers?
> 
>> 4) Is JAVA_OPTS required?
> 
> JAVA_OPTS is only required if you require any java opts. Do you
> require such options? Usually, when people set JAVA_OPTS they really
> want to set CATALINA_OPTS instead.
> 
> Hope that helps,
> -chris
> 
> [1] http://tomcat.apache.org/tomcat-8.0-doc/config/cluster-deployer.html

What I do is use Jenkins, Maven, Nexus, and a little Groovy scripting.

1. Maven with the Tomcat Maven Plugin [1]

The WAR file is customized (context.xml) based on the target environment.

2. Jenkins

The build is run by Jenkins, and the build number (with a little 0
padding via a Groovy script) is tacked onto the WAR name as app##0000nn.war.

This allows the parallel deploy feature to be used [2].

3. Nexus

This is where all of the base artifacts are stored. Nexus 2 is used
currently since Nexus 3 doesn't have the REST API needed to cleanly
interact with the Jenkins job via a Groovy script. Maybe I should learn
how to write a Nexus plugin to get lists of artifact versions via REST . . .

4. Groovy scripting

Groovy is used in Jenkins to do the following:

a. Query Nexus to get a list of artifact versions
b. Prevent non-production artifacts from landing on production platforms
c. Create the final number for parallel deployment

To expand this to multiple machines, a set of pipeline jobs could be
created.

a. Build the customized WAR for the target environment
b. Multiple jobs deploy to the servers in the target environment
c. Multiple jobs validate the deployment
d. Final job sends mail to interested parties with success / failure

I know that's a lot of infrastructure. There are certainly things that
could be done differently. Ant (with Ivy), or gradle could be used for
the builds. A different repository manager could be used (other than
Nexus). A different CI / CD system could be used (other than Jenkins).

Anything that meets at least the following requirements could be strung
together.

a. Reliable place to get the WAR file you need to deploy
b. Reliable build system that can be automated
c. Build system that can deploy to Tomcat
d. Testing that the deployment actually worked
e. Notification

The end result is that some authorized person can log into Jenkins,
select a version of an application to deploy, deploy it to the target
environment, know that it's been successful (or not), and have
notifications automatically sent out.

[1] http://tomcat.apache.org/maven-plugin.html
[2]
https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Parallel_deployment

. . . just my (rather lengthy) 2 cents
/mde/

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to