🎯 What is Continuous Delivery and why should you start using it right now?
Tags: devops, beginners, help, books
Published: 2020-08-03 11:38:09

## Introduction

Hello, DEV people! 👋 Currently, there are many tools that help programmers (and not only) to do their job as comfortable and high-quality as possible.

I got an article, that explains "_what is continuous delivery?_" in a very accessible language, which I'm in a hurry to share with you!

> ☝️ Please note: this is a translation (with some corrections) of [original article](https://bureau.ru/soviet/20200730/) was written by Fedor Borshchev.

<a name="toc"></a>
### 📝 Table of contents

- [What is Continuous Delivery?](#ch-1)
- [Why should I start using it?](#ch-2)
- [Okay, I got it! What's next?](#ch-3)
  - [Books](#ch-3-1)
  - [Services](#ch-3-2)

<a name="ch-1"></a>
## What is Continuous Delivery?

Continuous Delivery (or CD) is a practice where the content of the master branch of the repository is always in production: made a commit and the server automatically updated, and so several times a day. 

> Usually, delivery is the final part of the Continuous Integration (or CI) process.

In a classic release cycle, it's common to save changes to large packs and put them all together. Say, if you made two features in one day, one of which changes the data structure and the other adds useful functionality for users, they will **go together** in the production. 

If migration from the first feature does not work (for some reason), the second feature with useful functionality will most likely **not work** either.

Or you have been making a big feature for a week, which requires updating the framework version, making five different migrations and running _2000 lines of code_.

In a classic release cycle, you will most likely run it at once, and if anything goes wrong in any of these parts, you will know at the very last moment, **close to the deadline**.

[↑ Table of contents](#toc)

<a name="ch-2"></a>
## Why should I start using it?

With Continuous Delivery, it's easier to know all problems before its happen: 

1. You write the code.
2. Then, you put it on production.

You can even delivery in parts, our giant _2000 lines_ feature can be delivered in four small pieces. It turns out that by the time of launch, most of your code will be in production.

> Which means, that all the things that could have been shot at the time of publication, such as ongoing migrations, are likely to be shot in advance.

Running continuous delivery is a sign of a high engineering culture. For example, in the classical approach, every release is a big job for the tester: you have to check with your hands, that **nothing has broken**.

If you deliver code several times a day, you will either have to hire an unreasonable number of testers or you will still have to automate testing. 

You will also have to automate code delivery. If you're used to manually move files and start compiling assets, you will not get any Continuous Delivery.

[↑ Table of contents](#toc)

<a name="ch-3"></a>
## Okay, I got it! What's next?

I offer you a list of books and services to help you explore and start using Continuous Delivery and Integration.

[↑ Table of contents](#toc)

<a name="ch-3-1"></a>
### Books

- [Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation](https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912) by Jez Humble and David Farley
- [Software Delivery Guide](https://martinfowler.com/delivery.html) by Martin Fowler

[↑ Table of contents](#toc)

<a name="ch-3-2"></a>
### Services

Personally, I use [GitHub Actions](https://github.com/features/actions), because all of my projects holds on [GitHub](https://github.com/koddr). But you can find many more such services (_paid or free_), for example:

- [Travis CI](https://travis-ci.com/)
- [CircleCI](https://circleci.com/)
- [Jenkins](https://www.jenkins.io/)

> I recommend to try each of them to understand _exactly_ what will be convenient for you! 😉 

[↑ Table of contents](#toc)

<a name=""></a>
## P.S.

If you want more articles (like this) on this blog, then post a comment below and subscribe to me. Thanks! 😻

And of course, you can help me make developers' lives even better! Just connect to one of my projects as a contributor. It's easy!

My projects that need your help (and stars) 👇

- 🔥 [gowebly][gowebly_url]: A next-generation CLI tool for easily build amazing web applications with Go on the backend, using htmx & hyperscript and the most popular atomic/utility-first CSS frameworks on the frontend.
- ✨ [create-go-app][cgapp_url]: Create a new production-ready project with Go backend, frontend and deploy automation by running one CLI command.
- 🏃 [yatr][yatr_url]: Yet Another Task Runner allows you to organize and automate your routine operations that you normally do in Makefile (or else) for each project.
- 📚 [gosl][gosl_url]: The Go Snippet Library provides snippets collection for working with routine operations in your Go programs with a super user-friendly API and the most efficient performance.
- 🏄‍♂️ [csv2api][csv2api_url]: The parser reads the CSV file with the raw data, filters the records, identifies fields to be changed, and sends a request to update the data to the specified endpoint of your REST API.
- 🚴 [json2csv][json2csv_url]: The parser can read given folder with JSON files, filtering and qualifying input data with intent & stop words dictionaries and save results to CSV files by given chunk size.

<!-- Footer links -->

[gowebly_url]: https://github.com/gowebly
[cgapp_url]: https://github.com/create-go-app
[yatr_url]: https://github.com/koddr/yatr
[gosl_url]: https://github.com/koddr/gosl
[csv2api_url]: https://github.com/koddr/csv2api
[json2csv_url]: https://github.com/koddr/json2csv