2016-03-30 9 views
2

Ich verwende das Github-Organisation-Plugin, um Jenkins-Jobs von Github zu verwalten, aber ich entdeckte, dass Jenkins API diese Builds nicht meldet.Wie programmgesteuert einen spezifischen jenkins-Build auslösen, der über github-organisation verwaltet wird?

In der Tat listet die API die gesamte Organisation als einen einzigen Job auf.

Wie kann ich ein bestimmtes Repository erstellen und mit der API verzweigen?

Um es klar, ich bin für einige groovy Code suchen in der Jenkinsfile

#!groovy 

stage 'test-downstream' 
node { 
    def job = build job: 'some-job' 
} 

Jetzt hinzuzufügen, ist das Problem, dass Jenkins die gesamte Organisation als ein Auftrag ist zu sehen!

Wenn ich die Jenkins API zum Abrufen der Jobs verwende, wird nur die Organisation und nicht alle Repositories und Jobs zurückgegeben.

Ich vermute, dass, weil die Art, wie dieses Plugin implementiert wurde, und ich denke, dass ich einige zusätzliche Parameter geben muss, um anzugeben, welche Repository und Zweig ich in der Organisation erstellen möchte .... Aufbau einer Organisation nicht viel Sinn.

+1

Können Sie klären, verwenden Sie das [Github-Organisation-Ordner-Plugin] (https://github.com/jenkinsci/github-organization-folder-plugin) und wollen manuell eine von denen auslösen Jobs von einem Jenkinsfile erstellt? Haben Sie auch versucht, ob es funktioniert, um es über [url] (https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API) mit dem Jobnamen von einem bereits erstellten Job auszulösen? Dann müssen Sie nur über die Jobbenennungskonvention mit dem Jenkinsfile Pipeline-Zeug herausfinden. –

+0

Leider habe ich versucht, 'acme/job/foo/job/master' als Jobnamen zu verwenden, habe aber' keinen parametrisierten Job mit dem Namen acme/job/foo/job/master found', der mir sagt, dass er diese nicht als real ausgibt Arbeitsplätze. – sorin

+1

Überprüfen Sie, was ausgesetzt ist auf http: // : /api/xml' –

Antwort

4

Die Frage ist vage, aber ich vermute, "API" bedeutet in diesem Kontext die REST-API zum Auslösen von Builds. Sie können zum Beispiel verwenden

curl -X POST -u user:apitoken http://jenkins/job/yourorg/job/yourrepo/job/master/build 
+0

Obwohl das nicht wirklich ideal ist, kann es funktionieren, wenn ich keinen groovigen finden kann. Trotzdem hasse ich es hier mit dem API-Token-Problem umzugehen, wenn die Jenkinsfile-Ausführung bereits Zugriff auf Jenkins-API hatte. – sorin

+0

Dann fragen Sie vielleicht etwas völlig anderes, und das ist einfach ein Duplikat von: http://StackOverflow.com/Questions/36306883/How-can-i-trigger-another-job-from-a-jenkins-pipeline- jenkinsfile –

0

Die folgenden Code-Trigger-Job über System Groovy Build-Schritt. Bitte beachten Sie, dass System-Groovy immer auf Master läuft, so dass die Weitergabe von Informationen aus vorherigen Build-Schritten schwierig sein kann.

import jenkins.model.* 
import hudson.model.* 
import java.util.concurrent.* 

def run_job(job_name) { 
    def currentBuild = Thread.currentThread().executable 
    def jenkins = jenkins.model.Jenkins.getInstance(); 

    def job = jenkins.getItemByFullName(job_name); 
    if (job == null) 
     throw new hudson.AbortException("Cannot find job:" + job_name); 

    def params =[ 
    new StringParameterValue('PARAMETER1', "invoke 1 param1"), 
    new StringParameterValue('PARAMETER2', ",invoke 1 param2") 
    ] 

    def paramsAction = new ParametersAction(params) 
    def cause = new hudson.model.Cause.UpstreamCause(currentBuild) 
    def causeAction = new hudson.model.CauseAction(cause)  

    def future_build = job.scheduleBuild2(0,causeAction,paramsAction); 
    def running_build = future_build.waitForStart() 
    return running_build 
} 

run_job("runner1") 
Verwandte Themen