Intégration GitHub (via Microsoft Power Automate) - Clôturer une pull request

Modifié le 28/05/2022 10:50

À propos de cette intégration

IntegrationIntroduction

Il existe plusieurs moyens d’intégrer des systèmes tiers avec Product name - ev itsm.png. Cela, en fonction des besoins métiers, des contraintes d’architecture et de sécurité en vigueur ainsi que des spécificités de chaque application ou service tiers.

Cette page présente un processus d’intégration type déjà mis en œuvre dans un contexte client. 

Pour plus de détails sur cette intégration (scripts à utiliser, etc.), veuillez contacter les départements "Consulting & Professional Services" et Support d'Logo - EasyVista.png ou vos fournisseurs de services et intégrateurs habituels.
 

Synthèse de l'intégration

GitHub est un service en ligne qui permet d'héberger des sites web, des fichiers de code source, ... et toute la chronologie de leurs mises à jour, en utilisant le logiciel de gestion de version Git. C'est également un espace collaboratif où chaque utilisateur peut contribuer aux projets mis en ligne publiquement.

Cette intégration vous permet de créer une action dans la frise chronologique (timeline) d'un ticket Service Manager lorsque la pull request à laquelle il est rattaché dans GitHub est clôturée, en utilisant Microsoft Power Automate.

  • Le statut est modifié sur l'élément de travail Azure DevOps.
  • Un lien d'accès direct vers la pull request dans GitHub est ajouté.
             Ticket Service Manager - New action with pull request link.png

Note : Le lien entre GitHub et Service Manager se fait au travers d'un commentaire type ajouté sur la pull request. Ce commentaire doit comprendre le numéro du ticket Service Manager et l'identifiant de l'élément de travail Azure DevOps de type Bug auquel il est rattaché.
 

Aperçu des outils utilisés dans cette intégration

  • Microsoft Power Automate (anciennement Microsoft Flow) permet d'automatiser les tâches répétitives en construisant des flux de travail via des applications web. Ces applications utilisent des connecteurs MS Power Automate (basés sur Microsoft Azure Logic Apps) ou la passerelle MS Graph pour s'interfacer avec n'importe quel point de terminaison via HTTP/HTTPS.
     
Flux d'intégration des données (sens) Type d'authentification Options du connecteur d'intégration

Logo Icon - GitHub.png

Down arrow.png

Logo Icon - Microsoft Flow.png

Down arrow.png

Logo - EV Service Manager.png

  • Selon le service externe utilisé (authentification prise en charge par Logic Apps)
  • Basic Authentication pour l'API REST Service Manager
  • Service Manager :

    EV Integration connector icon - Workflow.png    Workflow

    EV Integration connector icon - Business rule.png    Règle métier

  • MS Power Automate :

    EV Integration connector icon - Receive.png    Connecteur : Lors de la réception d'une demande HTTP

    (Trigger Service Manager => Logic Apps)

Versions disponibles
SaaS On Premise
Service Manager Check icon.png Check icon.png
Produit tiers Check icon.png N/A

Quelques définitions sur GitHub

Definitions_GitHub
  • GitHub est un service en ligne qui permet d’héberger des sites web, des fichiers de code source, ... et toute la chronologie de leurs mises à jour, en utilisant le logiciel de gestion de version Git. C'est également un espace collaboratif où chaque utilisateur peut contribuer aux projets mis en ligne publiquement.
  • Git est un logiciel de contrôle de version qui gère toutes les modifications des projets et les sauvegarde dans des versions, permettant de revenir en arrière à tout moment.
  • La copie, via Git, de l’intégralité des fichiers d'un projet et de ses versions est appelé un dépôt, ou repository. Il s'agit d'un espace de stockage sur le serveur centralisé GitHub qui contient chaque code source.
  • Des problèmes, ou issues, sont créés pour initier des discussions entre développeurs, des rapports de bugs, des suggestions d’évolution, ...
  • Une pull request est une procédure qui permet à un contributeur extérieur de proposer des modifications du code original à son auteur (request) puis de les reprendre et de les intégrer (pull).
  • Une review est une revue de code pour valider une pull request. Lorsque les modifications d'une review sont approuvées, la pull request est fusionnée, ou mergée, avec la version originale.

Flux d'échange dans Microsoft Power Automate

L'intégration entre Service Manager et GitHub lors de la clôture d'une pull request rattachée à un ticket Service Manager donne lieu à l'exécution d'un flux dans Microsoft Power Automate.

==> Flux Clôture d'une pull request dans GitHub
         Data feed diagram 1 - EN.png

Prérequis

  • Vous devez demander à EasyVista la création de 2 champs dans la table SD_REQUEST, dédiés à Azure DevOps et GitHub.
  • Vous devez ajouter un commentaire type sur la pull request lorsqu'elle est clôturée  - Open url.png voir Procédure

Bonnes pratiques

