Jenkins 条件步骤 groovy 脚本

Jenkins conditionalstep groovy script

我尝试使用此条件多步插件并为 DSL 编写了 grrovy 脚本,但是当我 bootstrap 使用此代码时,列出的步骤在条件块之前,我在这里做错了什么?

参考:https://jenkinsci.github.io/job-dsl-plugin/#method/javaposse.jobdsl.dsl.helpers.step.StepContext.conditionalSteps

代码:

def configSeed(environment, slaveLabel) {
   { it ->
      parameters {
        stringParam('BUILD_REQUIRED', 'true', '');
    }
    scm {
        git {
            remote {
                name('origin');
                url('xyz');
                refspec('$GERRIT_REFSPEC');
                credentials('xyz');
            }
            branch('$GERRIT_BRANCH');
            strategy {
                gerritTrigger();
            }
        }
    }
    steps {
        conditionalSteps {
            condition {
                stringsMatch('${BUILD_REQUIRED}', 'true', false)
            }
            runner('Fail')
            steps {
                environmentVariables {
                    envs(environment);
                }
                batchFile('''
                    call npm install
                    ''');                   
                batchFile('''
                    call mkdir buildArchive
                    ''');
            }
        }
    }
    publishers {
        wsCleanup {
            includePattern('build/**')
        }
    }
    wrappers {
        preBuildCleanup();
        timeout {
            noActivity(300);
            abortBuild();
        }
    }
    label(slaveLabel);
 }
};

因此创建的 jenkins 作业显示为

npm install
mkdir buildArchive

Conditional step

而不是

Conditional step
{
   npm install
   mkdir buildArchive
}

我做错了什么?

当您使用步骤配置生成作业时

job('foobar') {
    steps {
        conditionalSteps {
            condition {
                stringsMatch('${BUILD_REQUIRED}', 'true', false)
            }
            runner('Fail')
            steps {
                environmentVariables {
                    envs(FOO: 'bar', TEST: '123')
                }
                batchFile('call npm install')               
                batchFile('call mkdir buildArchive')
            }
        }
    }
}

结果似乎不错:

根据我的经验,当您对作业 DSL 语法及其结果有任何问题时,一个好的方法是比较作业的 config.xml:

  • 根据需要手动配置作业,然后保存 config.xml
  • 在本地生成作业并保存 config.xml
  • 区分两个配置文件并找出确切的 XML 标签顺序
  • 然后反复试验,看看更改作业 DSL 脚本时发生了什么

当我开始使用 Job DSL 时没有 groovy 的经验 - 特别是闭包 ;) - 当我尝试将作业配置块提取到方法中时,我遇到了很多类似的问题,就像你的情况一样。这就是帮助我理解真正发生的事情的原因。