SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Continuous Deployment at
Gozengo
How we implemented CD as a culture from our inception
Daniel Straus
Director of QA
Linkedin:
https://www.linkedin.com/pub/daniel-
straus/3/300/8b2
Overview
 What is Gozengo?
 Why Continuous Deployment?
 Getting Buy In
 Challenges to Implementation
 Why Selenium WebDriver?
 Ruby/Rpsec/Page Objects
 Jenkins/Saucelabs
 How it works
 Demo
 Code Example
 The future
What is Gozengo
 An online vacation shopping site
 We sell hotel and vacation packages
 Currently we offer trips to areas in the Caribbean with more destinations around the
world to come.
Our Tech Team
 Currently about 12 Devs
 3 QA engineers
 4 Ops
So why Continuous
Deployment?
 I started 3 months into Gozengo
 No product at that point
 CD was a decision we made because:
 Would gets us into the habit of working and pushing code quickly
(make it the culture).
 Would make Devs more responsible for checking their stuff at
earlier stages (unit tests, spot checks on local environments, cross
browser checks)
 Would allow us to be more Agile in our development process
(Design, Dev, QA and on to “Prod” quickly so we could iterate).
 Every change would be checked so if something breaks it would be
easier to track down the source of the breakage and revert or fix
quickly.
So how does it all work?
 Github
 Devs work in branches and create pull requests
 All PRs are reviewed by at least 1 other Dev. Items
checked for in the PRs
 Correctness
 Testability
 Unit Tests (where applicable)
 Feature Flags (where applicable)
So how does it all work? (Part
2)
 Selenium. Why?
 Well supported with a large community
 Supports numerous languages (Ruby, Java, Python, etc)
 Supports most browsers (Safari, FF, Chrome, IE, Safari, etc)
 Works on Mac, Windows and Linux
 SauceLabs
 Automation framework - Ruby/Rspec/Page Objects
 Use the Selenium Ruby bindings
 Rspec – Make for really nice English readable test which are self
documenting
 Page Objects – Easier code maintainability
 CI/CD Server - Jenkins
 Manage all our builds/tests
 Allows for parallelism (speeds up testing)
 Works seamlessly with Saucelabs
CDing Ain’t Easy
 Launching builds
 To start only 1 dev held the keys. Not very scalable.
 Any dev should be able to deploy but how?
 Initial solution was a simply shell script that deploys code
to a box. Ok but kind of a pain as you had to:
 SSH to box
 Become a specific user
 Run script
 Make sure build worked and if it did not investigate why via
the console.
 Improvements - Worked with Dev team to implement
Hubot (https://hubot.github.com/) for deploys via our
hipchat client.
CDing Ain’t Easy (cont’d)
 Dev testing responsibility
 Devs write code but what should they test?
 Unit testing is key
 Dealing with 3rd party dependencies (Mocks away)
 FE devs need to check stuff cross browser
 Where to test
 Since FE devs need to test cross browser how do we give
them access to all versions we support? Saucelabs!
 Sandbox environments
 Stand alone environments that devs can push local code to
 Has a copy of the staging DB (refreshed every evening)
 Allows for incremental testing and updating of tests prior to
merging code.
CDing Ain’t Easy (cont’d)
 What to test
 Test everything?????
 Critical Path
 Who writes the Selenium tests and why?
 QA
 Centralized ownership
 Devs can concentrate on writing code/unit tests
 QA has a better understanding of the application as a
whole
 Write the tests in a way that makes it easy for the Devs to
work with if updates are needed (DSL).
Workflow
Pull
Request
PR
Appro
ved?
Deploy to
Staging using
Hubot
The above PR
approval
process
includes
1. Unit tests
added
2. All existing
unit tests
passing.
3. Feature flag
created (if
needed)
Run Regression
tests (Critical
Path) via
Jenkins/SauceL
abs)
Deploying to Staging
Queue – Devs get in line when. To try and keep the
queue moving as quickly as possible CP must run under
8 mins. Devs can agree to push 2 or 3 PRs at one time
but one Dev must take ownership of the deploy (with the
other Devs available if needed).
DEMO
Example Test Output
ENVIRONMENT=staging_customer WHICH_BROWSER=chrome rspec
landing_page_b2c/footer_links_spec.rb --format documentation
Footer Links
Visit footer links
Should display landing page if 'Gozengo.com' is clicked
Should display about page if 'About' is clicked
Should display privacy policy page when 'Privacy Policy' is clicked
Should display Terms and Conditions page when 'Terms and
Conditions is clicked
Should display Contact page when 'Contact' is clicked
Email Sign-Up
Should display the Email Sign-up page when 'Email Sign-Up' is
404 page
Should take the user the 404 page
Getting to Prod
Deploy to
Staging
Run Regression
tests (Critical
Path) via
Jenkins/SauceL
abs)
CP
Passed
?
All existing
functionality is
working properly
and new features
are turned off
behind a feature
flag.
Deploy to
Prod using
Hubot
The Future
 Mobile Web (Appium)
 Native Applications (Appium)
 Visual Diff Testing (Applitools)
 Improve the Queuing system
 Always refining the process (not 1 size fits all)
