ItsMyConsole.Tools.AzureDevOps 0.7.1

dotnet add package ItsMyConsole.Tools.AzureDevOps --version 0.7.1
NuGet\Install-Package ItsMyConsole.Tools.AzureDevOps -Version 0.7.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ItsMyConsole.Tools.AzureDevOps" Version="0.7.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ItsMyConsole.Tools.AzureDevOps --version 0.7.1
#r "nuget: ItsMyConsole.Tools.AzureDevOps, 0.7.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ItsMyConsole.Tools.AzureDevOps as a Cake Addin
#addin nuget:?package=ItsMyConsole.Tools.AzureDevOps&version=0.7.1

// Install ItsMyConsole.Tools.AzureDevOps as a Cake Tool
#tool nuget:?package=ItsMyConsole.Tools.AzureDevOps&version=0.7.1

Logo

ItsMyConsole.Tools.AzureDevOps

Outil Azure DevOps (Création/Modification WorkItem) pour le Framework ItsMyConsole

Sommaire

Pourquoi faire ?

Vous allez pouvoir étendre le Framework pour application Console .Net ItsMyConsole avec un outil de manipulation des WorkItems d'Azure DevOps.

L'outil ItsMyConsole.Tools.AzureDevOps met à disposition :

  • La création de WorkItem
  • La modification de WorkItem
  • La récupération des informations d'un WorkItem
  • La suppression d'un WorkItem
  • L'ajout de relations entre les WorkItems
  • L'itération courante pour un projet

Getting Started

  1. Créer un projet "Application Console .Net" avec le nom "MyExampleConsole"
  2. Ajouter ItsMyConsole au projet depuis le gestionnaire de package NuGet
  3. Ajouter ItsMyConsole.Tools.AzureDevOps au projet depuis le gestionnaire de package NuGet
  4. Aller sur le site web de votre serveur Azure DevOps
  5. Cliquer sur l'icône de votre profil, puis "Sécurité"
  6. Créer un nouveau jeton d'accès personnel, exemple de procédure ici, et faite une sauvegarde de la valeur
  7. Dans le projet, modifier la méthode "Main" dans le fichier "Program.cs" par le code suivant :
using ItsMyConsole;
using ItsMyConsole.Tools.AzureDevOps;
using System;
using System.Threading.Tasks;

namespace MyExampleConsole
{
    class Program
    {
        static async Task Main() 
        {
            ConsoleCommandLineInterpreter ccli = new ConsoleCommandLineInterpreter();

            // Console configuration
            ccli.Configure(options => {
                options.Prompt = ">> ";
                options.LineBreakBetweenCommands = true;
                options.HeaderText = "##################\n#  Azure DevOps  #\n##################\n";
                options.TrimCommand = true;
            });

            // Azure DevOps configuration
            ccli.AddAzureDevOpsServer(new AzureDevOpsServer {
                Name = "TEST",
                Url = "https://<SERVEUR>",
                PersonalAccessToken = "<TOKEN>"
            });

            // Display the title of the workitem
            // Example : wi 1234
            ccli.AddCommand("^wi [0-9]*$", async tools => {
                int workItemId = Convert.ToInt32(tools.CommandArgs[1]);
                WorkItem workItem = await tools.AzureDevOps("TEST").GetWorkItemAsync(workItemId);
                Console.WriteLine($"WI {workItemId} - {workItem.Title}");
            });

            await ccli.RunAsync();
        }
    }
}

Voici le résultat attendu lors de l'utilisation de la Console :

MyExampleProject

Dans cet exemple de code on a configuré avec Configure, le prompt d’attente des commandes options.Prompt, la présence d'un saut de ligne entre les saisies options.LineBreakBetweenCommands et l’en-tête affichée au lancement options.HeaderText.

On ajoute la configuration du serveur Azure DevOps avec AddAzureDevOpsServer et on lui renseigne un nom Name qui permet de différentier si on configure plusieurs serveurs, l'url d'Azure DevOps Url et le jeton d'accès personnel PersonalAccessToken.

