DevOpsEen eenvoudige Azure DevOps Extension bouwen

In dit tweede deel van een drieluik gaan we een eenvoudige Azure DevOps Extension bouwen en publiceren naar de Visual Studio Marketplace. In mijn vorige blog, zelf een Azure DevOps Extension bouwen, heb ik beschreven hoe je een Azure DevOps extension bouwt, maar nu gaan we kijken hoe het echt werkt.

Als eerste maken we een organization aan in de Visual Studio Marketplace. Dit is gratis. Je kunt hier al je extensions aan koppelen, maar pas zodra Microsoft de organization heeft geverifieerd, kunnen de extension ook beschikbaar worden gemaakt voor het grote publiek.

De Code

We beginnen met een simpel Powershell script en slaan deze op als Demo.ps1 :
(Download het PDF bestand voor kopieerbare code: De techniek – Een simpele Azure Devops Extension bouwen)

Extension

Om dit script naar een extension om te bouwen volgen we de volgende stappen.
Bouw de mappen structuur op en plaats demo.ps1 in de scripts directory:

Een eenvoudige extensie bouwen

De laatste versie van de VstsTaskSdk is hier te vinden: https://www.powershellgallery.com/packages/VstsTaskSdk/

We beginnen met de task.json file. Hierin wordt bepaald welke velden er in Azure DevOps worden getoond en waar de script(s) staan die uitgevoerd moeten worden.

Extension

In de vss-extension.json staat de informatie die de marketplace nodig heeft om te bepalen welke taken er bij de extension horen en welke organization deze gemaakt heeft.

Extension bouwen

De volgende velden zijn belangrijk:

  • Id: Deze waarde is uniek. Hier kan een naam of een GUID voor gebruikt worden.
  • Publisher: Hier vult u de naam van de organization die u hiervoor heeft aangemaakt.
  • Contributions / id: Hier komt het id te staan die gelijk is aan het id in de task.json.

De build pipeline

Nu code klaar is, is het tijd om de build pipeline op te zetten. We hebben 4 taken nodig om de extension te creëren.

Zelf een Azure Devops Custom Extension bouwen

Deze vier taken zijn terug te vinden in een door Microsoft gemaakte extension genaamd Azure DevOps Extension Tasks.

Use Node CLI for Azure DevOps (tfx-cli)

Deze taak haalt de NPM module TFX op die vereist is om de extension te compileren. Er hoeft na het toevoegen van de taak geen aanpassing gedaan te worden aan de instellingen.

Query Extension Version

Deze taak haalt in de marketplace het huidige versienummer op van de extension op. Vervolgens kan worden aangegeven of de major, minor of patch versie verhoogd moet worden. Aangezien we een nieuwe extension gaan uploaden, maken we gebruik van de variable ‘Extension.VersionOverride. Deze variable geeft de mogelijkheid om zelf een versienummer op te geven en query over te slaan.

Maak de volgende Variable aan:

extensiebouwen3
Laat de value leeg en zet het vinkje “Settable at queue time” aan, zodat er tijdens de 1ste build een versie nummer opgegeven kan worden.

Zelf een Azure Devops Custom Extension bouwen

Creëer vervolgens een Azure Marketplace service connection.

  • Vul de Publisher ID in. Dit is uw organisatie ID in de marketplace.
  • Vul het extension ID in. Dit is het ID dat is terug te vinden in de vss-extension.json.

Zelf een Azure Devops Custom Extension bouwen
Zelf een Azure Devops Custom Extension bouwenNeem bovenstaande instellingen over.

Package Extension

Deze taak compileert de code tot een VSIX bestand.

Neem bovenstaande instellingen over. De $(output.Extension.Version) is een variable die wordt gevuld door de Query Extension Version task.

Nu de pipeline helemaal gevuld is, kunnen we de build starten. Vergeet niet de variable in te vullen met de 1ste versie. In dit geval wordt het 0.0.1.

Zelf een Azure Devops Custom Extension bouwen

Release Pipeline

Nu we een build artifact hebben, kunnen we de extension in de marketplace uploaden. Selecteer na het aanmaken van de pipeline bij artifacts de build pipeline van de vorige stappen.
Vervolgens voegen we de volgende taken toe aan de stage.

Zelf een Azure Devops Custom Extension bouwen

De ‘Use Node CLI for Azure DevOps’ task is al uitgelegd in de build pipeline, dus deze slaan we over.

Publish Extension

In deze taak geven we aan welk VSIX bestand naar de marketplace gestuurd moet worden.

Zelf een Azure Devops Custom Extension bouwen

Kies de file locatie door middel van de … en vervang vervolgens de bestandsnaam.vsix voor *.vsix. Hierdoor hoeft bij de volgende versie van de release, de release pipeline niet aangepast te worden.

Na het runnen van de release pipeline, kun je de extension terugvinden in de marketplace. Ga hiervoor naar https://marketplace.visualstudio.com/manage.

Zelf een Azure Devops Custom Extension bouwen

Deel en installeer de extension

Om de extension te testen, moeten we de deze delen met de organisatie. Klik hiervoor op de puntjes achter de extension.

Zelf een Azure Devops Custom Extension bouwen

Als we nu de extension installeren en toevoegen in de pipeline, dan hebben we een veld om een naam in te vullen.

Zelf een Azure Devops Custom Extension bouwen

Als we de pipeline draaien, krijgen we dit resultaat:

Zelf een Azure Devops Custom Extension bouwen

Versie beheer

Wat nu als er een aanpassing gedaan moet worden die de werking van de huidige extension in de weg zit? Zoals in de vorige blogpost beschreven,  kunnen er meerdere versies van een task in de de extension worden opgenomen. Voor versie 1 van deze task, gaan we een veld toevoegen.
Als eerste maken we een copy van de folder V0 en noemen we deze V1.

Zelf een Azure Devops Custom Extension bouwen

Vervolgens voegen we een input toe aan task.json binnen de V1 map

Extension

 

En passen we de versie aan naar 1.0.0

Extension

Daarna passen we het Powershell script aan, zodat we dit nieuwe veld ook kunnen uitlezen

Powershell Script

We hoeven nu niets meer aan de pipelines te doen, dus zodra je de code commit, wordt door de buildpipeline automatisch de patch versie van de extension met 1 verhoogd.

Als we nu in Azure DevOps gaan kijken, kunnen we kiezen uit 2 versies. 0.* en 1.*.

Zelf een Azure Devops Custom Extension bouwen

Bij task version 1.* zien we nu een extra veld.

Zelf een Azure Devops Custom Extension bouwen

En de output is

Output

Op deze manier is het mogelijk om grote wijzigingen door te voeren, zonder dat bestaande pipelines hier hinder van ondervinden.

Disclaimer
Microsoft update Azure DevOps met grote regelmaat. Hierdoor kan het zijn dat niet alle gebruikte screenshots overeenkomen met de werkelijkheid.

Peter Barendse, DevOps Engineer

 

Download ons eBook "Ultimate guide to Azure DevOps"