2017-05-11 1 views
4

Ich muss die nächste Build-Zeit in einer Build-E-Mail-Benachrichtigung geplant nach einem Build in Jenkins hinzufügen.wie Sie die Auslöserinformationen in Jenkins programmgesteuert erhalten

Der Trigger kann "Build periodically" oder "" sein, oder irgendetwas mit Zeitplan.

Ich weiß, dass die Trigger-Info in der Datei config.xml z.

<triggers> 
    <hudson.triggers.SCMTrigger> 
     <spec>8 */2 * * 1-5</spec> 
     <ignorePostCommitHooks>false</ignorePostCommitHooks> 
    </hudson.triggers.SCMTrigger> 
    </triggers> 

und ich weiß auch, wie man den Trigger-Typen und Spezifikation mit benutzerdefinierten Skripts aus der config.xml-Datei zu erhalten, und berechnen Sie die nächste Erstellungszeit.

Ich frage mich, ob Jenkins hat die API, um diese Informationen out-of-the-box verfügbar zu machen. Ich habe die Suche gemacht, aber nichts gefunden.

Antwort

1

Ich weiß, Sie wahrscheinlich nicht mehr dabei helfen müssen, aber ich hatte gerade das gleiche Problem zu lösen, so ist hier ein Skript, das Sie in der Jenkins-Konsole Ausgabe aller Trigger-Konfigurationen verwenden können:

#!groovy 

Jenkins.instance.getAllItems().each { it -> 
    if (!(it instanceof jenkins.triggers.SCMTriggerItem)) { 
    return 
    } 

    def itTrigger = (jenkins.triggers.SCMTriggerItem)it 
    def triggers = itTrigger.getSCMTrigger() 

    println("Job ${it.name}:") 

    triggers.each { t-> 
    println("\t${t.getSpec()}") 
    println("\t${t.isIgnorePostCommitHooks()}") 
    } 
} 

Dadurch werden alle Ihre Jobs ausgegeben, die die SCM-Konfiguration verwenden, zusammen mit ihrer Spezifikation (cron-ähnlicher Ausdruck, wann sie ausgeführt werden soll) und ob Hooks nach dem Commit ignoriert werden sollen.

Sie können dieses Skript ändern, um die Daten als JSON wie folgt zu erhalten:

#!groovy 
import groovy.json.* 

def result = [:] 

Jenkins.instance.getAllItems().each { it -> 
    if (!(it instanceof jenkins.triggers.SCMTriggerItem)) { 
    return 
    } 

    def itTrigger = (jenkins.triggers.SCMTriggerItem)it 
    def triggers = itTrigger.getSCMTrigger() 

    triggers.each { t-> 
    def builder = new JsonBuilder() 
    result[it.name] = builder { 
     spec "${t.getSpec()}" 
     ignorePostCommitHooks "${t.isIgnorePostCommitHooks()}" 
    } 
    } 
} 

return new JsonBuilder(result).toPrettyString() 

Und dann können Sie die Jenkins Script Console web API verwenden diese von einem HTTP-Client zu erhalten.

Zum Beispiel in curl, können Sie dies tun, indem Sie Ihr Skript als Textdatei speichern und dann ausgeführt wird:

curl --data-urlencode "script=$(<./script.groovy)" <YOUR SERVER>/scriptText 

Wenn Jenkins grundlegende Authentifizierung verwenden, können Sie das mit dem -u <USERNAME>:<PASSWORD> Argumente liefern können .

Letztendlich wird die Anfrage in etwa wie folgt ergeben:

{ 
    "Build Project 1": { 
     "spec": "H/30 * * * *", 
     "ignorePostCommitHooks": "false" 
    }, 
    "Test Something": { 
     "spec": "@hourly", 
     "ignorePostCommitHooks": "false" 
    }, 
    "Deploy ABC": { 
     "spec": "H/20 * * * *", 
     "ignorePostCommitHooks": "false" 
    } 
} 

Sie sollten diese Beispiele zuzuschneiden der Lage sein, Ihren spezifischen Anwendungsfall anzupassen. Es scheint, dass Sie nicht aus der Ferne darauf zugreifen müssen, sondern nur von einem Job aus, aber ich habe auch den Remoting-Teil hinzugefügt, da er für jemand anderen nützlich sein könnte.

+0

Ich hatte eine ähnliche Idee vor, aber ich habe aufgegeben, weil ich nicht System groovy Skripte von einer Slave-Maschine ausführen kann, und die Build-Umgebung ist unter strenger Kontrolle. – Heinz

+0

In meiner Firma habe ich eine Extraschicht zwischen dem Endbenutzer und der Skriptkonsolen-API erstellt. Es gibt ein System, das solche Groovy-Skripte speichert, sie sind vom Administrator genehmigt, und es gibt eine Web-API, die es Benutzern erlaubt, sie über dieses System auszuführen (der Inhalt des Skripts wird abstrahiert). In Jenkins-Pipelines können Benutzer diese intermediate-API über eine HTTP-Anfrage auslösen, zum Beispiel über https://wiki.jenkins.io/display/JENKINS/HTTP+Request+Plugin. Es ist sicherlich ein Overhead bei der Wartung eines solchen Tools, aber es lohnt sich so weit, da es eine einmalige Anstrengung war. – JohnSomeone

Verwandte Themen