Webhook otrzymuje dane z Jenkins
Z Planfix
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
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: