Over time, the software industry has come up with many ways to deliver code. Why is it so important to be in production as much as possible? What advantages and disadvantages do we have in rapid releases? Let’s talk about how to be faster, safer, and with better quality.
2. RERO
Background
Release early. Release often.
And listen to your customers
Eliminate the risk of creating software that
no one will use
1997. Eric S. Raymond
3. Time-based
▪ Scope of release is defined in
advance
▪ Strict schedule for releases: every
week/month/year
▪ Predictability for contributors and
users
Background
8. What is often?
= amount of developers / 2
per day
but it can be more
Background
9. I know what I’m talking about
We have daily releases in production~500
10. It can be risky
Be prepared for the
production bugs
We all know that they are exists,
you must be honest with yourself
Risks
11. Therac-25
The Worst Computer Bugs in History:
Race conditions in Therac-25
These computer bugs left a significant
impact on the people who experienced
them
motivationRisks
12. Boeing 737
Boeing 737 cockpit screens go blank if
lands on specific runways:
with a 270-degree true heading
source
motivationRisks
21. Feature flags
Strategy
Putting an if condition around a new
feature, and having it related to something
external to the code
if (isFeatureEnabled) {
doSomething();
}
22. Separation of
delivery and release
Strategy
▪ Developing the feature bothers no one
▪ QA and other developers get the feature
as needed
▪ Deployment is low risk and uneventful
▪ Releasing a feature is a business
decision
39. Git Event
Listener
Produce Kafka messages for every
commit push to any of Wix repositories,
this message is consumed by any
service (not only Lifecycle services that
what to be notified of such events).
Experience
https://www.wix.engineering/post/making-order-in-ci-cd-mess
41. Build Server
Experience
We extended TeamCity capabilities and
added a plugin that produces a Kafka
event whenever a build starts /
completes / fails.
https://www.wix.engineering/post/making-order-in-ci-cd-mess
42. Repo
Descriptor
Service
Experience
Since we use several build tools and
technologies, we created a general
entity called “Artifact”
https://www.wix.engineering/post/making-order-in-ci-cd-mess
43. Build Descriptor
Service
Experience
Consumes TeamCity messages and
triggers a complete “build refresh”
process.
Once the task is completed, a message
is delivered to all consumers
https://www.wix.engineering/post/making-order-in-ci-cd-mess
45. RC service
(release candidate)
Experience
Manages the RC process, validates the
build can be RCed (no pending changes
to build in CI TC and CI build is green)
and monitors the progress of the RC
process
https://www.wix.engineering/post/making-order-in-ci-cd-mess
46. GA service
(global availability)
Experience
Manages the GA/Testbed/Rollback
processes, stores the current and past
GA versions of each build. It is also
responsible for the complete process
https://www.wix.engineering/post/making-order-in-ci-cd-mess
48. Snapshot
Commit to master branch, triggers a build in dev TeamCity, a successful build produces
a SNAPSHOT version artifacts that are stored at Wix binary repository (Artifactory).
Experience
49. RC
The version is ready for deployment; it first needs to be promoted from Snapshot to RC,
this operation practically copied the last snapshot version from SNAPSHOT repository
in Artifactory to RC repository
Experience
50. RC
1 commit = 1 version
Each commit in master potentially can be released to production
Experience
51. RC
We deploy every RC to CDN
CDN: https://static.parastorage.com/services/editor-elements/1.221.0/dist/main.min.js
Experience
52. GA
Once an RC version is ready, the developer can deploy it to production by updating the
production with the new RC version.
Experience
54. Environments
Experience
We have SINGLE prod environment
No staging/pre-prod or something else
On prod we are doing all testing
With the internal tool, we can override any
production artifact version with RC
55. Gradual rollout
Experience
We can open new features for
▪ specific group of instances in a cluster
▪ specific group of people
▪ specific group of GEO
▪ set % for every group