Getting the approver for release to an environment within an Azure DevOps Multi-Stage YAML pipeline

I recently had the need to get the email address of the approver of a deployment to an environment from within a multi-stage YAML pipeline. Turns out it was not as easy as I might have hoped given the available documented APIs. Background My YAML pipeline included a manual approval to allow deployment to a given environment. Within the stage protected by the approval, I needed the approver’s details, specifically their email address. ...

May 15, 2021 · 1 min · Richard Fennell

Fixing my SQLite Error 5: 'database is locked' error in Entity Framework

I have spent too long today trying to track down an intermittent “SQLite Error 5: ‘database is locked’” error in .Net Core Entity Framework. I have read plenty of documentation and even tried swapping to use SQL Server, as opposed to SQLite, but this just resulted in the error ‘There is already an open DataReader associated with this Connection which must be closed first.’. So everything pointed to it being a mistake I had made. ...

February 12, 2021 · 1 min · Richard Fennell

What to do when moving your Azure DevOps organisation from one region to another is delayed.

There are good reasons why you might wish to move an existing Azure DevOps organisation from one region to another. The most common ones are probably: A new Azure DevOps region has become available since you created your organisation that is a ‘better home’ for your projects. New or changing national regulations require your source stored in a specific location. You want your repositories as close to your workers as possible, to reduce network latency. One of these reasons meant I recently had to move an Azure DevOps organisation, so followed the documented process. This requires you to ...

January 25, 2021 · 2 min · Richard Fennell

Running UWP Unit Tests as part of an Azure DevOps Pipeline

I was reminded recently of the hoops you have to jump through to run UWP unit tests within an Azure DevOps automated build. The key steps you need to remember are as follows Desktop Interaction The build agent should not be running as a service it must be able to interact with the desktop. If you did not set this mode during configuration this post from Donovan Brown shows how to swap the agent over without a complete reconfiguration. ...

December 8, 2020 · 2 min · Richard Fennell

Out of Memory running SonarQube Analysis on a large projects

Whilst adding SonarQube analysis to a large project I started getting memory errors during the analysis phase. The solution was to up the memory available to the SonarQube Scanner on the my build agent, not the memory on the SonarQube server as I had first thought. This is done with an environment variable as per the documentation, but how best to do this within our Azure DevOps build systems? The easiest way to set the environment variable `SONAR_SCANNER_OPTS` on every build agent is to just set it via a Azure Pipeline variable. This works because the build agent makes all pipeline variables available as environment variables at runtime. ...

December 1, 2020 · 1 min · Richard Fennell

Getting confused over Azure DevOps Pipeline variable evaluation

Introduction The use of variables is important in Azure DevOps pipelines, especially when using YML templates. They allow a single pipeline to be used for multiple branches/configurations etc. The most common form of variables you see is are the predefined built in variables e.g. $(Build.BuildNumber) and your own custom ones e.g. $(var). Usually the value of these variables are set before/as the build is run, as an input condition. But this is not the only way variables can be used. As noted in the documentation there are different ways to access a variable… ...

November 27, 2020 · 3 min · Richard Fennell

How to export Azure DevOps Classic Builds and Release to YAML

This is another one of those posts so I can remember where some useful information is…. If you are migrating your Azure DevOps Classic Builds and Release to Multi-Stage YAML then an import step is to export all the exiting build, task groups and release as YAML files. You can do this by hand within the Pipeline UI, with a lot of cut and pasting, but much easier is to use the excellent Yamlizr - Azure DevOps Classic-to-YAML Pipelines CLI from Alex Vincent. A single CLI command exports everything with a Team project into a neat folder structure of template base YAML. ...

November 13, 2020 · 1 min · Richard Fennell

Getting my ThinkPad Active Pen working with my Lenovo X1 Carbon Extreme

I have had a ThinkPad Active Pen (model SD60G957200) ever since I got my Lenovo X1 Carbon Extreme. The pen, when it works, has worked well. However, the problem has been that whether the pen and PC detected each other seemed very hit and miss. Today I found the root cause. It was not drivers or dodgy Bluetooth as I had thought, but a weak spring inside the pen. It was not so weak that the battery rattled, but weak enough that the electrical circuit was not being closed reliably on the battery. ...

November 6, 2020 · 1 min · Richard Fennell

Using GitVersion when your default branch is not called 'master'

The Black Live Matter movement has engendered many conversations, hopefully starting changes for the good. Often these changes involve the use of language. One such change has been the move to stop using the name master and switching to the name main for the trunk/default branch in Git repos. This change is moving apace driven by tools such as GitHub and Azure DevOps . I have recently had need, for the first time since swapping my default branch name in new repos to main, to use Semantic Version and the GitVersion tool. ...

October 14, 2020 · 2 min · Richard Fennell

How do handle PRs for Azure DevOps YAML Pipelines if the YAML templates are in a different repo?

Azure DevOps YAML base pipelines allow the pipeline definitions to be treated like any other code. So you make changes in a branch and PR them into the main/trunk when they are approved. This works well if all the YAML files are in the same repo, but not so well if you are using YAML templates and the templated YAML is stored in a different repo. This is because an Azure DevOps PR is limited to a single repo. So testing a change to a YAML template in a different repo needs a bit of thought. ...

September 18, 2020 · 2 min · Richard Fennell