Jesper Dybdahl Hede
Would you like a uniform and automated process for your IT projects? At Novataris, we use Azure DevOps to automate our work.
Azure DevOps is a software platform that supports software development and maintenance. It's a tool that teams can use to collaborate on:
• Software development
• Building solutions
• Deployment of applications
• Tests, versioning, and task management
The software platform is available either online (Azure DevOps Services) or on-premise (Azure DevOps server) and this makes it possible to automate flows and repeat processes. Azure DevOps can be integrated into both existing and new projects and interplays easily with established work methods.
Azure DevOps consists of five services, some of which, if you are familiar with Team Foundation Server (an earlier version of Azure DevOps Server), will be recognizable, while others have emerged later. We do not want to go into detail about the individual services, as we think that Microsoft itself has done this well here:
We work for a customer who has a number of central and critical applications and several smaller applications, which we at Novataris support with a permanent team of consultants. We are in the middle of an upgrade process from traditional CMS to Contentful Headless CMS. CMS is one of the most central applications and occupies a large part of the team. We have several backend platforms, databases, and various test, staging, and production environments. The need for the maintenance and development of the applications changes over time according to priorities, so we have to adapt to the changing needs. Our customer uses Microsoft Azure extensively, so the choice of Azure DevOps to support our work was an obvious one.
In order for development to take place in parallel and in several directions, each logical part is placed in its own Git Repository (code library), which are all located in the same Azure DevOps project. The granularity enables our development teams to collaborate agilely with the upgrade and at the same time, maintenance and development can be carried out across the applications without us getting in each other's way.
We focus highly on the efficiency of our work processes and continuously work to automate as much as possible. Azure DevOps provides the opportunity to connect repositories (code libraries) and build/release pipelines, in the same way as in the event-driven Azure Pipelines. When new code is pushed to a repository, we've configured it so that DevOps automatically starts an associated build pipeline. Here, both functional and structural tests are run and the deploy package is built and made ready for use. If the build and tests are completed successfully, then an automatic release pipeline starts, and the new version is made ready in the test environment. It's a process that would normally take a developer 5-10 minutes and requires in-depth knowledge of the build and release processes. Now it is done completely automatically in fixed steps. This ensures high quality and saves the developer’s time.
DevOps has a larger library of add-ons, scripts, and connectors, which means that the vast majority of needs can be met through configurations. In addition, many software companies have developed extensions for Azure DevOps – e.g. Slack, SonarQube, Amazon Web Services and Octopus Deploy. Therefore, Azure DevOps is easy to adopt even with existing software products and solutions. For example, on our project we use Ghost Inspector (which is a tool that can be used to run automatic tests of websites and apps. See more here) to carry out complete User Interface tests after all releases. It's a ready-to-use tool with an Azure DevOps Connector that was easy to integrate into our pipeline. As mentioned earlier, our tests run automatically with the release pipeline, so it only requires our attention if something has changed. Changes and errors are clearly marked in Ghost Inspector so errors can be corrected, or the update accepted, and a new baseline established. This way, we achieve better quality control of our work.
Azure Artifacts is a package manager that supports packages like Maven, npm and NuGet. When developing software, it is important to keep track of versions and dependencies. It can be a challenge for larger teams that all developers must use the same software packages. The challenge grows with team size, so it requires a structured platform to support effective development. When our build pipelines create NuGet packages and DevOps Artifacts handles the package management, we get full traceability, reusability, and a simple overview.
Microsoft has not rethought the solution or created a unique tool with Azure Artifacts, but with package management in the same platform as build and release pipelines, you get easy integration and full control over your package versioning.
At Novataris, we always go for an adapted setup in relation to the individual customer's needs. We have the processes and collaboration in focus and the tools must support it all. We believe that a simple tool that everyone knows and actively uses is worth more than all kinds of features that lie around collecting virtual dust.
We have been successful several times using Azure DevOps. It is a tool that has a low entry barrier, can support complex projects, and if you are familiar with Microsoft, it is recognizable.
Azure DevOps should be part of the conversation if you are considering streamlining your development processes. If you have these same considerations, we would very much like to show examples of how such a solution can work in practice.