4 ways to deploy web apps in 2020
Tags: webdev, node, devops, git
Published: 2020-10-22 18:13:58

Application deployment comprises the steps, processes, and activities required to make an application or update available for its intended users. The manner in which you deploy an application matters a great deal as it impacts how quickly your product will respond to changes, and the quality of these changes. Today, most software developers deploy updates, patches, and new applications via a combination of manual, automated, and cloud-based processes, although, manual application deployment is being phased out.

In this post, I will examine 4 different ways in which applications can be deployed. The methods I will be considering are the most common and effective deployment techniques available today. They include:

1. Circle CI and Travis CI
2. Regular cloud hosting + Jenkins
3. Bitbucket pipelines
4. Automated cloud platforms

## CircleCI and Travis CI

Continuous integration (CI) is a software development practice based on the frequent integration of the code into a shared repository. The continuous integration practice helps developers identify problems that may occur during the application development process earlier, and a lot easier. By integrating regularly, less time gets spent looking for errors, leaving more time to spend developing key features.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xvvbmcnq7e5jpmnnujh5.png)

[Circle CI](https://bit.ly/31vjlj2) and [Travis CI](https://bit.ly/2IXFEYr) are the two most popular CI platforms available, each with its pros and cons. The key features of Circle CI are:

* It’s cloud-based, hence, requires no administration.
* It has a free plan, even for business accounts.
* It’s a complete out of a box solution that requires minimal configuration/adjustments.
* You can trigger SSH mode to access container and resolve issues which may arise.
* The caches on Circle CI require installation, minimizing unwanted dependencies thereby increasing application run time.
* Circle CI is compatible with Python, Node.JS, Ruby, Java, Ubuntu, Github, Bitbucket, AWS, Docker, Azure, Slack and a couple of other applications.

#### Advantages of Circle CI

* Fast start.
* Fast setup integration with GitHub.
* Lightweight and with easy to read YAML configuration.
* Cloud-based thus, requires no dedicated servers.
* Has a clear workflow diagram with the ability to re-run specific steps.

#### Disadvantages of Circle CI

* Cost per user is very high.
* UX is not very intuitive.
* Unlike say Jenkins, customization is limited.
* Its documentation is inferior to competing applications.
* Takes a bit of time to get git submodules working properly.

Circle CI and Travis CI are both cloud-based applications with a YAML file configuration but unlike Circle CI, Travis CI supports a lot more languages out of the box.

## Regular cloud hosting + Jenkins

[Jenkins](https://bit.ly/2FRcPM9) is a powerful application that allows for continuous integration and delivery of projects, regardless of the platform you’re working on. By using Jenkins, software companies can accelerate application deployment as Jenkins can build and test at a rapid rate. The Jenkins application supports the complete development lifecycle of an application from building, testing, documenting to deployment.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/zycm1z4l6ovebgy3m0my.png)

The Jenkins stack can be pre-configured for use on cloud via either of Google Cloud Platform, Amazon Web Services or Azure. There are single-tier templates available on Amazon Web Services or Azure with the Azure Master Slave topology providing multi-tier templates.

#### Advantages of Jenkins

* With hundreds of plugins available on its update center, Jenkins can integrate with practically every tool in the continuous integration and delivery toolchain.
* Jenkins is available for free.
* Jenkins is a self-contained Java-based program that gives full control of the system.
* Allows for the lunch of builds with various conditions.

#### Disadvantages of Jenkins

* Requires dedicated servers which means extra expenses.
* Needs time for configuration/customization.
* Compared with modern UI trends, its interface is outdated.
* Jenkins is difficult to install and configure.
* Its continuous integration breaks regularly due to small setting changes.

## Automated cloud platforms

Modern software teams are increasingly adopting the cloud for application deployment but deploying on cloud platforms is significantly different from on your own data center.

There are several platforms offering cloud-based application deployment. However, if you need a platform that makes it easy to deploy and operate applications based on a microservice architecture for almost any cloud, then [Hostman](https://hostman.com) is your best bet.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/5031m5nbba6pm6yl2mk0.png)

Hostman runs on AWS, GCP and Azure and in only a couple of clicks, you can launch your application because everything you need is done by default. Hostman’s deployment automation helps users implement continuous delivery on the cloud.

Its features include:
* Supports 22 frameworks which means applications will run as fast as they’re deployed.
* Connects to your Github, Gitlab, or Bitbucket repository and pulls the code.
* Installs all dependencies, builds the code, and notifies you via Slack or Email.
* Monitors activity on your Git repository and updates the service when you push the code.
* No vendor lock, meaning you can switch from Hostman to other providers easily.

#### Advantages of Automated Cloud Platforms

* They support CI/CD.
* A free tier and the paid versions that begin from as low as $6.5 a month.
* They shortens the development cycle and produces fewer errors.
* Deployments can easily be repeated in a secure manner.

#### Disadvantages of Automated Cloud Platforms

* There could be a feeling of loss of control with cloud-based deployment.

## Bitbucket pipelines

[Bitbucket Pipelines](https://bit.ly/3dQ42qc) is an integrated CI/CD service, built into Bitbucket. It allows you to automatically build, test and even deploy your code, based on a configuration file in your repository. Bitbucket pipelines allow users to create a configuration file called bitbucket-pipelines.yml in their repository where they can specify branches on which they want to trigger pipelines for running builds and deployments.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/l6msxgoxszq1cskt3zai.png)

#### Advantages of Bitbucket Pipelines

* Bitbucket allows for the creation of merge rules specific to the needs of each repository.
* It has robust team and project management tools.
* Great pricing for small and enterprise-level companies (including a free tier).
* Allows for continuous integration- meaning more people can work on the same project.
* Can be integrated with JIRA.
* Bitbucket pipelines make scaling easier and commits are executed on new docker images.

#### Disadvantages of Bitbucket Pipelines

* You can’t store data for your pipelines reliably as data gets lost easily unless cached.
* Per project pricing is a bit more compared with competing deployment applications.
* Setting specific permissions for projects and repositories is not as intuitive as on other solutions available.

## Conclusion

The above application-deployment techniques have their respective strengths, weaknesses, and learning curves. Automated cloud platforms like [Hostman](https://hostman.com) and other industry leaders provide many one-stop benefits.

However, the other hosting techniques offer a range of useful features and integrations with [Jenkins](https://bit.ly/2FRcPM9) well-proven across the industry.

This post is designed to analyze certain aspects of deployment techniques you can employ and while automated cloud deployment platforms seem like the way to go, you should do some more research to decide on what works best for you and your business.