Automation is the process of using tools, scripts, and other software to perform aspects of software development and operations.
Common automated tasks include:
Benefits of automation include:
Continuous Integration is the practice of frequently merging changes into a single code repository. Before being merged, the code is automatically built and tested by automated tools.
Implementing CI requires that a CI server is set up to monitor the repository, automatically build the project, and run automated tests.
CI uses Trunk-based Development where small changes are frequently merged to a main source repository.
Feature Branch Development uses long-lived branches which contain many changes for an entire new feature in a project. The “feature branch” is only merged once the development of the feature is complete.
Some of the most popular tools for CI are Jenkins, Github Actions, and CircleCI. CI tools run on a server which automatically builds and tests code once a merge into the code repository is detected.
Continuous delivery is the process of automatically preparing a project to be deployed to a production environment. It usually involves the code being tested and built on an intermediary environment.
Continuous deployment is the automatic process of deploying a project to the production environment after it has been tested on testing and staging environments.
Feature Flags are a practice of using conditional statements to prevent users from accessing certain features. Once the feature is complete, the condition can be changed and the feature enabled.
Containers provide a standardized way of packaging and running an application across different environments. These containers can be seamlessly used across continuous integration, deployment, and delivery.
Continuous delivery and deployment require that continuous integration practices are already being used in the project.
Dark launching is a practice of continuous deployment where new features are only accessible to a subset of users before being fully released later on. This is accomplished through the use of feature flags, but with conditions based on the type of user. The group of users able to access the features can be gradually expanded until it is fully released.