【问题标题】:Jenkins conditionalstep groovy scriptJenkins 条件步 groovy 脚本
【发布时间】:2016-02-05 02:09:05
【问题描述】:

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

参考: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);
 }
};

所以创建的詹金斯工作显示为

npm install
mkdir buildArchive

Conditional step

代替

Conditional step
{
   npm install
   mkdir buildArchive
}

我在这里做错了什么?

【问题讨论】:

  • 什么是"...列出的步骤在条件块之前..."是什么意思?
  • @tim_yates 更新了上面的描述。我在上面的条件步骤之外看到了命令,而不是在其中。

标签: jenkins groovy conditional dsl


【解决方案1】:

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

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

结果看起来不错:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多