6

Возможно ли получить доступ к информации о коммиттерах и/или виновниках рабочего процесса Jenkins при проверке одного или нескольких SCM (либо с помощью checkout() или другие шаги SCM, такие как git/svn)?Как получить преступников или коммиттеров внутри рабочего процесса Jenkins с одним или несколькими SCM

Цель состоит в том, чтобы использовать эту информацию для уведомления коммиттеров и/или преступников о статусе работы, например, на этапе mail.

Небольшой пример определения рабочего процесса:

node { 
    // checkout from one or more SCMs, e.g. 
    git url: '<URL>' 
    checkout([$class:...]) 
    ... 

    // how can we know about committers or culprits at this point? 
    $committers = ?? 

    // send a mail to committers or culprits 
    mail to: '$committers', subject: 'JENKINS', body: '<information about the job status>' 
} 

Как это могло быть приспособлено, чтобы получить коллекцию коммиттерами после выполнения шагов SCM?

Edit: Сейчас я работаю с Дженкинс версии 1.596.2 и Workflow: агрегатор версии 1.6 и, кажется, это открытый вопрос в JENKINS-24141

+0

У вас есть возможность решить эту проблему?Это похоже на реальный выключатель для перехода на трубопроводы. – sorin

ответ

2

Как вы нашли, в ожидании JENKINS-24141 это не поддерживается. Требуется изменение ядра Jenkins.

+0

Если невозможно получить список коммиттеров из рабочего процесса, можно ли написать плагин для этого? И как мне приступить к написанию такого плагина? – timmy

+1

Кажется, что этот билет был исправлен. Кто-нибудь знает, как это реализовать? –

+0

Джесси, проблема, с которой вы связались, была недавно решена. Вы можете обновить свой ответ, чтобы показать, как получить коммиттеров с последней версией плагина конвейера/рабочего потока? – jayhendren

-2

Если вы хотите, чтобы уведомить преступников, которые взломали сборку, Вы не нужно никаких проверок, используйте плагин электронной почты в jenkins. Этот плагин дает вам возможность отправлять письма коммитерам между прошлой хорошей сборкой и текущей сломанной сборкой.

Если вы используете «Редактируемый плагин для уведомлений по электронной почте», вы получаете возможность отправлять почту виновнику.

Если вы используете плагин для электронной почты, вы получаете опцию «Отправить отдельные электронные письма лицам, которые нарушили сборку».

+0

Привет, спасибо за ответ. Чтобы уточнить: я использовал задания freestyle с редактируемым плагином уведомлений электронной почты. Теперь я перехожу к рабочим рабочим заданиям, где в настоящее время я не вижу возможности включить эту функцию. Единственный вариант, который я вижу, - это обычный почтовый шаг, на котором я могу указать получателя (-ы) электронной почты. Здесь я хотел бы иметь возможность отправить коммиттерам, которые нарушили сборку. Вы знаете, возможно ли это? – DenizU

2

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

http://<Jenkins URL>:<Port Number>/job/<Jobname>/<BuildNumber>/api/xml? 

Оставьте этот вопрос в вашем браузере. Найдите «пользователь». Вы можете отправить эту информацию в текстовый файл для обработки.

1

Кажется, что эта функция была реализована внутри плагина электронной почты-ext, но автор забыл документировать, как мы должны это использовать.

Пожалуйста, проверьте https://issues.jenkins-ci.org/browse/JENKINS-34763 - и добавьте здесь комментарий, попросив пример. Я уже сделал.

4

Это возможно с использованием плагина email-ext.

def to = emailextrecipients([[$class: 'CulpritsRecipientProvider'], 
          [$class: 'DevelopersRecipientProvider'], 
          [$class: 'RequesterRecipientProvider']]) 
if (to != null && !to.isEmpty()) { 
    mail to: to, subject: "JENKINS", body: "See ${env.BUILD_URL}" 
} 

Однако, если вы просто хотите, чтобы отправить по электронной почте на неудачах, вы можете использовать Мейлер (на основе email-ext pipeline examples):

step([$class: 'Mailer', 
     notifyEveryUnstableBuild: true, 
     recipients: emailextrecipients([[$class: 'CulpritsRecipientProvider'], 
             [$class: 'RequesterRecipientProvider']])]) 
2

Использование заводной в сценарии трубопровода:

@NonCPS // Necessary to allow .each to work. 
def changelist() { 
    def changes = "" 
    currentBuild.changeSets.each { set -> 
     set.each { entry -> 
      changes += "${entry.commitId} by ${entry.author.fullName}\n" 
     } 
    } 
    changes 
} 
+1

не должно быть '@ NonCPS' вместо' @ NoCPS'?! – Roman

+0

хороший звонок @Roman – szym

0

аналогично ответу от @szym, но без @NonCPS требуется:

def authors = currentBuild.changeSets.collectMany { it.toList().collect { it.author } }.unique()

Смежные вопросы