Gozengo sauce presentation

Weitere ähnliche Inhalte

Was ist angesagt?

Continuous integration
Continuous integrationContinuous integration
Continuous integration
amscanne
 
Introduction To Continuous Integration
Introduction To Continuous IntegrationIntroduction To Continuous Integration
Introduction To Continuous Integration
Christopher Read
 

Was ist angesagt? (20)

DevOps 及 TDD 開發流程哲學
DevOps 及 TDD 開發流程哲學DevOps 及 TDD 開發流程哲學
DevOps 及 TDD 開發流程哲學
 
Automate your build on Android with Jenkins
Automate your build on Android with JenkinsAutomate your build on Android with Jenkins
Automate your build on Android with Jenkins
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Step away from that knife!
Step away from that knife!Step away from that knife!
Step away from that knife!
 
Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDN
 
Dev ops for mobile apps at microsoft teams
Dev ops for mobile apps at microsoft teamsDev ops for mobile apps at microsoft teams
Dev ops for mobile apps at microsoft teams
 
Meet my CI
Meet my CIMeet my CI
Meet my CI
 
Mastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium SuccessfullyMastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium Successfully
 
Jenkins presentation
Jenkins presentationJenkins presentation
Jenkins presentation
 
Building the Test Automation Framework - Jenkins for Testers
Building the Test Automation Framework - Jenkins for TestersBuilding the Test Automation Framework - Jenkins for Testers
Building the Test Automation Framework - Jenkins for Testers
 
Continuous Development Pipeline
Continuous Development PipelineContinuous Development Pipeline
Continuous Development Pipeline
 
Continuous Integration at T3CON08
Continuous Integration at T3CON08Continuous Integration at T3CON08
Continuous Integration at T3CON08
 
Component testing with cypress
Component testing with cypressComponent testing with cypress
Component testing with cypress
 
Introduction To Continuous Integration
Introduction To Continuous IntegrationIntroduction To Continuous Integration
Introduction To Continuous Integration
 
Continuous Integration, the minimum viable product
Continuous Integration, the minimum viable productContinuous Integration, the minimum viable product
Continuous Integration, the minimum viable product
 
Provisioning environments. A simplistic approach
Provisioning  environments. A simplistic approachProvisioning  environments. A simplistic approach
Provisioning environments. A simplistic approach
 
Continuous Integration with Maven for Android apps
Continuous Integration with Maven for Android appsContinuous Integration with Maven for Android apps
Continuous Integration with Maven for Android apps
 
CICD by Teerapat
CICD by TeerapatCICD by Teerapat
CICD by Teerapat
 
Production Ready WordPress - WC Utrecht 2017
Production Ready WordPress  - WC Utrecht 2017Production Ready WordPress  - WC Utrecht 2017
Production Ready WordPress - WC Utrecht 2017
 
Automated Testing with Cucumber, PhantomJS and Selenium
Automated Testing with Cucumber, PhantomJS and SeleniumAutomated Testing with Cucumber, PhantomJS and Selenium
Automated Testing with Cucumber, PhantomJS and Selenium
 

Andere mochten auch

창의적 발상
창의적 발상창의적 발상
창의적 발상
태경 김
 
Cardiff Bay Proposals
Cardiff Bay ProposalsCardiff Bay Proposals
Cardiff Bay Proposals
Jack Stevens
 

Andere mochten auch (15)

창의적 발상
창의적 발상창의적 발상
창의적 발상
 
Nutritional product of accilex
Nutritional product of accilexNutritional product of accilex
Nutritional product of accilex
 
Top Ideas for the Environment
Top Ideas for the Environment Top Ideas for the Environment
Top Ideas for the Environment
 
Cardiff Bay Proposals
Cardiff Bay ProposalsCardiff Bay Proposals
Cardiff Bay Proposals
 
Genre study - Pop
Genre study - PopGenre study - Pop
Genre study - Pop
 
Cubo poly pro
Cubo poly proCubo poly pro
Cubo poly pro
 
Presentation1
Presentation1Presentation1
Presentation1
 
Experienced Sourcing Manager
Experienced Sourcing ManagerExperienced Sourcing Manager
Experienced Sourcing Manager
 
