Вебхук принимает данные из Jenkins: различия между версиями

Материал из Planfix
Перейти к: навигация, поиск
Нет описания правки
Нет описания правки
 
(не показано 18 промежуточных версий 2 участников)
Строка 5: Строка 5:
|description=Вебхук принимает данные из Jenkins
|description=Вебхук принимает данные из Jenkins
}}
}}
[[Входящие вебхуки |Вебхуки]] ПланФикса умеют принимать данные из [https://www.jenkins.io/ Jenkins]. Это реализовано следующим образом:
В большой команде, которая работает над общим проектом, иногда важно знать, готово ли к работе новое обновление в проекте. Такое оповещение в виде комментария можно отправлять разработчикам в соответствующую задачу в ПланФиксе именно в тот момент, когда новые доработки готовы к использованию. Такой функционал возможно реализовать, используя [https://www.jenkins.io/ Jenkins] и [[Входящие вебхуки |входящие вебхуки]].


Есть Jenkins, который делает build & deploy, настроенные через [https://www.jenkins.io/doc/book/pipeline/ Jenkins Pipeline]. Нам необходимо по завершению действия deploy получать в соответствующих задачах ПланФикса комментарий об этом.


 
== Как это сделать ==
Пошаговый план реализации:
*Сформируйте коммиты такого вида: 123456 - текст коммита, где 123456 - номер задачи в ПланФиксе.
*Коммиты отправляем в таком виде: 123456 - текст коммита, где 123456 - номер задачи в ПланФиксе.
*Создайте вебхук, который получит коммиты.
*Создаём вебхук, на который отправляем данные.
[https://www.jenkins.io/doc/book/pipeline/ Jenkins Pipeline] допишите код, который отправит данные на вебхук.
*В Jenkins Pipeline допишем код, который будет слать данные на вебхук.




Строка 62: Строка 60:
Код, который вставляем после завершения всех операций:
Код, который вставляем после завершения всех операций:


<div style="">
<pre>
def deployedTasks = getChangesByTaskNumber()
def deployedTasks = getChangesByTaskNumber()
deployedTasks.eachWithIndex { key, value, i ->
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
    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
}
}
</div>
</pre>
 
 
== Итоговый результат ==
Разработчик увидит в задаче такой комментарий:
 
https://p.pfx.so/pf/n7/DyTZ59.png
 


== Перейти ==
== Перейти ==
*[[Входящие вебхуки]]
*[[Входящие вебхуки]]

Текущая версия от 09:24, 17 апреля 2021

В большой команде, которая работает над общим проектом, иногда важно знать, готово ли к работе новое обновление в проекте. Такое оповещение в виде комментария можно отправлять разработчикам в соответствующую задачу в ПланФиксе именно в тот момент, когда новые доработки готовы к использованию. Такой функционал возможно реализовать, используя Jenkins и входящие вебхуки.


Как это сделать

  • Сформируйте коммиты такого вида: 123456 - текст коммита, где 123456 - номер задачи в ПланФиксе.
  • Создайте вебхук, который получит коммиты.
  • В Jenkins Pipeline допишите код, который отправит данные на вебхук.


Настройка вебхука

Bvldiw.png


Код в 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
}


Итоговый результат

Разработчик увидит в задаче такой комментарий:

DyTZ59.png


Перейти