2015-02-16 2 views
6

Mit dem Job-dsl-Plugin versuche ich die Konfiguration einer ganzen Reihe von Jenkins-Jobs zu skripten, die zuvor manuell konfiguriert wurden.Verwenden von Jenkins Job-DSL Konfigurieren Sie den Block, um benutzerdefinierte Schritte in bestimmten Positionen zu platzieren

Ein Geschmack dieser Jobs hat mehrere Schritte einschließlich ein paar, die das XShell-Plugin verwenden, dies wird nicht direkt von Job-dsl unterstützt. Allerdings sollte ich in der Lage sein, das zu umgehen, indem ich einen benutzerdefinierten "configure" -Block verwende.

den „Job DSL Spielplatz“ auf http://job-dsl.herokuapp.com/ Mit Ich habe so weit gekommen wie:

job { 
    name 'my-job' 
    jdk('JDK-17') 

    steps { 
    configure { node -> 
     node/builders { 
     'hudson.plugins.xshell.XShellBuilder'(plugin: '[email protected]') { 
      commandLine('run-me-as-the-first-build-step') 
      executeFromWorkingDir('true') 
     } 
     }   
    } 

    maven { 
    mavenInstallation('Default') 
    goals('clean') 
     goals('verify') 
     property('prop1', 'value1') 
     property('user.timezone', 'UTC') 
     mavenOpts('--batch-mode') 
    } 

    maven { 
    mavenInstallation('Default') 
     goals('deploy') 
     property('prop2', 'value2') 
     property('user.timezone', 'UTC') 
     mavenOpts('--batch-mode') 
    } 

    shell('shell-task') 

    configure { node -> 
     node/builders { 
     'hudson.plugins.xshell.XShellBuilder'(plugin: '[email protected]') { 
      commandLine('run-me-as-the-last-build-step') 
      executeFromWorkingDir('true') 
     } 
     }   
    } 
    } 
} 

Wenn ich bin gerade den ersten configure Block nur, ich den ersten Befehl in der ersten Stufe Position. Aber wenn der zweite (letzte) Konfigurationsblock vorhanden ist, passt das "node/builders" wieder auf das erste Element und überschreibt es, sodass run-me-as-the-last-step der erste und einzige XShellBuilder ist. Der Ausgang ich versuchen würde, in etwa so aussehen:

<project> 
    ... 
    <builders> 
     <hudson.plugins.xshell.XShellBuilder plugin='[email protected]'> 
      <commandLine>run-me-as-the-first-build-step</commandLine> 
      <executeFromWorkingDir>true</executeFromWorkingDir> 
     </hudson.plugins.xshell.XShellBuilder> 
     <hudson.tasks.Maven> 
      <targets>clean verify</targets> 
      <properties>prop1=value1 
user.timezone=UTC</properties> 
      <mavenName>Default</mavenName> 
      <jvmOptions>--batch-mode</jvmOptions> 
      <usePrivateRepository>false</usePrivateRepository> 
     </hudson.tasks.Maven> 
     <hudson.tasks.Maven> 
      <targets>deploy</targets> 
      <properties>prop2=value2 
user.timezone=UTC</properties> 
      <mavenName>Default</mavenName> 
      <jvmOptions>--batch-mode</jvmOptions> 
      <usePrivateRepository>false</usePrivateRepository> 
     </hudson.tasks.Maven> 
     <hudson.tasks.Shell> 
      <command>shell-task</command> 
     </hudson.tasks.Shell> 
     <hudson.plugins.xshell.XShellBuilder plugin='[email protected]'> 
      <commandLine>run-me-as-the-last-build-step</commandLine> 
      <executeFromWorkingDir>true</executeFromWorkingDir> 
     </hudson.plugins.xshell.XShellBuilder> 
    </builders> 
    ... 
    </project> 

ich nicht die Groovy XML/Job-DSL-Syntax, den zweiten Blockes als „letztes Kind einfügen herausfinden kann, kann ein Job-DSL oder Groovy XMLParser Experten bitte gib mir einen Zeiger auf, wie an einer beliebigen Position in den Kindern <builders>?

(I schätzen anzupassen und einzufügen, dass ich job(type:Maven) mit preBuildSteps und postBuildSteps verwenden könnte, aber eigentlich brauche ich ein paar andere Dinge in dort auch die ein pure maven job ist ausgeschlossen.) Danke!

Antwort

6

Sie können den Operator << verwenden, um Knoten anzufügen, andernfalls wird ein vorhandener Knoten mit identischem Namen ersetzt. Einzelheiten finden Sie unter Job DSL wiki.

job { 
    name('foo') 
    steps { 
    shell('echo AAA') 
    } 
    configure { 
    it/builders << 'hudson.plugins.xshell.XShellBuilder' { 
     commandLine('123') 
    } 
    } 
    steps { 
    shell('echo BBB') 
    } 
    configure { 
    it/builders << 'hudson.plugins.xshell.XShellBuilder' { 
     commandLine('456') 
    } 
    } 
} 
+1

Habe es, und die Konfiguration muss außerhalb der Schritte sein, danke –