continuous integration at cartodb march '16

81
Continuous Integration at CartoDB JUAN IGNACIO SÁNCHEZ Software Craftsmanship Madrid

Upload: juan-ignacio-sanchez-lara

Post on 15-Apr-2017

616 views

Category:

Technology


0 download

TRANSCRIPT

  • Continuous Integration at CartoDB

    JUAN IGNACIO SNCHEZ

    Software Craftsmanship Madrid

  • Were hiring! www.cartodb.com/jobs

    First things first

    YOU

    http://www.cartodb.com/jobs

  • LETS GET TO KNOW EACH OTHER!

  • Who has done a software deployment, or release, this year?

  • Who has done a software deployment, or release, during the last 6 months?

  • Who has done a software deployment, or release, during the last month?

  • Who has done a software deployment, or release, during the last week?

  • Who has done a software deployment, or release, during the last day?

  • Tools?

  • Team!

  • Team!

  • Process!

    (just a little)

  • Continuous deployment is more of a deal with

    the devil than magic ;-)

    me

  • Continuous deployment is more of a deal with the devil than magic ;-)

  • 15 / week peak: 7

  • Breaking CartoDB up

  • Components

    1. Editor

    2. Platform

    1. SQL API

    2. Maps API

    3. CartoDB.js

  • Products

    1. SaaS

    2. On-premise

    3. Open Source

  • Product Team

    1. Editor: 8

    2. Data services: 5

    3. Web: 6

    4. APIs: 2

    5. Systems: 5

  • The GOALS in the deal

  • Reduce risk

  • Reduce risk

    SLA-own

    ed

  • Reduce risk

    impact x chance

  • Add value sooner

  • Roadmap

    7 big* features /

    milestone (2 weeks)

    Deliver features

  • 22 PRs each week

  • 15 / week peak: 7

  • users

    support

    users

  • Summary, agile basics

  • (quick) feedback

  • (less) cost

  • HOW

  • Integration Delivery Deployment

    Continuous<

  • Continuous Integration[CI.2] Continuous Integration is a software development

    practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration

    is verified by an automated build (including test) to detect integration errors as quickly as possible.

    XP (1999), Booch method (1991)

  • Continuous Delivery

    [CD.1] 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. [CD.2] You build software in such a way that the software

    can be released to production at any time

  • Continuous Deployment

    [CD.1*] software engineering approach in which teams

    keep producing valuable software in short cycles and

    ensure that the software can be is reliably released at any time. [CD.2*] You build software in such a way that the software

    can be is released to production at any time

  • Continuous Deployment at CartoDB: a deal with the devil?

    JUAN IGNACIO SNCHEZ

    CAS 2015 Basic level talk

  • [CI.1]

    1. Maintain a code repository

    2. Automate the build

    3. Make the build self-testing

    4. Everyone commits to the baseline every day

    5. Every commit (to baseline) should be built

    6. Keep the build fast

    7. Test in a clone of the production environment

    8. Make it easy to get the latest deliverables

    9. Everyone can see the results of the latest build

    10. Automate deployment

    Best practices

  • The CartoDB Way

  • [CI.1]

    1. Maintain a code repository

    2. Automate the build

    3. Make the build self-testing

    4. Everyone commits to the baseline every day

    5. Every commit (to baseline) should be built

    6. Keep the build fast

    7. Test in a clone of the production environment

    8. Make it easy to get the latest deliverables

    9. Everyone can see the results of the latest build

    10. Automate deployment

    Best practices

  • Step 0: hiring

    1. Initiative

    2. Courage

    3. Teamwork

    4. Problem solving

  • Step 1: onboarding

    1. Big picture

    2. Empowerment:

    deploy from the very

    beginning, senior

    or junior

  • Step 2: plan

    1. Incremental

    2. Iterative

    3. Accept tradeoffs

  • Step 3: code

    1. Take issue

    2. Branch master

    3. Code + tests

    4. Staging testing

  • Step 4: pull request

    1. Integration tests

    2. Code style

    3. Code review

  • Step 5: merge

    & deploy

  • Step 6: evil devil

    #devops

    Rollbar

    Kibana

  • No QA?

  • No QA team

  • QA Everywhere

    1. Incremental, iterative

    2. Small steps

    3. Automated test suite

    4. Code reviews

    5. Dogfooding

    6. Support team

    7. Monitoring

    8. .

  • () teams are often discouraged by frequent bugs quietly sneaking into their code. The common solution is to hire dedicated testers; a Quality Assurance (QA) team. This is an expensive mistake.

    - Josh Steiner, Testing Rails

  • As your application grows, now you have to scale the number of hands on deck, who will never be as effective as automated tests at catching regressions. QA increases the time to implement features, as developers must communicate back and forth with another human. Compared to a test suite, this is costly.

    - Josh Steiner, Testing Rails

  • This is not to say that QA is completely useless, but they should be hired in addition to a good test suite, not as a replacement. While manual testers are not as efficient as computers at finding regressions, they are much better at validating subjective qualities of your software, such as user interfaces.

    - Josh Steiner, Testing Rails

  • The devil is in the detail

  • Feature flags

    [FF.1] The basic idea is to have a configuration file that

    defines a bunch of toggles for various features you have

    pending. The running application then uses these toggles

    in order to decide whether or not to show the new

    feature. - Fowler

  • Feature flags

  • Feature flags

  • Canary Releases

    [CR.1] Canary release is a technique to reduce the risk of

    introducing a new software version in production by

    slowly rolling out the change to a small subset of users

    before rolling it out to the entire infrastructure and

    making it available to everybody.

  • Canary Releases

  • Quick rollbackIntegration issues

    Scaling issues

    Corner cases

    1

    2

    3

  • Quick rollbackDrawback

    Migrations in its own PR Previous PR for preparing ORM (ActiveRecord)

  • Post-mortem Affected components Timing What happened

    5W Actions

  • Smoke tests

    Manual testing On-premise releases Tag

  • Tools

  • Jenkins & Travis Clinker > Jenkins

    CI, deployment (Chef)

  • Jenkins & Travis Travis

  • Testing

    RSpec (a little) Capybara Jasmine

  • Static analysis Hound / Atom

    Ruby Rubocop Simplecov Reek

    JS: JSHint

    SCSS: SCSS-Lint

  • Wrapping it Up

  • Obstacles External Dependencies

    Weak typing

    Load

    Integration

  • Costs

    Riskier Have plan B

    backups

    rollbacks

    soft deletions

    Heavy instrumentalized servers

    fast tests

    real time alerting

  • Costs

    Latest issues Unexpected DB locks

    Integration issues

    MultiJSON

  • Benefits Cheaper Early detection & diagnosis No release day panic Small and easy reverts.

  • Benefits Accelerated TTM Building the Right Product Test in actual environment Visible progress

  • Is Continuous Delivery suitable for you?

  • Is Continuous Delivery suitable for you?

    \_()_/

  • Questions?

  • Thank you!

    Juan Ignacio Sanchez Backend Engineer at CartoDB

    [email protected] @juanignaciosl

  • References

    Continuous Integration [CI.1] Wikipedia: https://en.wikipedia.org/wiki/Continuous_integration

    [CI.2] Fowler: http://www.martinfowler.com/articles/continuousIntegration.html

    [CI.3] Duvall: Continuous Integration. Improving Software Quality and Reducing Risk http://

    martinfowler.com/books/duvall.html

    Continuous Delivery [CD.1] Wikipedia: https://en.wikipedia.org/wiki/Continuous_delivery

    [CD.2] Fowler: http://martinfowler.com/bliki/ContinuousDelivery.html

    [CD.3] Agile Alliance: http://guide.agilealliance.org/guide/cd.html

    XP [XP.1] eXtreme Programming: https://en.wikipedia.org/wiki/Extreme_programming

    Feature Flags [FF.1] FeatureToggle - Martin Fowler: http://martinfowler.com/bliki/FeatureToggle.html

    Canary Releases [CR.1] CanaryRelease - Danilo Sato: http://martinfowler.com/bliki/CanaryRelease.html

    Misc [M.1] Booch method: https://en.wikipedia.org/wiki/Booch_method

    [M.2] One Hacker Way - Erik Meijer: https://vimeo.com/110554082

    [M.3] https://medium.com/gutefrage-net-engineering/how-to-escape-from-the-deployment-and-

    integration-hell-5c55e1628137#.o7d0n3a5h

    https://medium.com/gutefrage-net-engineering/how-to-escape-from-the-deployment-and-integration-hell-5c55e1628137#.o7d0n3a5h

  • were hiring, take a look at www.cartodb.com/jobsAnd remember

    YOU

    http://www.cartodb.com/jobs