【问题标题】:Execute String as Code in Jenkins Pipeline在 Jenkins 流水线中将字符串作为代码执行
【发布时间】:2017-08-21 08:58:23
【问题描述】:

我想在我的 Jenkins 管道中执行多个并行步骤。我需要的所有变量都是通过 ArrayLists 给出的。现在我想通过字符串生成器和 for 循环来构建代码。之后我想将字符串作为代码执行

伪代码:

sb << try{ \n

for(i=0; i<TMP; i++) {
    sb <<
    parallel( 
    build VARIABLE{
        def BUILDJOBNAME = build job: BUILDJOBVARIABLE, parameters:
                [
                      string(name: 'parametername', value: PARAMETER)
                ]
    }
}

sb << catch(e){
 (...)
}

但是我怎么能执行这个呢?我试过GroovyShell.evaluate(sb.toString()) 但这会导致以下错误:

hudson.remoting.ProxyException:groovy.lang.MissingMethodException:没有方法签名:java.lang.Class.evaluate() 适用于参数类型:(java.lang.String)

【问题讨论】:

  • GroovyShell.evaluate 是实例方法而不是类方法。

标签: jenkins groovy jenkins-pipeline


【解决方案1】:

我们使用 Groovy 哈希来定义并行步骤并在一个并行语句中执行它们:

def tests = ["test1", "test2", "test3", "test4"];

try {
    def branches = [:];
    for (int i = 0; i < tests.size(); i++) {
        def test = tests[i];
        branches["$test"] = {
            try
            {
                env.test = test;
                build job: 'BUILD_JOB', parameters: [string(name: 'NAME', value: test)]
            }
            catch (err)
            {
                currentBuild.result = 'FAILURE';
            }
        }
    }

    parallel branches
}

branches 哈希中的每个元素是一个并行执行路径。

【讨论】:

  • 哇,这比我的想法要好得多;)我会试一试
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
相关资源
最近更新 更多