BestPractice
  • La procédure décrit toutes les étapes de création des flux d'échange Microsoft Power Automate. Pour vous aider, téléchargez les fichiers .zip fournis avec cette intégration, qui contiennent les flux préparamétrés. Il vous suffit ensuite de renseigner les paramètres propres à votre environnement : identifiants d'accès à votre compte Azure, adresse du serveur EasyVista, identifiants d'accès à votre plateforme Service Manager, ...
  • Pour trouver facilement les connecteurs et les actions à créer dans le flux de travail Power Automate, utilisez la zone de recherche.

    exemple  Recherche des actions du connecteur Azure DevOps

    Microsoft Power Automate - Best Practice search connector.png

Attention

Caution_TitleActionInPowerAutomateFlow
  • Lorsque vous créez les actions du flux dans Microsoft Power Automate, il est impératif de les renommer comme indiqué dans la procédure. En effet, certaines informations font référence au titre de l'action et un changement de nom bloquerait le déroulement du flux.

    exemple  L'instruction {outputs('Create_a_Work_Item_(Bug)')?['body/id']} fait référence à l'action nommée Create a Work Item (Bug)

    Note : Les espaces dans le titre sont automatiquement remplacés par le caractère _

Processus d'intégration

 Prérequis  Demandez à EasyVista la création de 2 champs dans la table SD_REQUEST, dédiés à Azure DevOps et GitHub. Ajoutez-les sur la fiche Ticket  - Open url.png voir Procédure détaillée

1. Créez le flux MS Power Automate déclenché lors de la clôture d'une pull request  - Open url.png voir Procédure détaillée

  • Note : Le flux nécessite de créer une connexion à GitHub et une connexion à Azure DevOps.

Best Practice icon.png  Importez le flux ci-dessous dans MS Power Automate, qui est préparamétré et contient toutes les étapes  - Open url.png voir Procédure d'import du flux
        Download icon.png  Flux Clôture d'une pull request dans GitHub

2. Créez le commentaire type sur la pull request  - Open url.png voir Procédure détaillée

Note : Vous devez ajouter ce commentaire type à chaque clôture d'une pull request qui est rattachée à un ticket Service Manager.

Processus d'intégration pas à pas


AddDevOpsFieldsInTicketForm_Procedure

Ajout des champs dédiés à Azure DevOps et GitHub dans la table SD_REQUEST

Étape 1 : Ajout des champs dans la base de données par EasyVista

1. Effectuez une demande à EasyVista pour ajouter les 2 champs suivants.

  • Champ E_ADO_NUMBER de type nvarchar, taille 20 : stockage de l'identifiant de l'élément de travail Azure DevOps rattaché au ticket Service Manager.
  • Champ E_PR_NUMBER de type nvarchar, taille 20 : stockage du numéro de pull request GitHub rattachée au ticket Service Manager.
     

Étape 2 : Ajout des champs sur les fiches Ticket (incident / demande)

     Open url.png voir Procédure détaillée

1. Allez sur chaque fiche Ticket (incident / demande).

2. Cliquez sur Browse grey points icon.png dans le bandeau supérieur, puis sur Éditer la fiche.
La représentation principale de la fiche est affichée.

3. Sélectionnez et positionnez les 2 champs sur la fiche.

4. Cliquez sur Enregistrer puis sur Enregistrer et Fermer.

La fiche est réactualisée.
         Add fields DevOps in ticket form.png

Import du flux de travail dans Microsoft Power Automate

Note : Le flux nécessite de créer une connexion à GitHub et une connexion à Azure DevOps.

Étape 1 : Téléchargement du flux

1. Téléchargez le fichier ci-dessous sur votre ordinateur.

        Download icon.png  Flux Clôture d'une pull request dans GitHub

ImportFlowInMicrosoftPowerAutomate_Procedure

Étape 2 : Import du flux dans Microsoft Power Automate

1. Connectez-vous au site Microsoft Power Automate avec les informations d’identification de votre compte.

2. Cliquez sur Mes flux dans le menu latéral.
La liste de vos flux MS Power Automate est affichée.
         Microsoft Power Automate - Import flow - Flow list.png

3. Cliquez sur Importer dans la barre de menu et sélectionnez le fichier que vous avez téléchargé.

  • Une fois importé, le contenu du package est affiché.
  • L'icône Red nok icon.png indique que la connexion pour la ressource n'est pas trouvée.
    Microsoft Power Automate - Import flow - Package content.png
     

Étape 3 : Création des connexions nécessaires au flux

1. Cliquez sur le lien Sélectionner pendant l’import sous la colonne Importer la configuration, en regard de la ressource.
         Microsoft Power Automate - Import flow - Import setup link.png

Une fenêtre de configuration de l'import est affichée.
         Microsoft Power Automate - Import flow - Import setup window.png

2. Créez une nouvelle connexion pour la ressource ou sélectionnez une connexion existante.

Une connexion pour la ressource existe

  • Cliquez sur la connexion.
  • Cliquez sur Enregistrer.

    Microsoft Power Automate - Import flow - Import setup - Select existing connection.png

