How to use 'and' & 'or' in conditional build steps

673 views
Skip to first unread message

Richard Wild

unread,
Mar 21, 2016, 12:26:19 PM3/21/16
to job-dsl-plugin
Hi all,

I am trying to write DSL for a job that has a conditional build step with and & or operators and I am unsure how to write the DSL. The API reference seems to suggest I should be able to write this:

job('ci') {
  description
'Build and test the app.'
  scm
{
    github
'sheehan/job-dsl-playground'
 
}
  steps
{
    conditionalSteps
{
      condition
{
       
or {
          stringsMatch
'fred', 'wilma', true
          stringsMatch
'foo', 'bar', false
       
}
     
}
      steps
{
        shell
'something'
     
}
   
}
 
}
  publishers
{
    archiveJunit
'build/test-results/**/*.xml'
 
}
}

but when I run that, what I get is this:

    <builders>
       
<org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder>
           
<runCondition class='org.jenkins_ci.plugins.run_condition.logic.Or'>
               
<conditions>
                   
<org.jenkins__ci.plugins.run__condition.logic.ConditionContainer>
                       
<condition class='org.jenkins_ci.plugins.run_condition.core.StringsMatchCondition'>
                           
<arg1>foo</arg1>
                           
<arg2>bar</arg2>
                           
<ignoreCase>false</ignoreCase>
                       
</condition>
                   
</org.jenkins__ci.plugins.run__condition.logic.ConditionContainer>
               
</conditions>
           
</runCondition>
           
<runner class='org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail'></runner>
           
<conditionalbuilders>
               
<hudson.tasks.Shell>
                   
<command>something</command>
               
</hudson.tasks.Shell>
           
</conditionalbuilders>
       
</org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder>
   
</builders>


What I expected to get instead was this:

    <builders>
       
<org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder>
           
<runCondition class='org.jenkins_ci.plugins.run_condition.logic.Or'>
               
<conditions>
                   
<org.jenkins__ci.plugins.run__condition.logic.ConditionContainer>
                       
<condition class='org.jenkins_ci.plugins.run_condition.core.StringsMatchCondition'>
                           
<arg1>fred</arg1>
                           
<arg2>wilma</arg2>
                           
<ignoreCase>false</ignoreCase>
                       
</condition>
                   
</org.jenkins__ci.plugins.run__condition.logic.ConditionContainer>
                   
<org.jenkins__ci.plugins.run__condition.logic.ConditionContainer>
                       
<condition class='org.jenkins_ci.plugins.run_condition.core.StringsMatchCondition'>
                           
<arg1>foo</arg1>
                           
<arg2>bar</arg2>
                           
<ignoreCase>false</ignoreCase>
                       
</condition>
                   
</org.jenkins__ci.plugins.run__condition.logic.ConditionContainer>
               
</conditions>
           
</runCondition>
           
<runner class='org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail'></runner>
           
<conditionalbuilders>
               
<hudson.tasks.Shell>
                   
<command>something</command>
               
</hudson.tasks.Shell>
           
</conditionalbuilders>
       
</org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder>
   
</builders>


I'd like to verify whether I'm doing it right, and if not, how should I do it instead?

Many thanks,
Richard.

Victor Martinez

unread,
Mar 21, 2016, 12:54:44 PM3/21/16
to job-dsl-plugin
Reply all
Reply to author
Forward
0 new messages