Вебхук приймає дані з Jenkins

Матеріал з Planfix
Версія від 12:02, 26 вересня 2023, створена PlanfixBot (обговорення | внесок) (Створена сторінка: {{#seo: |title=Вебхук приймає дані з Jenkins |titlemode=append |keywords=вхідні вебхуки, webhook, вебхук, вебхук приймає дані з Jenkins, Jenkins, Jenkins Pipeline, build, deploy |description=Вебхук приймає дані з Jenkins }} У великій команді, яка працює над спільним проєктом, іноді важливо знати, готове чи до роб...)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до: навігація, пошук

У великій команді, яка працює над спільним проєктом, іноді важливо знати, готове чи до роботи нове оновлення в проєкті. Таке повідомлення у вигляді коментаря можна відправляти розробникам в відповідне завдання в Planfix саме в той момент, коли нові доробки готові до використання. Такий функціонал можливо реалізувати, використовуючи Jenkins і вхідні вебхуки.


Як це зробити

  • Сформуйте комміти такого виду: 123456 - текст комміту, де 123456 - номер завдання в Planfix.
  • Створіть вебхук, який отримає комміти.
  • В 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.ua/webhook/json/b7mh-dead-687f-lpwq", consoleLogResponseBody: true
}


Кінцевий результат

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

DyTZ59.png


Перейти