лицензия Creative commons
лицензия Creative commonsлицензия Creative commons
лицензия Creative commons
 
Bulgarian female names
Bulgarian female namesBulgarian female names
Bulgarian female names
 
Task 4
Task 4Task 4
Task 4
 
anonguide July 17 2015
anonguide July 17 2015anonguide July 17 2015
anonguide July 17 2015
 
CHILD AND DOLPHIN
CHILD AND DOLPHINCHILD AND DOLPHIN
CHILD AND DOLPHIN
 
Q1 pp finalmost
Q1 pp finalmostQ1 pp finalmost
Q1 pp finalmost
 
Top Ideas for Education
Top Ideas for EducationTop Ideas for Education
Top Ideas for Education
 

Ähnlich wie Gozengo sauce presentation

Our DevOps Journey: 6 Month Waterfalls to 1 Hour Code Deploys
Our DevOps Journey: 6 Month Waterfalls to 1 Hour Code DeploysOur DevOps Journey: 6 Month Waterfalls to 1 Hour Code Deploys
Our DevOps Journey: 6 Month Waterfalls to 1 Hour Code Deploys
Dynatrace
 

Ähnlich wie Gozengo sauce presentation (20)

Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CD
 
Strengthen and Scale Security Using DevSecOps - OWASP Indonesia
Strengthen and Scale Security Using DevSecOps - OWASP IndonesiaStrengthen and Scale Security Using DevSecOps - OWASP Indonesia
Strengthen and Scale Security Using DevSecOps - OWASP Indonesia
 
Strengthen and Scale Security for a dollar or less
Strengthen and Scale Security for a dollar or lessStrengthen and Scale Security for a dollar or less
Strengthen and Scale Security for a dollar or less
 
Scale security for a dollar or less
Scale security for a dollar or lessScale security for a dollar or less
Scale security for a dollar or less
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
Continuous Testing 2016
Continuous Testing 2016Continuous Testing 2016
Continuous Testing 2016
 
The "Holy Grail" of Dev/Ops
The "Holy Grail" of Dev/OpsThe "Holy Grail" of Dev/Ops
The "Holy Grail" of Dev/Ops
 
SynapseIndia drupal presentation on drupal info
SynapseIndia drupal  presentation on drupal infoSynapseIndia drupal  presentation on drupal info
SynapseIndia drupal presentation on drupal info
 
DevOps - Boldly Go for Distro
DevOps - Boldly Go for DistroDevOps - Boldly Go for Distro
DevOps - Boldly Go for Distro
 
North east user group tour
North east user group tourNorth east user group tour
North east user group tour
 
Continous integration and delivery for single page applications
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applications
 
Presentation 1 open source tools in continuous integration environment v1.0
Presentation 1   open source tools in continuous integration environment v1.0Presentation 1   open source tools in continuous integration environment v1.0
Presentation 1 open source tools in continuous integration environment v1.0
 
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
 
Automated Web Testing With Selenium
Automated Web Testing With SeleniumAutomated Web Testing With Selenium
Automated Web Testing With Selenium
 
Chef vs Puppet vs Ansible vs SaltStack | Configuration Management Tools Compa...
Chef vs Puppet vs Ansible vs SaltStack | Configuration Management Tools Compa...Chef vs Puppet vs Ansible vs SaltStack | Configuration Management Tools Compa...
Chef vs Puppet vs Ansible vs SaltStack | Configuration Management Tools Compa...
 
DevQAOps - Surviving in a DevOps World
DevQAOps - Surviving in a DevOps WorldDevQAOps - Surviving in a DevOps World
DevQAOps - Surviving in a DevOps World
 
"How to deploy to production 10 times a day" Андрей Шумада
"How to deploy to production 10 times a day" Андрей Шумада"How to deploy to production 10 times a day" Андрей Шумада
"How to deploy to production 10 times a day" Андрей Шумада
 
How to deploy to production 10 times a day
How to deploy to production 10 times a dayHow to deploy to production 10 times a day
How to deploy to production 10 times a day
 
Our DevOps Journey: 6 Month Waterfalls to 1 Hour Code Deploys
Our DevOps Journey: 6 Month Waterfalls to 1 Hour Code DeploysOur DevOps Journey: 6 Month Waterfalls to 1 Hour Code Deploys
Our DevOps Journey: 6 Month Waterfalls to 1 Hour Code Deploys
 
DevOps
DevOpsDevOps
DevOps
 