Aucune connexion pour la ressource n'existe

  • Cliquez sur + Créer.

    Microsoft Power Automate - Import flow - Import setup - Create connection.png

    • Une instance MS Power Automate est ouverte dans un nouvel onglet de votre navigateur internet.
    • La liste des connexions existantes est affichée.
               Microsoft Power Automate - Import flow - Import setup - Create connection 2.png
  • Cliquez sur + Nouvelle connexion.
  • Recherchez la connexion souhaitée via la zone de recherche, puis sélectionnez-la dans la liste.

exemple  Recherche de la connexion GitHub

Microsoft Power Automate - Import flow - Import setup - Create connection 3.png

Une fenêtre affichant la liste des autorisations à accorder à Microsoft Power Platform est affichée.

  • Cliquez sur Créer pour effectuer la création de la nouvelle connexion.
  • Cliquez sur Accepter pour accepter les conditions et accorder l'accès à Microsoft Power Platform.
    • Vous revenez sur l'onglet affichant la liste des flux MS Power Automate.
    • La nouvelle connexion pour la ressource est affichée dans la liste.

exemple  Nouvelle connexion GitHub

Microsoft Power Automate - Import flow - Import setup - New connection added.png

  • Fermez l'onglet du navigateur internet.
    Vous revenez sur l'onglet affichant le détail du package importé.
  • Cliquez sur Refresh List.
    La nouvelle connexion pour la ressource est affichée dans la fenêtre de configuration de l'import.
             Microsoft Power Automate - Import flow - Import setup - Refresh list.png
  • Cliquez sur la connexion puis sur Enregistrer.
    L'icône Black cross icon.png indique que la connexion pour la ressource est correctement effectuée.
             Microsoft Power Automate - Import flow - Import setup - New connection ok.png

3. Répétez les mêmes opérations pour chaque connexion nécessaire au flux.
 

Étape 3 : Import des ressources du package

1. Cliquez sur Importer.

          Microsoft Power Automate - Import flow - Button.png

L'icône Green ok icon.png devant chaque ressource du package indique que l'import du flux est correctement effectué.
         Microsoft Power Automate - Import flow - Ok.png

Étape 4 : Configuration des ressources du package

Note : Effectuez cette étape si un message en haut de la page indique que des ressources du package nécessitent une configuration.

1. Cliquez sur Save as new flow dans le message affiché en haut de page.

         Microsoft Power Automate - Import flow with error - Save as new flow.png

  • Une instance MS Power Automate est ouverte dans un nouvel onglet de votre navigateur internet.
  • Le flux de travail du package importé est affiché.
             Microsoft Power Automate - Import flow with error - Invalid connection.png

2. Cliquez sur l'action indiquant que la connexion est invalide.
La liste des connexions existantes pour le type de ressource est affichée.
         Microsoft Power Automate - Import flow with error - Invalid connection - Select connection.png

2. Cliquez sur la connexion définie pour le type de ressource.

Les propriétés de l'action sont affichées. Elles varient en fonction du type de ressource.

exemple  Propriétés non renseignées pour une action utilisant la ressource Azure DevOps

Microsoft Power Automate - Import flow with error - Invalid connection - Configure connection.png

3. Renseignez les informations de la connexion pour l'action.

exemple  Propriétés pour une action utilisant la ressource Azure DevOps

  • Nom de l'organisation : Sélectionnez le nom de votre organisation.
  • Nom du projet : Sélectionnez le nom de votre projet DevOps.

4. Répétez les mêmes opérations pour chaque action indiquant une erreur de connexion.

5. Cliquez sur Save.

  • Le message d'erreur disparaît sur chaque action.

exemple  Action pour la ressource Azure DevOps

Microsoft Power Automate - Import flow with error - Invalid connection - Configure connection ok.png

  • Toutes les connexions nécessaires au flux sont configurées.
  • Le flux de travail est créé.
             Microsoft Power Automate - Import flow - Success.png
     

Étape 5 : Configuration du flux de travail

1. Survolez le libellé du flux avec la souris puis cliquez sur Edit icon.png.
         Microsoft Power Automate - Open flow.png

Le flux de travail est affiché.
         Microsoft Power Automate - Detail flow.png

2. Reportez-vous à la procédure de configuration du flux importé.

Création du flux MS Power Automate

Description du flux de travail Clôture d'une pull request dans GitHub

