6

Ist es möglich, Informationen über Committer und/oder Täter eines Jenkins-Workflow-Jobs beim Auschecken von einem oder mehreren SCMs (entweder über checkout() oder andere SCM-Schritte wie git/svn)?Wie man Täter oder Committer innerhalb eines Jenkins-Workflows mit einem oder mehreren SCMs erhält

Es ist beabsichtigt, diese Informationen zu verwenden, um Committer und/oder Täter über den Jobstatus zu informieren, z. B. in einem Schritt mail.

Ein kleines Beispiel einer Workflow-Definition:

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>' 
} 

Wie dies nach dem Ausführen der SCM vor, um eine Sammlung der Committer zu bekommen angepasst werden könnte?

Edit: Ich bin derzeit mit Jenkins Version 1.596.2 und Workflow-Arbeits: Aggregator Version 1.6 und es scheint, dies ist eine offene Frage in JENKINS-24141

+0

Konnten Sie eine Lösung für dieses Problem finden?Dies scheint für die Migration zu Pipelines ein echtes Problem zu sein. – sorin

Antwort

2

Wie Sie festgestellt haben, wird JENKINS-24141 nicht unterstützt. Änderungen am Jenkins-Kern sind erforderlich.

+0

Wenn es nicht möglich ist, eine Liste von Committern innerhalb des Workflows zu erhalten, ist es möglich, einen Plugin-Schritt zu schreiben, um dies zu tun? Und wie würde ich anfangen, einen solchen Plugin-Schritt zu schreiben? – timmy

+1

Es scheint, dass das Ticket in Frage gestellt wurde. Hat jemand eine Idee, wie man das umsetzt? –

+0

Jesse, das Problem, mit dem Sie verbunden sind, wurde kürzlich gelöst. Gibt es eine Chance, dass Sie Ihre Antwort aktualisieren können, um zu zeigen, wie Sie die Committer mit einer aktuellen Version des Pipeline/Workflow-Plugins erhalten? – jayhendren

-2

Wenn Sie die Täter benachrichtigen möchten, die die Build brach, Sie Brauche keine Überprüfungen, benutze E-Mail-Plugin in Jenkins. Dieses Plugin gibt Ihnen die Möglichkeit, E-Mails an den Commiter zu senden, zwischen dem letzten guten Build und dem aktuellen Build.

Wenn Sie "Editierbare E-Mail Notifier Plugin" verwenden Sie erhalten die Option, E-Mail an Täter zu senden.

Wenn Sie E-Mail-Plugin verwenden, dann erhalten Sie die Option "Senden Sie separate E-Mails an Personen, die den Build brach".

+0

Hallo, danke für deine Antwort. Zur Klarstellung: Ich habe Freestyle-Jobs mit dem editierbaren Email-Notifier-Plugin benutzt. Jetzt wechsle ich zu Workflow-Jobs, wo ich derzeit keine Option sehe, diese Funktionalität zu integrieren. Die einzige Option, die ich sehe, ist der normale Mail-Schritt, bei dem ich den/die Empfänger einer E-Mail angeben kann. Hier möchte ich in der Lage sein, an die Committer zu senden, die den Build kaputt gemacht haben. Weißt du, ob das möglich ist? – DenizU

2

Sie können die XML-Informationen für einen Job abrufen, in dem Sie den Namen der Person finden, die die Änderung zusammen mit den Commit-Meldungen durchgeführt hat.

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

Geben Sie dies in Ihrem Browser ein. Suche nach "Benutzer". Sie können diese Informationen in eine Textdatei zum Verarbeiten speichern.

1

Es scheint, dass diese Funktion innerhalb des E-Mail-Ext-Plugins implementiert wurde, aber der Autor hat vergessen zu dokumentieren, wie wir das verwenden sollen.

Bitte überprüfen Sie https://issues.jenkins-ci.org/browse/JENKINS-34763 - und fügen Sie einen Kommentar, um ein Beispiel zu bitten. Ich habe es bereits getan.

4

Dies ist jetzt mit dem email-ext Plugin möglich.

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

Wenn Sie jedoch nur eine E-Mail auf einem Defekt senden möchten, können Sie Mailer verwenden möchten (basierend auf dem email-ext pipeline examples):

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

groovy Verwendung innerhalb eines Pipeline-Skript:

@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

sollte es nicht '@ NonCPS' anstelle von' @NoCPS' sein ?! – Roman

+0

guten Ruf @Roman – szym

0

ähnlich wie die Antwort von @szym, aber ohne die @NonCPS erforderlich:

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

Verwandte Themen