Отправка результатов на почту, после 4 билда

Всем привет! Есть на мне такая задача:

  1. Я проверяю скорость загрузки страницы, для разных инстансов
  2. С помощью дженкинс, я должен отправлять на почту клиента, в виде текстовых файлов, к примеру

Date_time : April 11, 2017, 4:30 pm
Server_hostname: Samsung
Dashboard_time: 2.31
Content_health_time: 13.03
Product_list_time: 4.43
Insight_report_time: 3.15
Total_time : 22.92
Error : load time is too large

  1. И вот с чем я столкнулся, оказывается нужно запускать 4 раза в сутки тесты, и при этом чтобы после 4 билда (в конце дня) отправлялись отчеты за день. Скажите если ли какой-то триггер, который можно запланировать так, чтобы только раз в день приходили отчеты

Есть, сам недавно решал похожую задачу. Для отправки емейлов использовал Email-ext plugin (post-build action “Editable email notification”). В advanced настройках в нем можно указать Trigger Script на Groovy, в зависимости от результата выполнения которого (true/false) письмо будет/не будет отправляться.
Касательно вашей задачи (например, “триггерить отправку, если билд начался в промежуток 20:00 - 23:59 и результат прохождения билда SUCCESS”), триггер может выглядеть следующим образом:

  • тип триггера: Script - After Build
  • тело скрипта (Trigger Script):
// def ts = new Date() - для оценки времени не старта а конца билда
def ts = build.timestamp.time 
def from = new Date(year: ts.year, month: ts.month, date: ts.date, hours: 20, minutes: 0, seconds: 0)
def to = new Date(year: ts.year, month: ts.month, date: ts.date, hours: 23, minutes: 59, seconds: 0)
def isSendingTime = (ts > from && ts < to)
def isBuildSuccessfull = "${build.result}" == 'SUCCESS'

return isBuildSuccessfull && isSendingTime

P.S. если интересно, то мой триггер выглядел немного иначе. На моей джобе висел скедулер на 1 раз в день, но её можно было запускать и вручную.
И чтобы скедулер не спамил лишними письмами, я написал триггер, который обрабатывал условие “отправлять письмо, если билд за сегодня первый, или был запущен вручную”. Скрипт следующий:

def isNew = build.timestamp.get(Calendar.DAY_OF_MONTH) != build.previousBuild.timestamp.get(Calendar.DAY_OF_MONTH)
def wasTrigerredManually = build.environment.BUILD_CAUSE_MANUALTRIGGER
def isBuildSuccessfull = "${build.result}" == 'SUCCESS'

return isBuildSuccessfull && (wasTrigerredManually || isNew)