Azure flow description - Close GitHub pull request.png
  • Étape 1 : Création de l'étape de déclenchement du flux (trigger)
  • Étape 3 : Recherche du numéro du ticket Service Manager lorsque le statut de la pull request est Clôturé
    • Étape 3.a : Création de la condition pour tester le statut de la pull request
    • Étape 3.b : Recherche du commentaire type contenant la section Resources lorsque le statut est Clôturé
    • Étape 3.c : Création de la condition pour récupérer la section Resources du commentaire type
    • Étape 3.d : Recherche de l'identifiant de l'élément de travail Azure DevOps et du numéro de ticket Service Manager
  • Étape 4 : Mise à jour du statut de l'élément de travail Azure DevOps lorsque la variable Work Item ID contient un identifiant
    • Étape 4.a : Création de la condition pour tester l'existence d'un identifiant d'élément de travail Azure DevOps
    • Étape 4.b : Mise à jour du statut de l'élément de travail Azure DevOps à Closed
  • Étape 5 : Création d'une action dans la frise chronologique (timeline) du ticket Service Manager lorsque la date de fusion de la pull request est nulle
    • Étape 5.a : Création de la condition pour tester l'existence d'une date de fusion sur la pull request
    • Étape 5.b : Recherche du ticket Service Manager
    • Étape 5.c : Création de l'action dans la frise chronologique (timeline) du ticket Service Manager
  • Étape 6 : Stockage du numéro de pull request dans le ticket Service Manager
  • Étape 7 : Sauvegarde de la configuration du flux de travail


Étape 1 : Création de l'étape de déclenchement du flux (trigger)

==> Le flux est déclenché lorsqu'une pull request est clôturée dans GitHub.

1. Créez une action de déclenchement de type When a Pull Request is created or modified pour démarrer le flux de travail (connecteur GitHub > Triggers).

Microsoft Power Automate - Trigger - When a pull request is created or modified.png
  • Renseignez les informations du déclencheur.
    • Repository Owner : Nom du compte du propriétaire du répertoire GitHub.
    • Repository Name : Nom du répertoire GitHub.
    • Webhook events : Saisissez la valeur pull_request.
  • Sauvegardez le déclencheur.


Étape 2 : Initialisation de variables

1. Définissez les variables ci-dessous, en créant dans l'ordre la suite d'actions de type Initialiser la variable ci-dessous.

Microsoft Power Automate - Action - Initialize variable.png
Variable 1 : Pour stocker l'identifiant de l'élément de travail Azure DevOps
  • Renommez l'action par Initialize variable Work Item ID, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Nom : Saisissez la valeur Work_Item_ID.
    • Type : Sélectionnez la valeur String.
Variable 2 : Pour stocker le numéro de ticket Service Manager
  • Renommez l'action par Initialize variable RFC NUMBER, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Nom : Saisissez la valeur RFC_NUMBER.
    • Type : Sélectionnez la valeur String.


Étape 3 : Recherche du numéro du ticket Service Manager lorsque le statut de la pull request est Clôturé


Étape 3.a : Création de la condition pour tester le statut de la pull request

1. Créez une action de type Condition.

Flow Close pull request - Condition if the PR is closed - Line condition.png
  • Renommez-la par Condition if the PR is closed, via Browse black points icon.png dans la barre de titre.
  • Ajoutez la ligne de condition ci-dessous, en cliquant sur Add.
Valeur testée Ligne de condition
Statut Clôturé
  • Sélectionner valeur : Saisissez l'instruction suivante.
    @triggerOutputs()?['body/action']
  • Comparateur : Sélectionnez la valeur is equal to.
  • Valeur : Sélectionnez la valeur closed.

