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

Материал из Planfix
Перейти к: навигация, поиск
Нет описания правки
Нет описания правки
Строка 18: Строка 18:
== Настройка вебхука ==
== Настройка вебхука ==
https://p.pfx.so/pf/HW/Bvldiw.png
https://p.pfx.so/pf/HW/Bvldiw.png
== Код в Jenkins ==
Две вспомогательные функции:
<code>
@NonCPS
def getTaskNumber(text) {
  def m = (text =~ /\d+/);
  def taskNumber = m ? m[0] : "";
  return taskNumber
}
</code>
<code>
@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>




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

Версия от 13:43, 16 апреля 2021

Вебхуки ПланФикса умеют принимать данные из Jenkins. Это реализовано следующим образом:

Есть Jenkins, который делает build & deploy, настроенные через Jenkins Pipeline. Нам необходимо по завершению действия deploy получать в соответствующих задачах ПланФикса комментарий об этом.


Пошаговый план реализации:

  • Коммиты отправляем в таком виде: 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 + "
" } } }
  return changes

}


Перейти