groovy jenkins jenkins-job-dsl

groovy - Usar el bloque Jenkins Job-DSL Configure para colocar pasos personalizados en posiciones particulares



jenkins-job-dsl (1)

Puede usar el operador << para agregar nodos, de lo contrario, se reemplaza un nodo existente con un nombre idéntico. Vea la wiki de Job DSL para más detalles.

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

Utilizando el job-dsl-plugin, intento guiar la configuración de un buen número de trabajos de Jenkins que se han configurado previamente de forma manual.

Un sabor de estos trabajos tiene varios pasos, entre ellos un par que utiliza el complemento XShell, esto no es directamente compatible con job-dsl. Sin embargo, debería ser capaz de evitar eso usando un bloque personalizado de "configuración".

Utilizo el "área de juegos de Job DSL" en http://job-dsl.herokuapp.com/ . He llegado tan lejos como:

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

Si solo incluyo el primer bloque de configuración, obtengo el primer comando en la posición de primer paso. Pero con el segundo (último) bloque de configuración presente, el "node / builders" vuelve a coincidir en el primer elemento y lo sobrescribe, por lo que run-me-as-the-last-step es el primer y único XShellBuilder. La salida que busco se verá algo así como:

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

No puedo entender la sintaxis de Groovy XML / Job-DSL para insertar ese segundo bloque como "último hijo, puede un experto Job-DSL o Groovy XMLParser por favor darme un puntero sobre cómo hacer coincidir e insertar en una posición arbitraria en el hijos de <builders> ?

(Agradezco que pueda usar el job(type:Maven) con preBuildSteps y postBuildSteps pero en realidad también necesito algunas otras cosas que un trabajo de maven puro excluye.) ¡Gracias!