Talk about Continuous Deployment at CartoDB, updated with more tooling and Ruby and JS specific concerns. Many thanks to Software Craftsmanship Madrid for inviting us!
35. 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 veriďŹed by an automated build (including test) to
detect integration errors as quickly as possible.â
XP (1999), Booch method (1991)
36. 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â
37. 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â
38. Continuous Deployment at CartoDB:
a deal with the devil?
JUAN IGNACIO SĂNCHEZ
CAS 2015 Basic level talk
39. [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
41. [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
52. â(âŚ) 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â
53. âAs your application grows, now you have to scale the
number of hands on deck, who will never be as eďŹective
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â
54. â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
eďŹcient as computers at ďŹnding regressions, they are
much better at validating subjective qualities of your
software, such as user interfaces. â
- Josh Steiner, âTesting Railsâ
56. Feature ďŹags
[FF.1] âThe basic idea is to have a conďŹguration ďŹle that
deďŹnes 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
59. 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.â
72. Costs
⢠Riskier
⢠Have plan B
⢠backups
⢠rollbacks
⢠soft deletions
⢠Heavy instrumentalized
⢠servers
⢠fast tests
⢠real time alerting