Использование блока Jenkins Job-DSL Configure для размещения пользовательских шагов в определенных позициях

Используя плагин job-dsl-plugin, я пытаюсь настроить сценарий для большого количества заданий Jenkins, которые ранее были настроены вручную.

Один вариант этих заданий состоит из нескольких шагов, включая пару, которые используют подключаемый модуль XShell, это напрямую не поддерживается job-dsl. Однако я должен быть в состоянии обойти это, используя пользовательский блок «настроить».

Используя «Игровую площадку Job DSL» по адресу http://job-dsl.herokuapp.com/, я дошли до:

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

Если я просто включу только первый блок конфигурации, я получу первую команду в позиции первого шага. Но при наличии второго (последнего) блока конфигурации "node / builders" снова сопоставляется с первым элементом и перезаписывает его, поэтому run-me-as-the-last-step является первым и единственным XShellBuilder. Результат, который я ищу, будет выглядеть примерно так:

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

Я не могу понять синтаксис Groovy XML/Job-DSL для вставки этого второго блока в качестве «последнего потомка». Может ли эксперт по Job-DSL или Groovy XMLParser дать мне указатель на то, как сопоставлять и вставлять в произвольную позицию в дети <builders>?

(Я ценю, что я мог бы использовать job(type:Maven) с preBuildSteps и postBuildSteps, но на самом деле мне нужно еще несколько вещей, которые исключаются чистой работой maven.) Спасибо!


person Ed Randall    schedule 16.02.2015    source источник


Ответы (1)


Вы можете использовать оператор << для добавления узлов, иначе существующий узел с таким же именем будет заменен. Дополнительные сведения см. в Вики Job DSL.

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')
    }
  }
}
person daspilker    schedule 16.02.2015
comment
Понятно, и настройка должна быть вне шагов, спасибо - person Ed Randall; 17.02.2015