2. Renseignez les actions à réaliser lorsque le statut de la pull request est clôturé (condition de l'action Condition if the PR is closed vérifiée).

  • Allez sur la branche If Yes.
  • Ajoutez les actions de l'étape 3.b, via Add an action.


Étape 3.b : Recherche du commentaire type contenant la section Resources lorsque le statut est Clôturé

          Action Azure - GitHub - Condition if the PR is closed - Yes branch.png

1. Créez une action de type HTTP pour lire tous les commentaires de la pull request.

Microsoft Power Automate - Action - HTTP Get with bearer token.png
  • Renommez-la par HTTP Get Comments, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Méthode : Saisissez la valeur GET.
    • URI : Saisissez l'expression suivante.
      concat(triggerOutputs()?['body/pull_request/issue_url'],'/comments')
    • Headers :
      • Colonne de gauche : Saisissez la valeur Authorization.
      • Colonne de droite : Saisissez la valeur Bearer XXXXXXX en remplaçant XXXXXXX par le token bearer de GitHub.

2. Créez une action de type Analyser JSON pour récupérer les informations des commentaires.

Microsoft Power Automate - Action - Parse JSON.png
  • Renommez-la par Parse JSON Get Comments, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Contenu : Sélectionnez la variable dynamique Body provenant de l'étape HTTP Get Comments.
    • Schema : Effectuez un copier-coller du schéma JSON ci-dessous.

      Afficher le schéma JSON

      {
         "type": "array",
         "items": {
             "type": "object",
             "properties": {
                 "url": {
                     "type": "string"
                  },
                 "html_url": {
                     "type": "string"
                  },
                 "issue_url": {
                     "type": "string"
                  },
                 "id": {
                     "type": "integer"
                  },
                 "node_id": {
                     "type": "string"
                  },
                 "user": {
                     "type": "object",
                     "properties": {
                         "login": {
                             "type": "string"
                          },
                         "id": {
                             "type": "integer"
                          },
                         "node_id": {
                             "type": "string"
                          },
                         "avatar_url": {
                             "type": "string"
                          },
                         "gravatar_id": {
                             "type": "string"
                          },
                         "url": {
                             "type": "string"
                          },
                         "html_url": {
                             "type": "string"
                          },
                         "followers_url": {
                             "type": "string"
                          },
                         "following_url": {
                             "type": "string"
                          },
                         "gists_url": {
                             "type": "string"
                          },
                         "starred_url": {
                             "type": "string"
                          },
                         "subscriptions_url": {
                             "type": "string"
                          },
                         "organizations_url": {
                             "type": "string"
                          },
                         "repos_url": {
                             "type": "string"
                          },
                         "events_url": {
                             "type": "string"
                          },
                         "received_events_url": {
                             "type": "string"
                          },
                         "type": {
                             "type": "string"
                          },
                         "site_admin": {
                             "type": "boolean"
                          }
                      }
                  },
                 "created_at": {
                     "type": "string"
                  },
                 "updated_at": {
                     "type": "string"
                  },
                 "author_association": {
                     "type": "string"
                  },
                 "body": {
                     "type": "string"
                  },
                 "reactions": {
                     "type": "object",
                     "properties": {
                         "url": {
                             "type": "string"
                          },
                         "total_count": {
                             "type": "integer"
                          },
                         "+1": {
                             "type": "integer"
                          },
                         "-1": {
                             "type": "integer"
                          },
                         "laugh": {
                             "type": "integer"
                          },
                         "hooray": {
                             "type": "integer"
                          },
                         "confused": {
                             "type": "integer"
                          },
                         "heart": {
                             "type": "integer"
                          },
                         "rocket": {
                             "type": "integer"
                          },
                         "eyes": {
                             "type": "integer"
                          }
                      }
                  },
                 "performed_via_github_app": {}
              },
             "required": [
                 "url",
                 "html_url",
                 "issue_url",
                 "id",
                 "node_id",
                 "user",
                 "created_at",
                 "updated_at",
                 "author_association",
                 "body",
                 "reactions",
                 "performed_via_github_app"
              ]
          }
      }


Étape 3.c : Création de la condition pour récupérer la section Resources du commentaire type

          Flow Close pull request - Condition if the PR is closed - Apply to each comments detail.png

1. Créez une action de type Apply to each.

Flow Close pull request - Condition if the PR is closed - Apply to each comments action.png
  • Renseignez les informations de l'action.
    • Select an output from previous steps : Saisissez l'instruction suivante.
      @{body('Parse_JSON')}

2. Créez une action de type HTTP pour lire chaque commentaire de la pull request.

Microsoft Power Automate - Action - HTTP Get with bearer token.png
  • Renommez-la par HTTP Get a comment, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Méthode : Saisissez la valeur GET.
    • URI : Saisissez l'expression suivante.
      @{items('Apply_to_each')['url']}
    • Headers :
      • Colonne de gauche : Saisissez la valeur Authorization.
      • Colonne de droite : Saisissez la valeur Bearer XXXXXXX en remplaçant XXXXXXX par le token bearer de GitHub.

3. Créez une action de type Analyser JSON pour récupérer les informations du commentaire.

Microsoft Power Automate - Action - Parse JSON.png
  • Renommez-la par Parse JSON Get a comment, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Contenu : Sélectionnez la variable dynamique Body provenant de l'étape HTTP Get a comment.
    • Schema : Effectuez un copier-coller du schéma JSON ci-dessous.

      Afficher le schéma JSON

      {
         "type": "object",
         "properties": {
             "url": {
                 "type": "string"
              },
             "html_url": {
                 "type": "string"
              },
             "issue_url": {
                 "type": "string"
              },
             "id": {
                 "type": "integer"
              },
             "node_id": {
                 "type": "string"
              },
             "user": {
                 "type": "object",
                 "properties": {
                     "login": {
                         "type": "string"
                      },
                     "id": {
                         "type": "integer"
                      },
                     "node_id": {
                         "type": "string"
                      },
                     "avatar_url": {
                         "type": "string"
                      },
                     "gravatar_id": {
                         "type": "string"
                      },
                     "url": {
                         "type": "string"
                      },
                     "html_url": {
                         "type": "string"
                      },
                     "followers_url": {
                         "type": "string"
                      },
                     "following_url": {
                         "type": "string"
                      },
                     "gists_url": {
                         "type": "string"
                      },
                     "starred_url": {
                         "type": "string"
                      },
                     "subscriptions_url": {
                         "type": "string"
                      },
                     "organizations_url": {
                         "type": "string"
                      },
                     "repos_url": {
                         "type": "string"
                      },
                     "events_url": {
                         "type": "string"
                      },
                     "received_events_url": {
                         "type": "string"
                      },
                     "type": {
                         "type": "string"
                      },
                     "site_admin": {
                         "type": "boolean"
                      }
                  }
              },
             "created_at": {
                 "type": "string"
              },
             "updated_at": {
                 "type": "string"
              },
             "author_association": {
                 "type": "string"
              },
             "body": {
                 "type": "string"
              },
             "reactions": {
                 "type": "object",
                 "properties": {
                     "url": {
                         "type": "string"
                      },
                     "total_count": {
                         "type": "integer"
                      },
                     "+1": {
                         "type": "integer"
                      },
                     "-1": {
                         "type": "integer"
                      },
                     "laugh": {
                         "type": "integer"
                      },
                     "hooray": {
                         "type": "integer"
                      },
                     "confused": {
                         "type": "integer"
                      },
                     "heart": {
                         "type": "integer"
                      },
                     "rocket": {
                         "type": "integer"
                      },
                     "eyes": {
                         "type": "integer"
                      }
                  }
              },
             "performed_via_github_app": {}
          }
      }

4. Créez une action de type Condition pour tester l'existence de la section Resources dans les informations récupérées dans l'étape Parse JSON Get a comment.

Flow Close pull request - Condition if comment is EZV - Line condition.png
  • Renommez-la par Condition if comment is EZV, via Browse black points icon.png dans la barre de titre.
  • Ajoutez la ligne de condition ci-dessous, en cliquant sur Add.
Valeur testée Ligne de condition
Section Resources trouvée
  • Sélectionner valeur : Saisissez l'instruction suivante.
    substring(body('Parse_JSON_Get_a_comment')?['body'],3,9)
  • Comparateur : Sélectionnez la valeur is equal to.
  • Valeur : Saisissez la valeur Resources.

5. Renseignez les actions à réaliser lorsque la section Resources est trouvée (condition de l'action Condition if comment is EZV vérifiée).

  • Allez sur la branche If Yes.
  • Ajoutez les actions de l'étape 3.d, via Add an action.


Étape 3.d : Recherche de l'identifiant de l'élément de travail Azure DevOps et du numéro de ticket Service Manager

          Action Azure - GitHub - Condition if the PR is closed - Yes branch - Apply to each - Yes branch.png

1. Créez dans l'ordre la suite d'actions ci-dessous de type Compose pour décomposer le contenu de la section Resources et récupérer l'identifiant de l'élément de travail Azure DevOps (recherche de la chaîne de caractère ADO dans le commentaire type).

Microsoft Power Automate - Action - Compose.png
Compose 1 :
  • Renommez l'action par Compose[, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      add(int(indexOf(body('Parse_JSON_Get_a_comment')?['body'],'ADO | [')),7)
Compose 2 :
  • Renommez l'action par Compose], via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      int(indexOf(body('Parse_JSON_Get_a_comment')?['body'],'](https://dev.azure.com/'))
Compose 3 :
  • Renommez l'action par Compose Last, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      sub(outputs('Compose_]'),outputs('Compose_['))
Compose 4 :
  • Renommez l'action par Compose Final, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      substring(body('Parse_JSON_Get_a_comment')?['body'],outputs('Compose_['),outputs('Compose_Last'))

2. Créez une action de type Set variable pour stocker l'identifiant de l'élément de travail Azure DevOps dans la variable Work Item ID.

Microsoft Power Automate - Action - Set variable.png
  • Renommez-la par Set variable Work Item ID, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Nom : Sélectionnez la valeur Work_Item_ID.
    • Valeur : Saisissez l'instruction suivante.
      @Outputs('Compose_Final')

3. Créez dans l'ordre la suite d'actions ci-dessous de type Compose pour décomposer le contenu de la section Resources et récupérer le numéro du ticket Service Manager (recherche de la chaîne de caractère Ticket number dans le commentaire type).

Microsoft Power Automate - Action - Compose.png
Compose 1 :
  • Renommez l'action par Compose[ RFC, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      add(int(indexOf(body('Parse_JSON_Get_a_comment')?['body'],'Ticket number | [')),17)
Compose 2 :
  • Renommez l'action par Compose] RFC, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      int(indexOf(body('Parse_JSON_Get_a_comment')?['body'],'](https://'))
Compose 3 :
  • Renommez l'action par Compose Last RFC, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      sub(outputs('Compose_]_RFC'),outputs('Compose_[_RFC'))
Compose 4 :
  • Renommez l'action par Compose Final RFC, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Inputs : Saisissez l'instruction suivante.
      substring(body('Parse_JSON_Get_a_comment')?['body'],outputs('Compose_[_RFC'),outputs('Compose_Last_RFC'))

4. Créez une action de type Set variable pour stocker le numéro du ticket Service Manager dans la variable RFC NUMBER.

Microsoft Power Automate - Action - Set variable.png
  • Renommez-la par Set variable RFC_NUMBER, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Nom : Saisissez la valeur RFC_Number.
    • Valeur : Sélectionnez l'instruction suivante.
      @Outputs('Compose_Final_RFC')


Étape 4 : Mise à jour du statut de l'élément de travail Azure DevOps lorsque la variable Work Item ID contient un identifiant


Étape 4.a : Création de la condition pour tester l'existence d'un identifiant d'élément de travail Azure DevOps

1. Créez une action de type Condition.

Flow Close pull request - Condition if the card exists - Line condition.png
  • Renommez-la par Condition if there is a Work Item ID, via Browse black points icon.png dans la barre de titre.
  • Ajoutez les lignes de condition ci-dessous, en cliquant sur Add.
Valeur testée Ligne de condition
Variable Work Item ID non nulle
  • Sélectionner valeur : Saisissez l'instruction suivante.
    @variables('Work Item ID')
  • Comparateur : Sélectionnez la valeur is not equal to.
  • Valeur : Sélectionnez la valeur null.
Variable Work Item ID non vide
  • Sélectionner valeur : Saisissez l'instruction suivante.
    @variables('Work Item ID')
  • Comparateur : Sélectionnez la valeur is not equal to.
  • Valeur : Sélectionnez la valeur "".
Variable Work Item ID = XXX
  • Sélectionner valeur : Saisissez l'instruction suivante.
    @variables('Work Item ID')
  • Comparateur : Sélectionnez la valeur is not equal to.
  • Valeur : Sélectionnez la valeur XXX.

2. Renseignez les actions à réaliser lorsque la variable Work Item ID contient un identifiant d'élément de travail Azure DevOps (conditions de l'action Condition if the card exists vérifiées).

  • Allez sur la branche If Yes.
  • Ajoutez les actions de l'étape 4.b, via Add an action.


Étape 4.b : Mise à jour du statut de l'élément de travail Azure DevOps à Closed

          Flow Close pull request - Condition if the card exists - Yes branch.png

1. Créez une action de type Modifier un élément de travail (connecteur Azure DevOps).

Microsoft Power Automate - Action - Update a work item Azure DevOps.png
  • Renseignez les informations de l'action.* Nom de l'organisation : Nom de votre organisation.
    • ID élément de travail : Identifiant de l'élément de travail. Saisissez l'instruction suivante.
      @{variables('Work_Item_ID')}
    • Type d'élément de travail : Sélectionnez le type Bug.

    • Options avancées :
      • Lien URL : Saisissez l'URL de l'élément de travail Bug, sous la forme suivante, en remplaçant les valeurs en jaune par celles de votre environnement.
        https://dev.azure.com/{your_organization}/{your_project}/_apis/wit/workItems/@{outputs('Create_a_Work_Item_(Bug)')?['body/id']}
      • Statut : Saisissez la valeur Closed.


Étape 5 : Création d'une action dans la frise chronologique (timeline) du ticket Service Manager lorsque la date de fusion de la pull request est nulle

          Flow Close pull request - Condition if the card exists - Yes branch - Condition if it's a merge.png


Étape 5.a : Création de la condition pour tester l'existence d'une date de fusion sur la pull request

1. Créez une action de type Condition.

Flow Close pull request - Condition if it's a merge - Line condition.png
  • Renommez-la par Condition if the PR is merged, via Browse black points icon.png dans la barre de titre.
  • Ajoutez la ligne de condition ci-dessous, en cliquant sur Add.
Valeur testée Ligne de condition
Date de fusion nulle
  • Sélectionner valeur : Saisissez l'instruction suivante.
    @triggerOutputs()?['body/pull_request/merged_at']
  • Comparateur : Sélectionnez la valeur is equal to.
  • Valeur : Sélectionnez la valeur null.

2. Renseignez les actions à réaliser lorsque la date de fusion de la pull request est nulle (condition de l'action Condition if it's a merge vérifiée).

  • Allez sur la branche If Yes.
  • Ajoutez les actions de l'étape 5.b, via Add an action.


Étape 5.b : Recherche du ticket Service Manager

1. Créez une action de type HTTP pour rechercher le ticket Service Manager correspondant à la variable RFC NUMBER.

Microsoft Power Automate - Action - HTTP Get.png
  • Renommez-la par HTTP Get Group ID, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Méthode : Saisissez la valeur GET.
    • URI : Saisissez l'expression suivante, en remplaçant les valeurs en jaune par celles de votre environnement.
      concat('{your_platform}/api/v1/{your_account}/actions?search=request.rfc_number:',variables('RFC_NUMBER'),',end_date_ut:"is_null"&fields=group_id&sort=action_id+desc&max_rows=1')

2. Créez une action de type Analyser JSON pour récupérer les informations du ticket Service Manager.

Microsoft Power Automate - Action - Parse JSON.png
  • Renommez-la par Parse JSON Get Group ID, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.
    • Contenu : Sélectionnez la variable dynamique Body provenant de l'étape HTTP Get a comment.
    • Schema : Effectuez un copier-coller du schéma JSON ci-dessous.

      Afficher le schéma JSON

      {
         "type": "object",
         "properties": {
             "HREF": {
                 "type": "string"
              },
             "record_count": {
                 "type": "string"
              },
             "total_record_count": {
                 "type": "string"
              },
             "records": {
                 "type": "array",
                 "items": {
                     "type": "object",
                     "properties": {
                         "HREF": {
                             "type": "string"
                          },
                         "ACTION_ID": {
                             "type": "string"
                          },
                         "GROUP_ID": {
                             "type": "string"
                          }
                      },
                     "required": [
                         "HREF",
                         "ACTION_ID",
                         "GROUP_ID"
                      ]
                  }
              }
          }
      }


Étape 5.c : Création de l'action dans la frise chronologique (timeline) du ticket Service Manager

1. Créez une action de type Apply to each.

Flow close pull request - Condition if it's a merge - Apply to each action.png
  • Renseignez les informations de l'action.
    • Select an output from previous steps : Saisissez l'instruction suivante.
      @{body('Parse JSON Get Group ID')?['records']}

2. Créez une action de type HTTP pour créer une action dans la frise chronologique (timeline) du ticket Service Manager.

Flow close pull request - Condition if it's a merge - Apply to each detail.png
  • Renommez-la par Send to EZV, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.* Méthode : Saisissez la valeur POST.
    • URI : Saisissez l'expression suivante.
      concat(outputs('Update_a_work_item')?['body/fields/Custom_EZV_URI'],'requests/',outputs('Update_a_work_item')?['body/fields/Custom_EZV_ID'])
    • Body : Effectuez un copier-coller du schéma JSON ci-dessous.
      { "action_type_id": "95", "group_id": "@{items('Apply_to_each')?['GROUP_ID']}", "comment": "Cloture de la PR @{triggerOutputs()?['body/pull_request/number']} < br> @{triggerOutputs()?['body/pull_request/html_url']} " }


Étape 6 : Stockage du numéro de pull request dans le ticket Service Manager

1. Créez une action de type HTTP pour mettre à jour le ticket Service Manager.

Flow close pull request - Condition if the card exists - Send to EZV PR Number.png
  • Renommez-la par Send to EZV PR Number, via Browse black points icon.png dans la barre de titre.
  • Renseignez les informations de l'action.* Méthode : Saisissez la valeur POST.
    • URI : Saisissez l'expression suivante.
      concat(outputs('Update_a_work_item')?['body/fields/Custom_EZV_URI'],'requests/',outputs('Update_a_work_item')?['body/fields/Custom_EZV_ID'])
    • Body : Effectuez un copier-coller du schéma JSON ci-dessous.
      { "E_PR_NUMBER": "@{triggerOutputs()?['body/pull_request/number']}" }


Étape 7 : Sauvegarde de la configuration du flux de travail

1. Cliquez sur Save en bas du flux.

          Azure flow - Save configuration.png

Création du commentaire type sur la pull request

Note : Vous devez ajouter un commentaire type sur chaque pull request rattachée à un ticket Service Manager lorsqu'elle est clôturée.

CreatePullRequestTypeComment_Procedure

Étape 1 : Connexion à GitHub

1. Connectez-vous à GitHub avec les informations d’identification de votre compte.

2. Sélectionnez le compte du propriétaire du répertoire GitHub puis le répertoire GitHub où est enregistrée la pull request.

          GitHub - Pull request create type comment - Connection.png
 

Étape 2 : Recherche de la pull request

1. Allez sur l'onglet Pull requests.
La liste des pull requests est affichée.
         GitHub - Pull request create type comment - Pull request list.png

2. Cliquez sur la pull request à traiter.
Les actions effectuées sur la pull request sont affichées.
 

Étape 3 : Création du commentaire type sur la pull request

1. Cliquez sur Comment en bas de la pull request.

          GitHub - Pull request create type comment.png

2. Saisissez le commentaire type suivant dans l'onglet Write, en remplaçant les valeurs indiquées en jaune.

  • RXXXXXX_XXXXXX : Numéro du ticket Service Manager
  • ID_Azure : Élément de travail Azure DevOps de type Bug auquel est rattaché le ticket

## Resources
| Resource | URL |
|------------------------|:----------------:|
| Ticket number | [RXXXXXX_XXXXXX](https://autoconnect_link) |
| ADO | [ID Azure](https://dev.azure.com/Organization/Project_Name/_workitems/edit/ID_Azure) |

3. Cliquez sur Comment.

Le commentaire est mis à jour dynamiquement sur la pull request. Il affiche le numéro du ticket Service Manager et l'identifiant de l'élément de travail Azure DevOps de type Bug auquel il est rattaché.
         GitHub - Pull request create type comment - Result.png

Liens vers d'autres intégrations

Liste des fichiers à télécharger

Note : Reportez-vous au processus d'intégration pas à pas pour leur utilisation.

         Download icon.png  Flux Clôture d'une pull request dans GitHub

Tags :
Powered by XWiki © EasyVista 2022