Running build agent in containers is a great solution for achieving flexibility and reducing the costs of maintaining build agents.

In this article, I will run through all the steps needed to start one.

Set up your Dockerfile

The first step is creating a folder containing a Dockerfile.

Create an Azure Container Registry

We then create an Azure Container Registry.

az group create --name buildagent --location uksouth
az acr create --resource-group buildagent --name alberto --sku Basic

Build the Dockerfile in the Cloud with a Task

We build our image using an Azure Registry Task.

az acr build --registry alberto -t buildagent:v1.0 --platform windows .


In this article, I will look at how to calculate test coverage, perform code, dependency and security scanning using an Azure DevOps CI/CD pipeline.

Code Coverage

Code coverage is a measurement of how many lines/blocks/arcs of your code are executed while the automated tests are running.

Code coverage is collected by using a specialized tool to instrument the binaries to add tracing calls and run a full set of automated tests against the instrumented product. A good tool will give you not only the percentage of the code that is executed, but also will allow you to drill into the data and see exactly which lines of code were executed during a particular test.

Code coverage is important. The real benefit of having unit tests can…


HttpClient.PostJsonAsync is one of the new excellent improvements that have been made available with .NET 5.

One of the most accepted way to send a JSON using HttpClient is by serialising an object into a string and wrap it into an StringContent as discussed in this StackOverflow response:

When we must send a huge JSON and/or when this happens often, we might be looking for a means to serialise the object we want to send in small chunks and send them directly to the network.

This couldn’t be easier thanks to PostJsonAsync!


HttpClient needs no introductions is one of the…

Branching strategies — like feature branching or trunk based development — can help development teams move fast. It can orchestrate parallel development allowing developers to work on tasks simultaneously as part of a team.

In this article, I will look at different branch strategies and the tools that modern source control systems offer to implement them.

Define branch strategy (e.g. trunk based, feature branch, release branch, GitHub flow)

Branches allow developers to isolate work from that of other developers.

This allows working on a feature without worrying about breaking the work of others. Branches are also used to handle versioning.

Creating branches come at a cost named integration debt.

High integration…

In software engineering, version control (also known as revision control, source control, or source code management) is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections of information. Version control is a component of software configuration management.[1]

Version control systems are used to protect the investment made by companies in code and to enable team working:

Version control protects source code from both catastrophe and the casual degradation of human error and unintended consequences.

Software developers working in teams are continually writing new source code and changing existing source code. The…

Photo by Richy Great on Unsplash


In this article, I will look at how Git Subtree can be used for a repository to share code.

The initial repositories

The sharing repository is named guestrepo and has one commit:

Some of the components that would make a comprehensive logging solution are:

  • A logging framework
  • A logging aggregator
  • A crash reporter

In this article, I will look at what they are and some of the solutions provided by Microsoft.

Assess and Configure a Log Framework

A logging framework simplifies creating logs.

It generally provides an easy way to configure:

  • A set of outputs for the log (eg. Console, Files, Databases, …)
  • Some levels that allow specifying how important the logged information is
  • A threshold, typically configurable without rebuilding, that will set the minimum level required for a log to be…

Continuous Everything. The process is a journey and requires a growth mindset to continually evolve and improve.

In the previous article, we looked at what are the four pillars that support DevOps at Microsoft.

In this article, we will look at the eight functions of DevOps.

Continuous Planning

Continuous planning is more planning.

Traditional software development teams use to plan all the features that they will release for the entire year ahead. A big bang release would follow months of design, development and testing.

The problem with such long term plans is that they tend to become obsolete very quickly…

No matter at which point you are in your technical journey, you will have heard of DevOps.

But what does DevOps means?

A typical definition of what DevOps means is:

DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.

Typically, the goal for Development is to deliver more features faster, and the goal of Operations is to achieve better system stability. DevOps aligns these disciplines by using a framework of best practices proven to increase speed to market while improving system stability.

The objective of DevOps is to maximise the…

When we modify the text of an HTML input while the user types using React, we may see the caret jumping at the end of the text.

This happens typically when we modify the length of the text the user is typing.

In the example below, a React component is stripping away the ‘&’ illegal characters from the string ‘asd&fasfe’:

Alberto De Natale

Alberto De Natale is a passionate tech-enthusiast software developer.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store