Webhook empfängt Daten von Jenkins
Aus Planfix
In einem großen Team, das an einem Projekt zusammenarbeitet, ist es manchmal hilfreich zu wissen, ob ein neues Update im Projekt zur Weiterarbeit bereit ist. Eine solche Benachrichtigung als Kommentar kann an die Entwickler/innen in der entsprechenden Planfix-Aufgabe gesendet werden, wenn die neuen Verbesserungen fertig sind. Diese Funktionalität kann mit Jenkins und incoming webhooks realisiert werden.
Vorgehen
- Erstellen Sie Commits dieses Typs: 123456 - commit text, wobei 123456 die Aufgabennummer in Planfix ist.
- Erstellen Sie einen Webhook, um Commits zu empfangen.
- Fügen Sie Code in Jenkins Pipeline hinzu, der Daten an den Webhook sendet.
Webhook-Einrichtung
Code in Jenkins
Zwei Hilfsfunktionen:
@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, der nach Abschluss der Vorgänge eingefügt wird:
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
}
Endergebnis
Der Entwickler bzw. die Entwicklerin sieht einen ähnlichen Kommentar in der Aufgabe: