Why Azure DevOps? That’s a good question – and here’s my answer.
As a cross-platform mobile developer I am interested in every technology that allows me to design mobile applications: Native, Xamarin, Flutter, the list goes on! This also means I’m a fan of languages like Java, Swift or C.
However, when it comes to software design there have always been two worlds: development and operations. DevOps aims to unite these two worlds by making them work together. The goal is, of course, to deliver software faster and more securely. In this way, people, processes and technologies are linked to providing continuous value.
I wanted to share with you my Azure DevOps experience for several reasons, beginning with the fact that it allows me to combine several Microsoft technologies, development languages, and tools, thus making it a perfect candidate for adopting DevOps.
In future articles in this series, I’ll note that to compile a mobile application, some obstacles make cross-platform development somewhat complicated, and I’ll show how Azure DevOps helps overcome these complications. Finally, if you consider the large number of tools that can interface with Azure DevOps (including Visual Studio, App Center, and Azure), you can imagine the perfect cocktail to set up a DevOps environment with ease and without reducing your options.
A quick reminder about the basics of DevOps
Why do we need DevOps?
Developing software can often be a very manual process. As a result, this results in a large number of errors, both within the code and in the deployment. Often development and exploitation, as well as the associated teams, are out of sync. This in turn leads to delays in delivery and, in the context of a services company, this delay will cause disappointment among some stakeholders.
DevOps improves visibility, builds on more precise requirements and encourages better communication, all of which will accelerate the time to market.
What is the difference between DevOps and other development practices?
In the software development process, several tasks (including build, deployment, interface testing, and unit testing) are repetitive and time-consuming, and sometimes bring little end-value to the product.
In a world where acceleration to market is prized, it is increasingly important to save time by delegating certain tasks to a computer and then automating those tasks. DevOps puts its focus here to reduce the human errors that can be so time-consuming.
What is the philosophy of DevOps?
DevOps is not just a tool; it is a philosophy and an ideology.
DevOps role is to smooth communication and exchanges between two worlds: development and exploitation. It is a combination of tools, agile methods and – above all – common sense.
To achieve this, you have to break the silos and promote collaboration between teams. DevOps attempts to eliminate conflicts (inter-team and intra-team), risks (bugs and errors) and constraints (timetables and technology) to improve delivery both from a time perspective, as well as in terms of quality.
Want to know more? Read former Witekio System Architect Tangi Colin’s article on the subject: https://www.witekio.com/blog/what-makes-infrastructure-crucial/.
Origins of Azure DevOps
For those who have used Microsoft services and tools for some time, Azure DevOps is the direct descendant of Visual Studio Team Services (VSTS) which itself was descended from Team Foundation Server (TFS).
Team Foundation Server and Azure DevOps
There is a major difference between TFS and Azure DevOps: the former is installed locally by the user, while Azure DevOps is available as a service in the Microsoft cloud.
Both provide an integrated and collaborative environment that supports Git, continuous integration, and tools for planning and monitoring work.
Microsoft has moved from the sale of the licensed software to a more connected SaaS model in line with the expectations of today’s businesses. Indeed, with TFS it was up to the user to maintain their servers, secure them, administer them, and update them. With both VSTS and now Azure DevOps, this is no longer necessary.
This surely delights Azure users since Azure DevOps integrates perfectly with other tools.
Visual Studio Team Services and Azure DevOps
It’s pretty simple: Azure DevOps is VSTS and VSTS is Azure DevOps…almost.
VSTS was a behemoth with all the tools for any software factory without any distinction. With Azure DevOps, Microsoft preferred to separate all the elements that can be used independently of each other: Azure Pipelines, Azure Board, Azure Test Plan and more. There’s no need to pull out the big guns to manage a project, you can choose what you want and need from the tools available.
Overview of the 5 services offered by Microsoft’s DevOps solution
As mentioned, the DevOps philosophy aims to bring together several tools for the design and deployment of software. With this in mind, Microsoft has designed several services to fulfil all DevOps missions and here’s my take on each.
These tables offer you a convenient way to track individual work units. Depending on the type of project and the phase you are in, you will want to follow problems and develop backlogs. You should also be able to plan, monitor, and discuss these issues throughout the project.
Today Azure DevOps offers both tables for the Agile method and the Scrum method. The different columns are fully customizable, and the tool is connected to the pipeline. As a result, tickets can evolve depending on the state of the git (creation of a pull request, the merge of a pull request, cancellation of a pull request, and so on) which, once again, it automates.
Here we find a useful tool that we already know well thanks to a lot of services such as Bitbucket, GitHub or GitLab. Azure Repos is a public or private source code repository manager. It manages the Git as well as SVN or TFVC.
Just like its competitors, Azure Rest handles the files and changes them, as well as creating pull requests. Users can exchange the code via comments.
Where Azure Repos stands out from these competitors, however, is the ability to do semantic research that can distinguish the methods from the classes to allow you to do much more precise research.
Azure Pipelines is, in my opinion, the most interesting part of Azure DevOps.
It is a comprehensive tool to manage both continuous integration (CI) and continuous deployment (CD) and many platforms and languages are supported.
Azure Pipeline is completely independent of Azure Repos, so you can use a preferred source code manager such as Bitbucket, GitHub, SVN or any other Git manager that allows for the use of the command line.
It offers a great predefined pipeline tool that allows anyone to launch a new pipeline very quickly. It also manages the pipeline configuration via standard YAML scripts to store and version it directly in your externally dependent code on an additional tool.
Its deployment functionality will also allow you to automate certain deliverables including a website, mobile application, IoT application, and Azure services. It can also manage so-called sensitive files and limits access only to trusted people to maximize security.
All of these features make it the perfect partner for app generation and deployment, but its greatest advantage remains ts support of a large number of platforms and languages, which I’ll mention more about below.
Azure Test Plan
Any software development project worthy of the name comes with testing. As developers, we understand and must master unit tests, integration tests and performance tests, among others.
But there’s also all the tests that our testers complete and Azure DevOps has planned for them. With Azure Test Plans it is possible to set scripted tests with end-to-end traceability, and exploratory tests can also be carried out.
All this is directly linked to an Azure Board allowing you to add bugs you encounter.
During the development phase, we often create libraries or frameworks that are shared with other developers, both internal and external to the company. Azure Artifacts makes it easy to share these libraries and – coupled with the Pipeline – it allows you to deliver new versions continuously.
4 good reasons to use Azure DevOps
DevOps means continuous integration or even continuous deployment. Personally being a mobile developer and IoT, I am confronted with very different environments, platforms and languages and not always compatible with each other.
Let’s take the example of developing a mobile application on Android and iOS. Whether you are native (Java, Kotlin, Swift or Objective-C) or not (Xamarin, Ionic, React, Flutter), you will have to switch to native tools at some point to generate an APK on the Android side and an IPA for iOS.
It’s easy when you’re developing, you have your own development machine, but in the case of continuous integration that takes place on a remote server, it’s a little more complicated.
DevOps means continuous integration and even continuous deployment. While continuous integration and deployment seem simple when working on a development machine, it can get a lot more complicated when you’re tasked with continuous integration on a remote server.
Personally, being a mobile developer and working in IoT, I am faced with very different environments, platforms and languages that are not always compatible with each other.
For example, take the job of developing a mobile app running on both Android and iOS. Whether you are working in native languages (Java, Kotlin, Swift or Objective-C) or not (Xamarin, Ionic, React, Flutter), you will need to switch at some point to native tools to generate an APK on the Android side and an IPA for iOS.
Lucky for me, Azure DevOps has options to help tackle these challenges.
- Supported Platforms
Let’s consider what we need to compile our two native mobile applications:
|Native Android app||Native iOS app|
For those who do not often work in native development on iOS, Cocoapods, Swift Package Manager and Carthage are the equivalents of an addiction manager like NuGet and (in part) Gradle.
As is clear, for the first application, no matter which operating system is used, as long as we have the compilation tools, we will be able to generate the APK of our application.
Unfortunately for this example, it’s the second one that has become more complicated, since it necessarily takes a Mac to compile the application.
And be careful: there’s no way to use a virtual machine to compile and sign – you need a Mac, a real one.
And that’s where Azure DevOps becomes interesting.
Most of the solutions offered for compiling applications like Bitbucket, GitLab or Jenkins do not offer macOS support. Most often, they only support Linux. Some manage to get around this problem by using Docker, but again this can only work for compiling an iOS application.
Fortunately, thanks to Azure datacenters, Azure DevOps offers macOS machines with a different version of OSX and XCode development tools.
In fact, in this case, Azure DevOps seems to be a good way to compile our application. All Azure DevOps tasks are natively present in the pipeline editor or via YAML files: