Skip to content

Le webhook reçoit des données de Jenkins

Dans une grande équipe qui collabore sur un projet, il est parfois utile de savoir si une nouvelle mise à jour du projet est prête à être traitée. Une telle notification sous forme de commentaire peut être envoyée aux développeurs dans la Tâche correspondante de Planfix lorsque les nouvelles améliorations sont prêtes. Cette fonctionnalité peut être mise en œuvre en utilisant Jenkins et incoming webhooks.

Comment faire

  • Créez des commits de ce type : 123456 - texte du commit, où 123456 est le numéro de la Tâche dans Planfix.
  • Créez un webhook pour recevoir les commits.
  • Ajoutez du code dans Jenkins Pipeline qui envoie les données au webhook.

Configuration du webhook

0Zvave.jpg

Code dans Jenkins

Deux fonctions auxiliaires :

@NonCPS
def getTaskNumber(text) {
   def m = (text =~ /\d+/);
   def taskNumber = m ? m[0] : "";
   return taskNumber
}


@NonCPS
def getChangesByTaskNumber() {
   def changes = [:]
   def maxMessages = 50;

   def changeLogSets = currentBuild.changeSets

   for (int i = 0; i < changeLogSets.size(); i++) {
       def entries = changeLogSets[i].items
       for (int j = 0; j < entries.length && i + j < maxMessages; j++) {
           def entry = entries[j]
           def taskNumber = getTaskNumber(entry.msg);
           if(taskNumber != "") {
               if(!changes.containsKey(taskNumber)) {
                   changes[taskNumber] = "";
               }
               changes[taskNumber] += entry.msg + "<br>"
           }
       }
   }

   return changes
}


Code à insérer après que les opérations sont terminées :

def deployedTasks = getChangesByTaskNumber()
deployedTasks.eachWithIndex { key, value, i -> 
    httpRequest contentType: "APPLICATION_JSON_UTF8", httpMode: "POST", requestBody: "{ \"task\" : ${key}, \"comment\" : \"${value.replaceAll('"','\\\\"')}\", \"project\" : \"project-name\", \"branch\" : \"${env.gitlabBranch}\"}", responseHandle: "NONE", url: "https://myacc.planfix.ru/webhook/json/b7mh-dead-687f-lpwq";, consoleLogResponseBody: true
}


Résultat final

Le développeur verra un commentaire similaire dans la Tâche :

E6hGY1.jpg


Aller à