The world around us is changing rapidly, especially when it comes to modern technologies. Readiness for changes and quick reaction time are the key factors to keep flowing in the market competition. The speed with which we can deliver new functionalities to our clients is equally important. Development is one thing, but the path to the end-user is another.
It is this aspect that I want to draw attention to, which is something that we could link to the broad meaning of the word “DevOps”. Currently, the software is a value in itself. IT companies, in a sense, act like factories, but instead of producing machines or toys, they produce software. Such a ready code, however, still has to go a long way from our production line to the customer’s home. The sooner and more efficiently we do it, the better. Of course, we don’t have to build everything from scratch, because there are ready-made tools that will help us with that. But first things first.
Let’s first clear up this popular concept. The name itself suggests the answer, which is development and operations. And it is about cooperation between these two areas that were previously separated from each other. First, developers developed software, and the finished packages were then deployed and maintained by teams of administrators. Currently, this boundary is very blurred, and it often happens that from the moment you add code to the repository, all work is done automatically and usually it does not take too long to install a new version. Thanks to this, you can bypass outdated, rigid deployment cycles and introduce changes to the system at any time, meeting our business needs as fast as possible.
It’s a dozen years old, but it is still an area where many companies want to introduce improvements. In addition, the subject of DevOps is still gaining popularity and new tools are being developed, like GitHub Actions in 2019 or Azure DevOps in 2018. And now a handful of statistics to illustrate what it looks like. The data comes from the 2020 Atlassian DevOps Trends Survey:
- more than a half of organizations have been practicing DevOps for over 3 years,
- over 90 percent claim that DevOps had a direct impact on their work,
- 99 percent of professionals say that DevOps has had a positive impact on their organizations, and 69 percent claim that it was a “very positive” impact,
- 61 percent say it helped them produce higher quality deliverables,
- 49 percent say they see a faster time to market,
- 57 percent of organizations (500+ employees) have dedicated DevOps teams,
- 37 percent claim that lack of skills is a barrier to DevOps implementation in an organization.
As you can see, the topic, despite its enormous popularity and favor on the part of specialists and managers, still has a lot to improve. The last item is especially interesting, 37 percent is a large group, so it is worth investing in the training and development of our employees in order to increase their job satisfaction and be able to fully benefit from the DevOps implementation in our projects in the future.
An interesting trend from the above report also applies to top issues with releases in comparison to the year 2018. There is a small (3 percent) increase in missed deadlines between the 2018 and 2020 surveys, but on the other hand, there is a significant decrease (5-10 percent) of defects, unexpected delays, or downtimes. So these are measurable benefits resulting from the DevOps implementation.
GitHub is the most popular VCS tool, but most importantly, it has many features that allow us to implement the DevOps concept with it. In 2019, GitHub released this new functionality, noting the growing popularity of this type of solution. This feature allows building CI/CD pipelines for testing, attaching external dependencies, deploying, and so on. In general, it allows the release of new software versions without any third-party tools. I recommend you to check this article about GitHub Actions security.
Mergify is a tool that makes your code merge faster, more effectively, and cheaper. With two products, Merge Queue, and Workflow Automation, it helps you secure code merge, update Pull Requests automatically, and adapt to the way your team works by letting you define your own rules for workflow automation. We recommend trying Mergify to merge better.
In 2018, Microsoft also revolutionized its approach to the CI/CD concept and launched a product called Azure DevOps Services. It is a tool that consists of five modules, each of which is responsible for a different area of operation. Of course, as befits modern software, we can use these modules independently.
Tool for planning and managing work progress on Kanban or Scrum boards. Of course, each board can be modified according to our needs. The biggest advantage of this module is the ability to integrate it with other popular tools such as GitHub, Jenkins, and Slack. Take a look at this part of the description of the Boards from GitHub Marketplace:
As the name suggests, it is a repository that can operate in two modes: Git or TFVC (Team Foundation Version Control). It allows us to connect with any IDE or Git client, support Webhooks or support Pull Requests. Very useful.
Allows automating builds and deployments with cloud-hosted Pipelines. So here we have the heart of the CI/CD concept. We can configure pipelines both via UI and via YAML files. Of course, we can use Linux, macOS, and Windows agents, and various configurations when it comes to containers or parallel jobs. Support for Kubernetes is also in place. There is clear documentation on building your own pipelines on the Microsoft website, I recommend you to read it before you start creating your own.
Tool for improving code quality by using planned and exploratory testing services. This allows us to test the application in various environments and for end-to-end tests with traceability and quality. We can also plan manual testing with this tool. Everything we need to ensure quality throughout the development process is available here.
Last but not least this module is responsible for integrated package management. It allows us to create Maven, npm, NuGet, and Python package feeds and shares them. Such packages can be added to any pipeline. This is also a great way to avoid storing binaries in Git. We can also use it to keep public packages. Why? To treat it as a kind of a backup. Only we can delete it from our side, even if the package disappears from public sources.
As you can see, it is quite a powerful tool with many useful functionalities. We have here not only the basic CI/CD implementation but also additional testing or project management options. Importantly, Azure DevOps GitHub integration is very easy. We can even login into Azure with our GitHub account. It is not difficult to imagine the following workflow:
We create and manage tasks with Azure Boards, then our code is integrated using Azure Repos. Any changes to Azure Git repository are captured and run appropriately defined tasks in Azure Pipeline. Of course, we can bind several cooperating modules using Azure Artifacts. Finally, it is all properly tested by Azure Test Plans, which gives us a guarantee of proper operation and high quality of our software.
Such flow can be built quite easily and can really accelerate our development process. It may be associated with major changes in our company, but isn’t that what continuous development is all about? Perhaps such a change will prove to be beneficial for us.