Most applications today have multiple components that can be deployed together or independently. A common problem that occurs after a production deployment is that some component is not updated as expected, causing production issues and customer complaints.
There are many reasons that lead this scenario. Teams working on separate components can choose to version them in different ways. Multiple handoffs between Dev, Test, and Ops teams causes confusion. There is often a lack of visibility into what versions of components are deployed in each environment. The process is error prone and it is easy to miss something especially when manual steps are required.
This problem increases exponentially when the number of application components increase. If you want to adopt modern architectures like microservices to speed up your development, you do not want versioning and packaging to create a bottleneck that slows you down overall.
You can create deployable packages of any type depending on your need.
Build JAR files for Java applications, Docker images if your applications are containerized, or even AMIs to create complete machine images.
You can version your deployable packages with Semantic Versioning 2.0.0.
Versioning reduces dependency hell and provides a clear way to specify what has changed in the underlying package through major, minor, and patch versions
You can push your versioned package to any repository to store all history.
All popular artifact repositories such as Docker Hub, Amazon ECR, GCR, Quay, JFrog Artifactory, Sonar Nexus, etc are supported.
"We chose Shippable for its great performance, rich features and constant updates. By now it empowers a major part of our CI/CD workflows and QA with automated tests and deployments. This allows us to heavily reduce errors and ship changes as often as possible."