Webhook primește date de la Jenkins

De la Planfix
Versiunea din 30 noiembrie 2025 01:56, autor: PlanfixBot (discuție | contribuții) (Pagină nouă: {{#seo: |title=Webhook primește date de la Jenkins |titlemode=append |keywords=incoming webhooks, webhook, webhook primește date de la Jenkins, Jenkins, Jenkins Pipeline, build, deploy |description=Webhook primește date de la Jenkins }} Într-o echipă mare care colaborează la un proiect, uneori este util să știți dacă o actualizare nouă din proiect este pregătită pentru lucru. O astfel de notificare, sub formă de comentariu, poate fi trimisă dezvoltatorilor în...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)
Salt la: navigare, căutare

Într-o echipă mare care colaborează la un proiect, uneori este util să știți dacă o actualizare nouă din proiect este pregătită pentru lucru. O astfel de notificare, sub formă de comentariu, poate fi trimisă dezvoltatorilor în Sarcina corespunzătoare din Planificator atunci când noile îmbunătățiri sunt gata. Această funcționalitate poate fi implementată folosind Jenkins și incoming webhooks.

Cum se face

  • Creați commit-uri de acest tip: 123456 - textul commit-ului, unde 123456 este numărul sarcinii în Planfix.
  • Creați un webhook care primește commit-urile.
  • Adăugați cod în Jenkins Pipeline care trimite date către webhook.

Configurarea webhook-ului

0Zvave.jpg

Cod în Jenkins

Două funcții auxiliare:

@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
}


Cod pentru inserare după ce operațiunile au fost finalizate:

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
}


Rezultatul final

Dezvoltatorul va vedea un comentariu similar în sarcină:

E6hGY1.jpg


Mergeți la