Webhook otrzymuje dane z Jenkins

Z Planfix
Wersja z dnia 01:42, 6 gru 2025 autorstwa PlanfixBot (dyskusja | edycje) (Utworzono nową stronę "{{#seo: |title=Webhook accepts data from Jenkins |titlemode=append |keywords=incoming webhooks, webhook, webhook receives data from Jenkins, Jenkins, Jenkins Pipeline, build, deploy |description=Webhook accepts data from Jenkins }} W dużym zespole współpracującym nad projektem czasami przydatne jest wiedzieć, czy nowe uaktualnienie w projekcie jest gotowe do pracy. Takie powiadomienie jako komentarz może zostać wysłane do programistów w odpowiednim zadaniu…")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Skocz do: nawigacja, szukaj

W dużym zespole współpracującym nad projektem czasami przydatne jest wiedzieć, czy nowe uaktualnienie w projekcie jest gotowe do pracy. Takie powiadomienie jako komentarz może zostać wysłane do programistów w odpowiednim zadaniu w Planfix, gdy nowe usprawnienia będą gotowe. Funkcjonalność tę można zaimplementować za pomocą Jenkins i przychodzące webhooki.

Jak to zrobić

  • Twórz commity w następującym formacie: 123456 - commit text, gdzie 123456 to numer zadania w Planfix.
  • Utwórz webhook do odbioru commitów.
  • Dodaj kod w Jenkins Pipeline, który wysyła dane do webhooka.

Konfiguracja webhooka

0Zvave.jpg

Kod w Jenkins

Dwie funkcje pomocnicze:

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


Kod do wstawienia po zakończeniu operacji:

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
}


Ostateczny efekt

Programista zobaczy podobny komentarz w zadaniu:

E6hGY1.jpg


Przejdź do