GETTING STARTED WITH CONTINUOUS DELIVERY Lana Kalashnyk @lana_vk wcgp.co
ABOUT ME Lana Kalashnyk BAAS Computer Science minor Business Administration AS in Computer Science emphasis on Networking Cisco CCNA I-IV, Red Hat JAX-RS, NetSuite, WPF, Oracle Java training Houston Java User Group, Houston.Net User Group, Texas DevOps User Group, PuppetConf On Center Software 8+ years enterprise software development for high availability platforms W Consulting Group. Consulting services in cloud platforms design to customers debt trading, auto finance and defense industries. Some of our past projects Debt Trading Defence Auto Finance Construction
Continuous Delivery?
WHY TALK ABOUT CONTINUOUS DELIVERY? Not a new concept Many not sure what it means Few actually use it
WHAT IS CONTINUOUS INTEGRATION? Continuous Integration (CI) is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early. (ThoughtWorks)
WHAT IS CONTINUOUS DELIVERY? Continuous Delivery (CD) is a software engineering approach in which teams keep producing valuable software in short cycles and ensure that the software can be reliably released at any time. Techniques such as automated testing and continuous integration (CI) allow software to be developed to a high standard and easily packaged and deployed to test environments, resulting in the ability to rapidly, reliably and repeatedly push out enhancements and bug fixes to customers at low risk and with minimal manual overhead. (Wikipedia)
WHAT IS DEVOPS? Born of the need to improve IT service delivery agility, the DevOps movement emphasizes communication, collaboration and integration between software developers and IT operations. Rather than seeing these two groups as silos who pass things along but don t really work together, DevOps recognizes the interdependence of software development and IT operations and helps an organization produce software and IT services more rapidly (New Relic)
CONTINUOUS DELIVERY IS NOT CONTINUOUS DEPLOYMENT Continuous Delivery doesn't mean every change is deployed to production ASAP. It means every change is proven to be deployable at any time - Puppet ( Carl Caum)
While continuous deployment may not be right for every company, continuous delivery is an absolute requirement of DevOps practices. Only when you continuously deliver your code can you have true confidence that your changes will be serving value to your customers within minutes of pushing the "go" button, and that you can actually push that button any time the business is ready for it. (PuppetLabs)
STAGES OF CONTINUOUS DELIVERY Theory: Build Module Unit Tests Platform Tests Deliver To Staging Application Acceptance Tests Deploy To Production Post Deploy Tests Fully Automated Steps
STAGES OF CONTINUOUS DELIVERY Practice : Write down the actual steps in your Development Process Build Commit Test Stage Deploy Code
AGILE & CONTINUOUS DELIVERY Continuous Integration was born in Agile roots Continuous Delivery was born out of CI, hence inherits its Agile qualities
REAL WORLD ISSUES Broken deployments Magical servers Exciting releases
WHAT IF YOU AREN T A DEVOPS PRO? Engineering approach not tools Scope wisely Be Agile
FAST TRACK ROAD MAP Start Small & Simple Think The biggest ROI Monitor your process! Think in abstract terms Educate your team
START SMALL & SIMPLE Start with small tasks Automate things you understand Don t automate the automation
THINK THE BIGGEST ROI Automate the most re-used components. Automate the most error-prone components. If time / budget are an issue don t automate UI testing. UI changes too frequently
MONITOR YOUR PROCESS! Automation has to be monitored! Feedback is the reason we automate
ADOPT THE PRINCIPLES NOT TOOLS Speak in CD terms not tools Containers not Docker Automated testing not Cucumber
EDUCATE TO BREAK DOWN THE SILOS Introduce CD into Development Agile needs cross team collaboration. Educate the team! Automated testing is a must.
BONUS : IMMUTABLE CONTAINERS Immutable - not changeable Don t waste time updating servers. Updating live environments is dangerous Deploy new ones Turn off the old ones when ready
BONUS: ONE STEP DEPLOYMENTS Quote If your setup is longer than one line, you are coding in prototype Offload custom steps into scripts
REVELATIONS Non DevOps Engineers should be involved in Continuous Delivery! CD lets you re-purpose the Super Stars Boring is good Frequent Releases make Developers happy
JOIN THE PARADE Stepping into DevOps / CD can feel like : Stepping out of an office building into a parade Explosive innovation in CD/CI/DevOps space
HOW TO SELECT YOUR TOOLS Thinking of Continuous Delivery as an approach rather than a particular tool implementation helps with solving a problem not adopting a hot trend.
Puppet JMeter SonarQube Chef Arquillian Jenkins Pyling Salt Selenium Go CD JSHint Ansible TestComplete Cloud Bees New Relic Packer Bamboo Snap Logic Monitor Docker Vagrant CA Release Automation Pager Duty LXD Jenkins Live Rebel Server Spec Rocket GO CD DerbyIT Test Kitchen DrawBridge TeamCity Maven Cucumber Spoon Bamboo Ant Chaos Monkey CodeDeploy RDS for PostGRES Rake BASH Cloud Formation RDS for MySQL Gradle CURL OPSWorks IBM Urban Code Grunt EC2 CLI TeamCity Python Code Climate Code Pipeline Electric Cloud Cucumber Sonar Code Commit Continuous Delivery Tools Continuous Integration Tools DevOps Tools and many many more
Configuration/DevOps Puppet SonarQube Chef Arquillian Jenkins Pyling Salt Selenium Go CD JSHint Ansible TestComplete Team City Bamboo Containers Docker Packer LXD Rocket DrawBridge Spoon Amazon AWS CodeDeploy Code Commit Cloud Formation OPSWorks CLI Code Pipeline Test Automation Bamboo Snap Logic Monitor Vagrant Cucumber DB Scripting RDS for PostGRES RDS for MySQL IBM Urban Code TeamCity Electric Cloud CI CI/CD CA Release Automation Live Rebel DeployIT Build Maven Ant Rake Gradle Grunt Pager Duty Server Spec JMeterTest Kitchen Cucumber Chaos Monkey Code Climate Sonar BASH Python CURL Testing Monitoring Infrastructure / Load Scripting
REFERENCES Wikipedia ThoughtWorks Docker PuppetLabs New Relic Jenkins CloudBees
SAMPLE IMPLEMENTATION First Let s see what we need : 1. Build Tool : Maven https://maven.apache.org/download.cgi 2. CI Tool : Jenkins https://jenkins-ci.org 3. Automated Testing Arquillian / Selenium / Cucumber http://arquillian.org https://cucumber.io http://www.seleniumhq.org 4. Provisioning tool for new Servers : https://puppetlabs.com/download-learning-vm-thank-you https://www.cloudbees.com/event/continuous-delivery-jenkins-and-puppet-debug-bad-bits-production
SAMPLE IMPLEMENTATION 5. Container Tool : Docker http://www.docker.com 6. Monitoring Tool: Logic Monitor http://lp.logicmonitor.com http://www.pagerduty.com/ 7. Vendors Sample Demos Puppet & Jenkins (CloudBees)https://www.youtube.com/watch?v=vl3ElHTXt78 GoCD and Docker http://www.go.cd/2014/05/18/manage-agents-with-docker.html
RAFFLE!
THANK YOU!! Lana Kalashnyk W Consulting Group wcgp.co Twitter : @lana_vk