Вебхук принимает данные из Jenkins: различия между версиями
Материал из Planfix
Artem (обсуждение | вклад) Нет описания правки |
Seva (обсуждение | вклад) Нет описания правки |
||
| (не показаны 22 промежуточные версии 2 участников) | |||
| Строка 5: | Строка 5: | ||
|description=Вебхук принимает данные из Jenkins | |description=Вебхук принимает данные из Jenkins | ||
}} | }} | ||
В большой команде, которая работает над общим проектом, иногда важно знать, готово ли к работе новое обновление в проекте. Такое оповещение в виде комментария можно отправлять разработчикам в соответствующую задачу в ПланФиксе именно в тот момент, когда новые доработки готовы к использованию. Такой функционал возможно реализовать, используя [https://www.jenkins.io/ Jenkins] и [[Входящие вебхуки |входящие вебхуки]]. | |||
== Как это сделать == | |||
*Сформируйте коммиты такого вида: 123456 - текст коммита, где 123456 - номер задачи в ПланФиксе. | |||
* | *Создайте вебхук, который получит коммиты. | ||
* | *В [https://www.jenkins.io/doc/book/pipeline/ Jenkins Pipeline] допишите код, который отправит данные на вебхук. | ||
*В Jenkins Pipeline | |||
| Строка 23: | Строка 21: | ||
Две вспомогательные функции: | Две вспомогательные функции: | ||
< | <pre> | ||
@NonCPS | @NonCPS | ||
def getTaskNumber(text) { | def getTaskNumber(text) { | ||
| Строка 30: | Строка 28: | ||
return taskNumber | return taskNumber | ||
} | } | ||
</ | </pre> | ||
< | |||
<pre> | |||
@NonCPS | @NonCPS | ||
def getChangesByTaskNumber() { | def getChangesByTaskNumber() { | ||
| Строка 56: | Строка 55: | ||
return changes | return changes | ||
} | } | ||
</nowiki> | </pre> | ||
Код, который вставляем после завершения всех операций: | |||
<pre> | |||
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: "<nowiki>https://</nowiki>myacc.planfix.ru/webhook/json/b7mh-dead-687f-lpwq", consoleLogResponseBody: true | |||
} | |||
</pre> | |||
== Итоговый результат == | |||
Разработчик увидит в задаче такой комментарий: | |||
https://p.pfx.so/pf/n7/DyTZ59.png | |||
== Перейти == | == Перейти == | ||
*[[Входящие вебхуки]] | *[[Входящие вебхуки]] | ||
Текущая версия от 09:24, 17 апреля 2021
В большой команде, которая работает над общим проектом, иногда важно знать, готово ли к работе новое обновление в проекте. Такое оповещение в виде комментария можно отправлять разработчикам в соответствующую задачу в ПланФиксе именно в тот момент, когда новые доработки готовы к использованию. Такой функционал возможно реализовать, используя Jenkins и входящие вебхуки.
Как это сделать
- Сформируйте коммиты такого вида: 123456 - текст коммита, где 123456 - номер задачи в ПланФиксе.
- Создайте вебхук, который получит коммиты.
- В Jenkins Pipeline допишите код, который отправит данные на вебхук.
Настройка вебхука
Код в Jenkins
Две вспомогательные функции:
@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
}
Код, который вставляем после завершения всех операций:
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
}
Итоговый результат
Разработчик увидит в задаче такой комментарий: