Chapter 10 - DevOps Flashcards
DevOps
a movement that aims to bridge the development (Dev) and operations (Ops) cultures, enabling faster and more agile software deployments
Version Control System (VCS)
First, it provides a repository to store the most recent version of a system’s source code, as well as related files, such as documentation files, configuration files, web pages, wikis, etc. Second, it allows the retrieval of older versions of any file, if necessary.
Distributed Version Control Systems (DVCS)
Instead of a client/server architecture, a DVCS employs a peer-to-peer architecture. In practice, this means that each developer has a full version control system on their own machine, which can communicate with systems on other machines
Git
a distributed version control system developed under the leadership of Linus Torvalds, who is also responsible for creating the Linux operating system
GitHub
a code hosting service that uses the Git system to provide version control.
multirepos
the VCS manages several repositories. Normally, one repository per project.
monorepos
the VCS manages a single repository. Projects are directories of this repository.
Branches
internal and virtual sub-directories, managed by the version control system
main (when using Git) or trunk (when using other systems, such as SVN)
a principal branch
feature branches
before implementing a new feature, developers often create a branch to hold its code
merge
When the new feature is completed, its code must be integrated back into the main branch
integration or merge conflicts
merging can lead to a variety of conflicts
integration hell or merge hell
commonly used to describe the problems related to the integration of feature branches.
Continuous Integration (CI)
a programming practice that originated from Extreme Programming (XP). If a task causes pain, we should not let it accumulate. Instead, we should break it into subtasks that can be performed frequently. Because these subtasks are small and simple, they will cause less pain.
CI Servers
Before a new commit reaches the main branch, the version control system notifies the CI server, which clones the repository,
performs a build, and runs the tests.
The CI server then notifies the commit author about any build errors or failing tests.
Trunk-Based Development (TBD)
there are no longer branches for new features or bug fixes (or they exist only in the developer’s local repository and thus have a short duration). As a result, all development takes place on the main branch, also known as the trunk.
Pair Programming
any new piece of code is reviewed by another developer, who sits next to the lead developer during the programming session
Continuous Deployment (CD)
every new commit that reaches the main branch is deployed to production, typically within a matter of hours, for instance.
Continuous Delivery
every push is prepared for immediate deployment to production. However, an external authority—such as a project manager or a release manager— decides when the pushes will actually be released to customers.
Deployment vs Delivery
Deployment is the process of releasing new software versions to customers.
Delivery is the process of preparing new software versions for potential deployment.
feature flags or feature toggles
variables used to prevent the deployment of partial implementations
canary release
a new feature—guarded by a feature flag—is initially made available to a small group of users, for example, only 5% of the user base. This approach minimizes any problems caused by potential bugs in this new feature. After a successful initial deployment, the percentage of users with access to the new feature is gradually increased until it reaches all users.
A/B Tests
two versions of a feature (old versus new version, for instance) are simultaneously released to distinct user groups, aiming to verify if the new feature indeed adds value to the current implementation.
release flags
feature flags to prevent a code segment from reaching customers when an organization is using Continuous Deployment
business flags
creating different versions of the same software. For instance, consider a system with a free and a paid version. Customers of the paid version have access to more features, with this access controlled by feature flags.