Вебхук принимает данные из Jenkins: различия между версиями
Artem (обсуждение | вклад) Нет описания правки |
Artem (обсуждение | вклад) Нет описания правки |
||
Строка 5: | Строка 5: | ||
|description=Вебхук принимает данные из Jenkins | |description=Вебхук принимает данные из Jenkins | ||
}} | }} | ||
Когда большая команда совместно работает над проектом, важно знать, готово ли к работе новое обновление. В тот момент, когда в проект загружены новые доработки, разработчикам в соответствующую задачу может приходить комментарий об этом. В ПланФиксе такой функционал можно настроить с помощью [https://www.jenkins.io/ Jenkins] и [[Входящие вебхуки |входящего вебхука]]. | |||
== Как это сделать == | |||
*Сформируйте коммиты такого вида: 123456 - текст коммита, где 123456 - номер задачи в ПланФиксе. | |||
* | *Создайте вебхук, который получит коммиты. | ||
* | *В [https://www.jenkins.io/doc/book/pipeline/ Jenkins Pipeline] допишите код, который отправит данные на вебхук. | ||
*В Jenkins Pipeline | |||
Версия от 15:42, 16 апреля 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 }