Gozengo sauce presentation

  • 1. Continuous Deployment at Gozengo How we implemented CD as a culture from our inception Daniel Straus Director of QA Linkedin: https://www.linkedin.com/pub/daniel- straus/3/300/8b2
  • 2. Overview  What is Gozengo?  Why Continuous Deployment?  Getting Buy In  Challenges to Implementation  Why Selenium WebDriver?  Ruby/Rpsec/Page Objects  Jenkins/Saucelabs  How it works  Demo  Code Example  The future
  • 3. What is Gozengo  An online vacation shopping site  We sell hotel and vacation packages  Currently we offer trips to areas in the Caribbean with more destinations around the world to come.
  • 4. Our Tech Team  Currently about 12 Devs  3 QA engineers  4 Ops
  • 5. So why Continuous Deployment?  I started 3 months into Gozengo  No product at that point  CD was a decision we made because:  Would gets us into the habit of working and pushing code quickly (make it the culture).  Would make Devs more responsible for checking their stuff at earlier stages (unit tests, spot checks on local environments, cross browser checks)  Would allow us to be more Agile in our development process (Design, Dev, QA and on to “Prod” quickly so we could iterate).  Every change would be checked so if something breaks it would be easier to track down the source of the breakage and revert or fix quickly.
  • 6. So how does it all work?  Github  Devs work in branches and create pull requests  All PRs are reviewed by at least 1 other Dev. Items checked for in the PRs  Correctness  Testability  Unit Tests (where applicable)  Feature Flags (where applicable)
  • 7. So how does it all work? (Part 2)  Selenium. Why?  Well supported with a large community  Supports numerous languages (Ruby, Java, Python, etc)  Supports most browsers (Safari, FF, Chrome, IE, Safari, etc)  Works on Mac, Windows and Linux  SauceLabs  Automation framework - Ruby/Rspec/Page Objects  Use the Selenium Ruby bindings  Rspec – Make for really nice English readable test which are self documenting  Page Objects – Easier code maintainability  CI/CD Server - Jenkins  Manage all our builds/tests  Allows for parallelism (speeds up testing)  Works seamlessly with Saucelabs
  • 8. CDing Ain’t Easy  Launching builds  To start only 1 dev held the keys. Not very scalable.  Any dev should be able to deploy but how?  Initial solution was a simply shell script that deploys code to a box. Ok but kind of a pain as you had to:  SSH to box  Become a specific user  Run script  Make sure build worked and if it did not investigate why via the console.  Improvements - Worked with Dev team to implement Hubot (https://hubot.github.com/) for deploys via our hipchat client.
  • 9. CDing Ain’t Easy (cont’d)  Dev testing responsibility  Devs write code but what should they test?  Unit testing is key  Dealing with 3rd party dependencies (Mocks away)  FE devs need to check stuff cross browser  Where to test  Since FE devs need to test cross browser how do we give them access to all versions we support? Saucelabs!  Sandbox environments  Stand alone environments that devs can push local code to  Has a copy of the staging DB (refreshed every evening)  Allows for incremental testing and updating of tests prior to merging code.
  • 10. CDing Ain’t Easy (cont’d)  What to test  Test everything?????  Critical Path  Who writes the Selenium tests and why?  QA  Centralized ownership  Devs can concentrate on writing code/unit tests  QA has a better understanding of the application as a whole  Write the tests in a way that makes it easy for the Devs to work with if updates are needed (DSL).
  • 11. Workflow Pull Request PR Appro ved? Deploy to Staging using Hubot The above PR approval process includes 1. Unit tests added 2. All existing unit tests passing. 3. Feature flag created (if needed) Run Regression tests (Critical Path) via Jenkins/SauceL abs)
  • 12. Deploying to Staging Queue – Devs get in line when. To try and keep the queue moving as quickly as possible CP must run under 8 mins. Devs can agree to push 2 or 3 PRs at one time but one Dev must take ownership of the deploy (with the other Devs available if needed).
  • 13. DEMO
  • 14. Example Test Output ENVIRONMENT=staging_customer WHICH_BROWSER=chrome rspec landing_page_b2c/footer_links_spec.rb --format documentation Footer Links Visit footer links Should display landing page if 'Gozengo.com' is clicked Should display about page if 'About' is clicked Should display privacy policy page when 'Privacy Policy' is clicked Should display Terms and Conditions page when 'Terms and Conditions is clicked Should display Contact page when 'Contact' is clicked Email Sign-Up Should display the Email Sign-up page when 'Email Sign-Up' is 404 page Should take the user the 404 page
  • 15. Getting to Prod Deploy to Staging Run Regression tests (Critical Path) via Jenkins/SauceL abs) CP Passed ? All existing functionality is working properly and new features are turned off behind a feature flag. Deploy to Prod using Hubot
  • 16. The Future  Mobile Web (Appium)  Native Applications (Appium)  Visual Diff Testing (Applitools)  Improve the Queuing system  Always refining the process (not 1 size fits all)