43
CONTINUOUS INTEGRATION TEST AND DEPLOYMENT AUTOMATION

Continuous integration using Jenkins and Sonar

Embed Size (px)

DESCRIPTION

Continuous Integration can help your to team release features faster. It reduces the risk of deployment issue and will speed up your development cycle. In this presentation we take a look at how Jenkins and Sonar can help you Test, Analyze, Deploy and gather performance metrics that will help your team increase their development quality and reduce deployment time

Citation preview

Page 1: Continuous integration using Jenkins and Sonar

CONTINUOUS INTEGRATION

TEST AND DEPLOYMENT AUTOMATION

Page 2: Continuous integration using Jenkins and Sonar

• WHY CONTINUOUS INTEGRATION• HOW TO INTEGRATE CONTINUOUS INTEGRATION IN YOUR WORKFLOW• GET TO KNOW JENKINS AND SONAR• DEPLOYMENT PIPELINE - DEMO

FOCUS

Page 3: Continuous integration using Jenkins and Sonar

WHY CONTINUOUS INTEGRATION

Page 4: Continuous integration using Jenkins and Sonar

IF SOMEBODY THINKS OF A GOOD IDEA,HOW DO WE DELIVER IT TO USERS AS QUICKLY AS POSSIBLE

WITHOUT BREAKING EVERYTHING?

THE PROBLEM OF DELIVERING SOFTWARE

Page 5: Continuous integration using Jenkins and Sonar

• FOR LONG PERIODS OF TIME DURING DEVELOPMENT, THE APPLICATION IS NOT IN A WORKING STATE

• NOBODY IS INTERESTED IN RUNNING THE WHOLE APPLICATION UNTIL IT’S FINISHED

• NOBODY TRIES TO RUN THE APPLICATION IN A PRODUCTION-LIKE ENVIRONMENT

• DOUBLY TRUE OF LONG LIVED BRANCHES OR UAT TESTING THAT’S DEFERRED TO THE END

BEHAVIOUR OF SOFTWARE PROJECT

Page 6: Continuous integration using Jenkins and Sonar

RELEASE ANTI-PATTERNS - MANUAL DEPLOYSIGNS:• DETAILED DEPLOYMENT

PROCEDURE• MANUAL REGRESSION TESTING• RELEASE THAT TAKE MORE THAN A

FEW MINUTES• UNPREDICTABLE RELEASE - HAS TO

BE ROLLED BACK• DEPLOYMENT WINDOWS!!!

EFFECTS:• ERRORS WILL OCCUR EVERY TIME

THEY ARE PERFORMED. THE ONLY QUESTION IS WHETHER OR NOT THE ERRORS ARE SIGNIFICANT

• NOT REPEATABLE OR RELIABLE• MANUAL DEPLOYMENTS DEPENDS

ON DEPLOYMENT EXPERTS• BORING AND REPETITIVE• EXPENSIVE MANUAL TESTING• NOT AUDITABLE

Page 7: Continuous integration using Jenkins and Sonar

SOFTWARE RELEASES CAN AND SHOULD BE:

• LOW-RISK

• FREQUENT

• CHEAP

• RAPID

• PREDICTABLE

CAN WE DO BETTER?

Page 8: Continuous integration using Jenkins and Sonar

• AUTOMATED - IF THE BUILD, DEPLOY, TEST AND RELEASE IS NOT AUTOMATED, IT IS NOT REPEATABLE. IT WILL BE DIFFERENT EVERY TIME. RELEASING SHOULD BE AN ENGINEERING DISCIPLINE

• FREQUENT - IF THE RELEASE IS FREQUENT, THE DELTA BETWEEN RELEASE WILL BE SMALL.

• EASIER TO ROLL BACK

• FASTER FEEDBACK

HOW?

Page 9: Continuous integration using Jenkins and Sonar

• REPEATABLE, RELIABLE, PREDICTABLE RELEASE PROCESS

• ERROR REDUCTION - NO HUMAN BEING OR TEAM OF HUMAN BEING CAN SPOT A BREAKING CHANGE IN MILLIONS OF LINES OF CODE - LET THE COMPUTER DO THAT

• LOWERING STRESS - PEACE OF MIND THAT THE FEATURES WORK

• FLEXIBLE DEPLOYMENT SCHEDULES - DEPLOY AT THE PUSH OF A BUTTON —YES EVEN ON FRIDAY @ 1:30PM

BENEFITS

Page 10: Continuous integration using Jenkins and Sonar

“”

THE FIRST TIME YOU DO AUTOMATION, IT WILL BE PAINFUL — BUT IT WILL BECOME EASIER

AND THE BENEFITS WILL BE INCALCULABLE

Page 11: Continuous integration using Jenkins and Sonar

HOW TO INTEGRATE CI INTO YOUR WORKFLOW

Page 12: Continuous integration using Jenkins and Sonar

“”

IN SOFTWARE, WHEN SOMETHING IS PAINFUL, THE WAY TO REDUCE

THE PAIN IS TO DO IT MORE FREQUENTLY, NOT LESS

Page 13: Continuous integration using Jenkins and Sonar

SOFTWARE CAN BE BROKEN DOWN INTO 4 COMPONENTS:

• HOST ENVIRONMENT

• CONFIGURATION

• CODE

• DATA

KEEP EVERYTHING IN VERSION CONTROL!!!

PRINCIPLES OF SOFTWARE DELIVERY

Page 14: Continuous integration using Jenkins and Sonar

