0

The Jenkins Job DSL plugin (version 1.42) allows defining MultiJobs:

multiJob('MyMultiJob'){
    steps{
        phase('First')
            phaseJob('JobA'){
                #job configuration
            }
        }
    }
}

Is it possible to define a job and add it to a MultiJob in separate steps like in the following example?

jobA = job('JobA')

multiJob('MyMultiJob'){
    steps{
        phase('First')
            jobA
        }
    }
}

Being forced to define many different jobs inside the MultiJob definition seems complicated and adds a lot of complexity. Are there workarounds? Is it possible to move the definition of a phase job to a function outside the MultiJob definition?

EightBitBoy
  • 653
  • 6
  • 23

1 Answers1

1

You can do this

def j= {
  parameters {
    propertiesFile('my1.properties')
  }
}

multiJob('example') {
    steps {
        phase('First') {
            phaseJob('JobZ', j)
        }
        phase('Second') {
            phaseJob('JobA', j)
            phaseJob('JobB')
            phaseJob('JobC')
        }
    }
}

Which you can use 'j'. The closure syntax outside the parameters is syntactic sugar and the method call assumes the closure is in fact the last parameter

Output from the job dsl playground

<com.tikal.jenkins.plugins.multijob.MultiJobProject plugin='jenkins-multijob-plugin@1.8'>
    <actions></actions>
    <description></description>
    <keepDependencies>false</keepDependencies>
    <properties></properties>
    <scm class='hudson.scm.NullSCM'></scm>
    <canRoam>true</canRoam>
    <disabled>false</disabled>
    <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
    <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
    <triggers class='vector'></triggers>
    <concurrentBuild>false</concurrentBuild>
    <builders>
        <com.tikal.jenkins.plugins.multijob.MultiJobBuilder>
            <phaseName>Second</phaseName>
            <continuationCondition>SUCCESSFUL</continuationCondition>
            <phaseJobs>
                <com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
                    <jobName>JobZ</jobName>
                    <currParams>true</currParams>
                    <exposedSCM>true</exposedSCM>
                    <disableJob>false</disableJob>
                    <killPhaseOnJobResultCondition>FAILURE</killPhaseOnJobResultCondition>
                    <configs>
                        <hudson.plugins.parameterizedtrigger.FileBuildParameters>
                            <propertiesFile>my1.properties</propertiesFile>
                            <failTriggerOnMissing>false</failTriggerOnMissing>
                        </hudson.plugins.parameterizedtrigger.FileBuildParameters>
                    </configs>
                </com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
            </phaseJobs>
        </com.tikal.jenkins.plugins.multijob.MultiJobBuilder>
        <com.tikal.jenkins.plugins.multijob.MultiJobBuilder>
            <phaseName>Third</phaseName>
            <continuationCondition>SUCCESSFUL</continuationCondition>
            <phaseJobs>
                <com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
                    <jobName>JobA</jobName>
                    <currParams>true</currParams>
                    <exposedSCM>true</exposedSCM>
                    <disableJob>false</disableJob>
                    <killPhaseOnJobResultCondition>FAILURE</killPhaseOnJobResultCondition>
                    <configs>
                        <hudson.plugins.parameterizedtrigger.FileBuildParameters>
                            <propertiesFile>my1.properties</propertiesFile>
                            <failTriggerOnMissing>false</failTriggerOnMissing>
                        </hudson.plugins.parameterizedtrigger.FileBuildParameters>
                    </configs>
                </com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
                <com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
                    <jobName>JobB</jobName>
                    <currParams>true</currParams>
                    <exposedSCM>true</exposedSCM>
                    <disableJob>false</disableJob>
                    <killPhaseOnJobResultCondition>FAILURE</killPhaseOnJobResultCondition>
                    <configs class='java.util.Collections$EmptyList'></configs>
                </com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
                <com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
                    <jobName>JobC</jobName>
                    <currParams>true</currParams>
                    <exposedSCM>true</exposedSCM>
                    <disableJob>false</disableJob>
                    <killPhaseOnJobResultCondition>FAILURE</killPhaseOnJobResultCondition>
                    <configs class='java.util.Collections$EmptyList'></configs>
                </com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
            </phaseJobs>
        </com.tikal.jenkins.plugins.multijob.MultiJobBuilder>
    </builders>
    <publishers></publishers>
    <buildWrappers></buildWrappers>
</com.tikal.jenkins.plugins.multijob.MultiJobProject>
KeepCalmAndCarryOn
  • 8,817
  • 2
  • 32
  • 47