Puis avec AddCommand, on a ajouté un pattern d’interprétation des lignes de commande ^wi [0-9]*$ (commence par "wi" et suivi d'un nombre).

Lors de l'exécution de la Console, si on saisit une commande qui commence par "wi" avec un nombre à la suite, il lancera l'implémentation de l'action associée. Dans cet exemple, il récupère l'identifiant du WorkItem en utilisant tools.CommandArgs depuis les outils disponibles (tableau des arguments de la ligne de commande) pour lui permet de récupérer les informations du WorkItem associé avec tools.AzureDevOps("TEST").GetWorkItemAsync (ici "TEST" c'est le nom donné à la configuration du serveur). Avec les informations récupérées, il affiche son titre dans la Console.

Maintenant que l'on a configuré la Console et l'implémentation de l'action associée au pattern ^wi [0-9]*$, l'utilisation de RunAsync lance la mise en attente d'une saisie de commande par l'utilisateur.

Comment se servir de l'outil ?

Tout d'abord, vous devez ajouter une configuration serveur Azure DevOps avec AddAzureDevOpsServeret définir un nom Name. Vous pouvez ensuite accéder à l'outil Azure DevOps lorsque vous ajoutez une interprétation de commande avec AddCommand.
Le nom défini lors de la configuration permet de cibler le serveur lors de l'utilisation de l'outil.

ConsoleCommandLineInterpreter ccli = new ConsoleCommandLineInterpreter();

// Azure DevOps configuration
ccli.AddAzureDevOpsServer(new AzureDevOpsServer {/*  */});

// Add command
ccli.AddCommand("<PATTERN>", async tools => 
{
    WorkItem example = await tools.AzureDevOps("<NAME>").GetWorkItemAsync(1234);
});

Vous devez ajouter using ItsMyConsole.Tools.AzureDevOps; pour avoir accès a l'outil Azure DevOps depuis tools de AddCommand.

Ajout d'une configuration serveur Azure DevOps

Vous pouvez ajouter une configuration d'un serveur Azure DevOps en utilisant AddAzureDevOpsServer.

Propriété Description
Name Nom unique du serveur Azure DevOps qui sert de désignation lors de son utilisation
Url L'URL du serveur Azure DevOps
PersonalAccessToken Le token d'accès personnel au serveur Azure DevOps. Vous devez le créer depuis votre site web d'Azure DevOps. Exemple de procédure ici
ConsoleCommandLineInterpreter ccli = new ConsoleCommandLineInterpreter();

// Azure DevOps configuration
ccli.AddAzureDevOpsServer(new AzureDevOpsServer {
    Name = "TEST",
    Url = "https://<SERVEUR>",
    PersonalAccessToken = "<TOKEN>"
});

Si vous avez plusieurs serveurs Azure DevOps, le nom Name permet de cibler celui que vous voulez lors de la manipulation des WorkItems.

Création d'un WorkItem

Vous pouvez créer des WorkItems en utilisant CreateWorkItemAsync.

Propriété Description
workItemFields La liste des champs à renseigner lors de la création du WorkItem
ccli.AddCommand("<PATTERN>", async tools => 
{
    WorkItem newWorkItem = await tools.AzureDevOps("<NAME>")
                                      .CreateWorkItemAsync(new WorkItemCreateFields {
                                          // Insert yours fields here
                                      });
});

Vous pouvez modifier les champs suivants :

Nom du champ Description
AreaPath La zone du WorkItem
Project (obligatoire) Le projet du WorkItem
IterationPath L'itération du WorkItem
Title Le titre du WorkItem
State L'état du WorkItem
WorkItemType (obligatoire) Le type du WorkItem
AssignedToDisplayName Le nom de la personne à assigner au WorkItem
Activity Activité du WorkItem
Description La description du WorkItem
ReproSteps Les étapes de reproduction du WorkItem
SystemInfo Les informations systèmes du WorkItem
AcceptanceCriteria Les critères d'acceptation du WorkItem
Tags Les balises du WorkItem
Effort L'effort du WorkItem
OriginalEstimate L'estimation d'origine
RemainingWork Le travail restant
CompletedWork Le travail accompli

Vous avez en retour un objet de type WorkItem.

Modification d'un WorkItem

Vous pouvez modifier un WorkItem en utilisant UpdateWorkItemAsync.

Propriété Description
workItemId L'identifiant du WorkItem à mettre à jour
workItemFields La liste des champs à mettre à jour sur le WorkItem. Tous les champs sont facultatifs, vous pouvez mettre à jour seulement ceux que vous voulez.

Vous avez aussi la possibilité de modifier un WorkItem en lui passant directement l'objet WorkItem. De cette façon, il permettra d'effectuer la mise à jour seulement si le Workitem n'a pas été modifié depuis la lecture de l'objet passé en paramètre. Par exemple, on récupére les informations du Workitem, on vérifie que les données soient correctes et puis on le modifie avec de nouvelles valeurs. Si entre la lecture et la modification, le WorkItem a été changé, alors notre mise à jour échouera. Si vous ne voulez aucune vérification de contrôle, vous devez passer l'identifiant du WorkItem au lieu de l'objet.

ccli.AddCommand("<PATTERN>", async tools => 
{
    await tools.AzureDevOps("<NAME>").UpdateWorkItemAsync(1234, new WorkItemUpdateFields 
    {
        // Insert yours fields here
    });
});

Vous pouvez modifier les champs suivants :

Nom du champ Description
AreaPath (facultatif) La zone du WorkItem
Project (facultatif) Le projet du WorkItem
IterationPath (facultatif) L'itération du WorkItem
Title (facultatif) Le titre du WorkItem
State (facultatif) L'état du WorkItem
WorkItemType (facultatif) Le type du WorkItem
AssignedToDisplayName (facultatif) Le nom de la personne à assigner au WorkItem
Activity (facultatif) L'activité du WorkItem
Description (facultatif) La description du WorkItem
ReproSteps (facultatif) Les étapes de reproduction du WorkItem
SystemInfo (facultatif) Les informations systèmes du WorkItem
AcceptanceCriteria (facultatif) Les critères d'acceptation du WorkItem
Effort (facultatif) L'effort du WorkItem
OriginalEstimate (facultatif) L'estimation d'origine
RemainingWork (facultatif) Le travail restant
CompletedWork (facultatif) Le travail accompli

Vous avez en retour un objet de type WorkItem.

Récupération des informations d'un WorkItem

Vous pouvez récupérer les informations d'un WorkItem en utilisant GetWorkItemAsync.

Propriété Description
workItemId L'identifiant du WorkItem
ccli.AddCommand("<PATTERN>", async tools => 
{
    WorkItem workItem = await tools.AzureDevOps("<NAME>").GetWorkItemAsync(1234);
});

Vous avez en retour un objet de type WorkItem.

Nom de la propriété Description
Id L'identifiant du WorkItem
AreaPath La zone du WorkItem
Project Le projet du WorkItem
IterationPath L'itération du WorkItem
Title Le titre du WorkItem
State L'état du WorkItem
WorkItemType Le type du WorkItem
AssignedToDisplayName Le nom de la personne assignée au WorkItem
Activity L'activité du WorkItem
Description La description du WorkItem
ReproSteps Les étapes de reproduction du WorkItem
SystemInfo Les informations systèmes du WorkItem
AcceptanceCriteria Les critères d'acceptation du WorkItem
Children La liste des identifiants des WorkItems enfants
Parent L'identifiant du WorkItem parent
Related La liste des identifiants des WorkItems associés
Predecessors La liste des identifiants des WorkItems prédécesseurs
Successors La liste des identifiants des WorkItems successeurs
IsFixedInChangeset Indicateur si des ensembles de modifications sont liés au Workitem
Tags La liste des balises du WorkItem
Effort L'effort du WorkItem
OriginalEstimate L'estimation d'origine
RemainingWork Le travail restant
CompletedWork Le travail accompli

Suppression d'un WorkItem

Vous pouvez supprimer un WorkItem en utilisant DeleteWorkItemAsync.

Propriété Description
workItemId L'identifiant du WorkItem
ccli.AddCommand("<PATTERN>", async tools => 
{
    await tools.AzureDevOps("<NAME>").DeleteWorkItemAsync(1234);
});

Ajout d'une relation entre WorkItems

Vous pouvez ajouter des relations entre WorkItems en utilisant AddWorkItemRelationAsync pour une seule relation et AddWorkItemRelationsAsync pour en ajouter plusieurs.

Propriété Description
workItemId L'identifiant du WorkItem qui va recevoir la relation
workItemToAdd Le ou les WorkItems à ajouter
linkType Le type de lien entre le WorkItem est celui que l'on veut ajouter
ccli.AddCommand("<PATTERN>", async tools => 
{
    WorkItem workItemToAdd = await tools.AzureDevOps("<NAME>").GetWorkItemAsync(5678);
    await tools.AzureDevOps("<NAME>").AddWorkItemRelationAsync(1234, workItemToAdd, LinkType.Child);
});

Vous avez en retour un objet de type WorkItem.

Récupération de l'itération courante d'un projet

Vous pouvez récupérer l'itération courante d'un projet en utilisant GetCurrentIterationAsync.

Propriété Description
project Le nom du projet
team (facultatif) Le nom de l'équipe
ccli.AddCommand("<PATTERN>", async tools => 
{
    Iteration iteration = await tools.AzureDevOps("<NAME>").GetCurrentIterationAsync("<PROJECT>");
});

Vous avez en retour un objet de type Iteration.

Nom de la propriété Description
Name Le nom de l'itération
Path Le chemin relatif de l'itération
StartDate Date de début de l'itération
FinishDate Date de fin de l'itération

Récupération du nom de la configuration Azure DevOps

Vous pouvez récupérer le nom de la configuration Azure DevOps en utilisant GetAzureDevOpsServerName.

ccli.AddCommand("<PATTERN>", async tools => 
{
    string serverName = tools.AzureDevOps("<NAME>").GetAzureDevOpsServerName();
});
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.7.1 100 4/16/2024
0.7.0 86 4/15/2024
0.6.0 892 4/10/2022
0.5.0 848 4/6/2022
0.4.1 878 3/27/2022
0.4.0 822 3/17/2022
0.3.0 858 1/18/2022
0.2.0 741 12/15/2021
0.1.0 731 12/9/2021