• CAN I REPRODUCE ANY OF MY ENVIRONMENTS (OS, SOFTWARE INSTALLED, CONFIGURATION)

• CAN I MAKE AN INCREMENTAL CHANGE TO THESE ENVIRONMENTS

• CAN I TRACE BACK THIS CHANGE, WHO MADE IT AND WHEN THEY MADE IT

• IS IT EASY FOR EVERY MEMBER TO APPLY THESE CHANGES

HOST ENVIRONMENT

Page 15: Continuous integration using Jenkins and Sonar

TREAT YOUR CONFIGURATION LIKE CODE• BASED ON APPLICATION AND ENVIRONMENT, IT SHOULD BE EASY TO

SEE WHAT THE OPTIONS ARE• USE CLEAR NAMING CONVENTIONS• MODULAR AND ENCAPSULATED• DRY / KISS• TESTED

CONFIGURATION

Page 16: Continuous integration using Jenkins and Sonar

“”

IT SHOULD ALWAYS BE CHEAPER TO CREATE A NEW ENVIRONMENT

THAN TO REPAIR AN OLD ONE

Page 17: Continuous integration using Jenkins and Sonar

• MUST BE IN VERSION CONTROL

• MUST HAVE A TESTING STRATEGY ( > 70% COVERAGE)

• USE MEANINGFUL COMMIT MESSAGES

• BRANCH BY ABSTRACTION

• USE DEPENDENCY INJECTION

• TDD

CODE

Page 18: Continuous integration using Jenkins and Sonar

“”

TEST DRIVEN DEVELOPMENT IS ESSENTIAL TO ENABLE THE PRACTICE OF CONTINUOUS

DELIVERY

Page 19: Continuous integration using Jenkins and Sonar

• VERSION YOUR DATABASE CREATION AND MIGRATIONS (DBDEPLOY, PHINX)

• STRIVE TO RETAIN FORWARD AND BACKWARD COMPATIBILITY

• TEST DATA IS CREATED AND MAINTAINED IN A DIFFERENT PARTITION

DATA

Page 20: Continuous integration using Jenkins and Sonar

• DON’T CHECK-IN BROKEN CODE

• RUN TEST LOCALLY BEFORE COMMITTING

• WAIT FOR TEST TO PASS BEFORE MOVING ON

• FIX BROKEN BUILDS IMMEDIATELY

• ALWAYS BE PREPARED TO REVERT TO PREVIOUS VERSION

• DON’T COMMENT OUT FAILING TESTS

ESSENTIAL PRACTICES

Page 21: Continuous integration using Jenkins and Sonar

• FAILING A BUILD FOR ARCHITECTURAL BREACH

• FAILING A BUILD FOR SLOW TESTS

• FAILING A BUILD FOR WARNING OR CODE STYLE BREACH

• FAILING A BUILD FOR PERFORMANCE

PRACTICES TO CONSIDER

Page 22: Continuous integration using Jenkins and Sonar

GET TO KNOW JENKINS AND SONAR

Page 23: Continuous integration using Jenkins and Sonar

• JENKINS IS AN OPEN SOURCE CONTINUOUS INTEGRATION SERVER WRITTEN IN JAVA

• JENKINS WAS ORIGINALLY DEVELOPED AS THE HUDSON PROJECT• JENKINS IS A FORK OF HUDSON WHEN ORACLE TRADEMARKED THE

PROJECT

JENKINS

Page 24: Continuous integration using Jenkins and Sonar

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -!

sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'!

sudo apt-get update!

sudo apt-get install jenkins

JENKINS - INSTALLATION

Page 25: Continuous integration using Jenkins and Sonar

JENKINS - CONFIGURE

JENKINS-PHP.ORG

Page 26: Continuous integration using Jenkins and Sonar

JENKINS - JOBS

Page 27: Continuous integration using Jenkins and Sonar

JENKINS - JOBS

Page 28: Continuous integration using Jenkins and Sonar

JENKINS - BUILD & POST-BUILD

Page 29: Continuous integration using Jenkins and Sonar

JENKINS - NODES

Page 30: Continuous integration using Jenkins and Sonar

JENKINS - DASHBOARD

Page 31: Continuous integration using Jenkins and Sonar

JENKINS - POST-BUILD

Page 32: Continuous integration using Jenkins and Sonar

JENKINS - RESULTS

Page 33: Continuous integration using Jenkins and Sonar

JENKINS - TEST COVERAGE

Page 34: Continuous integration using Jenkins and Sonar

JENKINS - ACCEPTANCE TEST - BEHAT & PHANTOMJS

Page 35: Continuous integration using Jenkins and Sonar

JENKINS - PERFORMANCE TEST

Page 36: Continuous integration using Jenkins and Sonar

JENKINS - CHUCK NORRIS

Page 37: Continuous integration using Jenkins and Sonar

sudo sh -c 'echo deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/ > /etc/apt/sources.list'!

sudo apt-get update!

sudo apt-get install sonar

SONAR - INSTALLATION

Page 38: Continuous integration using Jenkins and Sonar

SONAR - CONFIGURE

Page 39: Continuous integration using Jenkins and Sonar

SONAR - QUALITY PROFILE

Page 40: Continuous integration using Jenkins and Sonar

SONAR - QUALITY PROFILE

Page 41: Continuous integration using Jenkins and Sonar

SONAR - DASHBOARD

Page 42: Continuous integration using Jenkins and Sonar

DEPLOYMENT PIPELINE

DEMO

Page 43: Continuous integration using Jenkins and Sonar

REFERENCES

JENKINS-PHP.ORG