1. Making changes to the code
As I said earlier, software development boils down to making small changes to the code. Millions of programmers have been doing this process for decades, which has led to it being thoroughly debugged, standardized, and formalized in every possible way.
There is a special program for storing code — Git. Git is a distributed version control system. It not only stores code, but also tracks all changes in it and helps programmers work on projects together without getting in each other’s way 🤝.
With Git, developers can create different versions of a project (branches), keep a complete history of changes, and even roll back to any point in the past. It’s like a time machine for code! Git helps merge changes and resolve conflicts, which is why it has become the main tool for teamwork in modern development. 👩💻
2. Building the project
Before a project can be tested or uploaded to a server, it needs to be built.
🏗️ Project build is the process of compiling a project’s source code into executable programs or other runnable formats, often including testing and deployment. This is a key aspect of software development that ensures the program is ready for use.
A build is not just compilation, although compilation is often part of the build process. After the build is complete, you may end up with dozens or even hundreds of files that need to be uploaded to various servers.
Build tools can be low-level, such as:
- ☕ Maven and Gradle — widely used in Java projects for dependency management and builds.
- 🐜 Apache Ant — another Java build tool that provides great flexibility in writing build scripts.
- 🖥️ MSBuild — used to build projects created with Microsoft Visual Studio.
- ⚙️ Make — a classic build tool that uses a Makefile to define build rules; especially popular in C and C++ projects.
- 🌐 Webpack — often used to build JavaScript applications, managing dependencies and modules.
- 📜 Gulp and Grunt — tools that help automate frequently performed tasks in web application development, such as file minification and compiling SCSS to CSS.
There are also high-level build tools. More on them below.
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) is a methodology that assumes continuous merging of changes from all development branches into the main branch, as well as automated testing and deployment of those changes. This makes it possible to quickly identify and fix bugs, increasing development efficiency and speed.
One of the most common, though somewhat outdated, CI/CD systems is Jenkins. If you work at a small company, there is about an 80% chance they will use it.
🤖 Jenkins is a popular automation system used for continuous integration and delivery (CI/CD). Jenkins makes it possible to automate various stages of software development, including building, testing, and deployment, which improves code quality and speeds up the development process.
If you end up in a large company, there may be 5 more options to choose from:
- 🚦 TeamCity — a powerful commercial system from JetBrains. Offers deep integration with various development and testing environments.
- 📝 GitLab CI — a built-in part of GitLab that provides continuous integration and delivery with configuration via YAML files.
- ☁️ CircleCI — a cloud CI/CD service that supports test and deployment automation for many projects.
- 🦑 Travis CI — one of the first cloud CI services, used across many open-source projects. Integrates well with GitHub.
- 🎍 Bamboo — a product by Atlassian, tightly integrated with the company’s other tools such as Jira and Bitbucket.
You don’t need to know them or be able to work with them — usually a company has DevOps specialists who set up all these processes. You just need to know they exist and understand what people are talking about if Jenkins, CI/CD, or “continuous integration” comes up in conversation.
4. Delivering the project to the server
It’s not enough to write a project — it also needs to end up on your server. In general, deploying (deploy) a project to a server is the process of placing and activating a web application on a server so that it is available to users via the internet 🚚.
This process includes transferring the project files to the server, configuring the server environment, databases, and dependencies, as well as configuring network settings and security 😅.
How do you think your code gets onto the server? Will someone upload it there? Or maybe you’ll connect via SSH to a remote server, upload a couple of files, and configure everything? Relax: no one does it like that anymore. Now there’s Docker.
🐳 Docker is a platform for developing, delivering, and running applications using containers. Docker simplifies creating, deploying, and running applications by packaging them together with all dependencies and the environment into a single compact artifact. This ensures consistency across all stages: from development to testing to production.
Docker lets you package your project (or projects) into a Docker container. It’s something like a virtual machine.
And while on any Docker forum you’ll get roasted if you call it a “virtual machine,” you can think of a Docker container as a virtual machine — just much more lightweight.
In essence, a Docker container is a “virtual virtual machine”. Virtual machines include a full copy of the operating system, the OS kernel, and virtual hardware, while Docker containers share the host kernel and can be lighter and faster ⚡.
Deploying a project with Docker greatly simplifies the process, providing speed and reliability. The project is packaged into Docker containers, which can be easily moved and run on any system that supports Docker 🚢.
This eliminates problems related to differences in server environments and makes it easy to scale the application by adding or removing containers according to load. Everyone has switched to Docker — it’s very convenient and very simple.
GO TO FULL VERSION