Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
How to push to production a project with 100+ plugins in less than 10 minutes
1. How to push to production a
project with 100+ plugins in
less than 10 minutes
Thiago Moreira
Senior Consultant @ Liferay Brazil
2. Agenda
• Motivation
• About the project
• Script workflow
• Benefits
• Challenges
• References
• Future
3. Motivation (1/2)
Back in 2010 I was working in another consulting project and
we were getting ready to push to production a new version of
an intranet based on Social Office when I had the following
phone talk with Michael Han
4. Motivation (2/2)
• Thiago: Hey mike, I have to say that I’m confortable with
the project implementation but I’m a little worried about the
task of push to production… (waiting a response like: don’t
worry everything will be fine)
• Mike: Thiago, something will go wrong! The thing is, you
have to be ready to fix it.
• Thiago: Oh man!
5. About the project (1/5)
• 1 ext
• 4 layout templates
• 121 portlets (21 projects with 1 portlet and 1 project with
100 portlets
• 12 hooks
• 6 themes
• 4 webs
• Total 148 plugins.
6. About the project (2/5)
• 4 Production server in cluster
• 1 QA server
• 0 Development server
• 1 Jenkins server
• 1 Nexus server (shared with Jenkins)
• Github as source code server
7. About the project (3/5)
Tomcat and Deployment
Liferay host, deployment
bundles user, application
user, JVM
settings, etc
Liferay
Environment
Liferay
patches
profiles
plugins
Properties
files
Main script
8. About the project (4/5)
• 3 Jenkins jobs were configured to each of the 3 branches
on git.
• Master -> development (every push to upstream)
• QA (homologacao) -> QA (every day at 7:00 am)
• Production -> production (push of a button)
9. About the project (5/5)
Production
Environment
QA Development
Environment Jenkins Environment
12. Check environment
• It is used to check if the environment is correct
1. It checks if the developer set the target.environment
variable
2. It checks if the environment has the correct Ant version
(configurable)
3. It checks if the environment has the correct Maven
version (configurable)
16. Build Tomcat
1. Unpack a vanilla Tomcat from the
${basedir}/src/main/bundle directory to ${basedir}/target
1. Delete all webapps’ directory content
2. Delete all *.bat files from bin directory
3. Set execution permission on *.sh files from bin directory
18. Build Liferay
1. Unpacks the ${basedir}/src/main/bundles/liferay-
version.war to ${tomcat}/webapps/ROOT
2. Unpacks the ${basedir}/src/main/bundles/liferay-
dependencies-version.zip to ${tomcat}/lib
3. Install and configure the patching-tool-4.zip into the right
place (liferay home)
4. Copy the license to the deploy directory
20. Build Application (1/2)
1. Build and direct-deploy the ext project Ant based
2. Call Maven to build the other projects
• The sequence of build is defined at the pom.xml and it is
• commons
• webs
• layouttpl
• themes
• hooks
• portlets
21. Build Application (2/2)
Avoid Liferay to deploy
the plugins on startup
(cold deploy)
3. Call direct-deploy on each of the projects built by Maven
4. Copy the patches to the patching-tool home
5. Copy plugins (downloaded from liferay.com) to deploy
directory
23. Configure Tomcat (1/2)
Worker-Name
1. Creates a MANIFEST.MF file with set a properties that
identifies the current build Can be accessed
thought
www.domain.com/html
/environment.txt
2. Configure portal-ext.properties with environment
properties
3. Configure server.xml with environment properties
26. Deploy to environment (1/2)
1. Pack a tgz bundle with everything built
2. Shutdown the remote Tomcat
3. Remotely remove the old Liferay
4. Copy the bundle to the remote machine
5. Unpack the bundle
6. Change the ownership of liferay home to the application
user and group
7. Configure *.sh to be runnable
8. Apply the patches
9. Start the remote Tomcat
10. Wait 90 seconds (configurable) until start the next node
28. Benefits
• We use the same script to build and deploy on developers
machine as well QA and Production boxes. This ensure that
the script is validated several times before run on production.
• The whole process does not take more than 10 minutes to
finish on any environment.
• We are able to rollback the version in production within a
few minutes
29. Challenges
• Upgrade the version of Liferay from 6.0.11 to 6.0.12
• Push changes that affects the database
• If needed put the production environment in maintenance
automatically through script.
• Test cluster configuration directly on production
30. References
• Continuous Delivery: Reliable Software Releases Through
Build, Test, And Deployment Automation by Jez Humble and
David Farley
31. Future
• Short term
• Add jsp pre-compilation
• Replace the direct-deploy Ant task per a Maven goal
• Use a sudo user to remote deploy instead of root
• Middle term
• Move the infra structure to a PaaS (Cloudbees)
• Script the process of update and restart the web server
when needed
• Long term
• Create a Maven plugin to replace the Ant script
32. Thank you!
thiago.moreira@liferay.com
tmoreira2020 @ facebook | linkedin | plus | slideshare | twitter
Don’t forget to rate the presentation on our mobile app!
Notas del editor
Share our experience during a project that Liferay took over with more than 100 pluginsHow we create a process of push to production and was able to do it consistently
This talk fired two lines of thought: 1º get ready for wherever happen and 2º repeat as much as possible the process to push to production on similar environments to reduce the issues
In the beginning we didn‘t have a Jenkins server or a Development and QA server. The whole process of push to production was manually executedSumming up: chaos!
We matched all branches of the project to one Jenkins job
Describes what the script (deploy.xml) does.
Describes what the script (deploy.xml) does.
Describes what the script (deploy.xml) does.
Describes what the script (deploy.xml) does.
Describes what the script (deploy.xml) does.
Describes what the script (deploy.xml) does.
Describes what the script (deploy.xml) does.
- 3 if Tomcat will run using AJP or HTTP connector and the jvm route name.
- Most of the properties are defined in the environment.properties
Describes what the script (deploy.xml) does.
Every steps in blue runs remotely- The properties from environment.properties are used in the step to connect and access the remote host- You can use a deploy user with limited sudo actions
Every steps in blue runs remotely- The properties from environment.properties are used in the step to connect and access the remote host- You can use a deploy user with limited sudo actions
- The process of migration the script was smooth because we had the all references to Liferay version as a variable