我正在尝试将我的大型多配置Jenkins作业转换为管道语法,因此除其他外,我可以将它分割为多个节点,并将我的多个阶段合并为一个作业。这是我遇到麻烦的部分:
$meta_tbl = $wpdb->prefix.'postmeta';
foreach ($_POST['loop'] as $loop_k => $loop_v) {
$wpdb->update(
$meta_tbl,
array( 'meta_value' => $loop_v['price'] ),
array( 'meta_id' => $loop_v['price_meta_id'] ),
array( '%d' )
);
$wpdb->update(
$meta_tbl,
array( 'meta_value' => $loop_v['regular_price'] ),
array( 'meta_id' => $loop_v['regular_price_meta_id'] ),
array( '%d' )
);
$wpdb->update(
$meta_tbl,
array( 'meta_value' => $loop_v['sale_price'] ),
array( 'meta_id' => $loop_v['sale_price_meta_id'] ),
array( '%d' )
);
}
我的问题是,当我到达第13行的window.interface.GetTile( row , col ,level, function(returnValue) {
alert(returnValue);
});
字典时,def build_test_configs = [:]
def compilers = ['gnu', 'icc']
def configs = ['debug', 'default', 'opt']
for (int i = 0; i < configs.size(); i++) {
for (int j = 0; j < compilers.size(); j++) {
def node_name = ""
if ("${compilers[j]}" == "gnu") {
node_name = "node001"
} else {
node_name = "node002"
}
build_test_configs["${node_name} ${configs[i]}"] = {
node ("${node_name}") {
stage("Build Test ${node_name} ${compilers[j]} ${configs[i]}") {
unstash "${node_name}-tarball"
sh "$HOME/software/jenkins_scripts/nightly.sh ${configs[i]} ${compilers[j]} yes $WORKSPACE"
}
}
}
}
}
parallel build_test_configs
和${compilers[j]
未定义。看来,第8行的检查工作正常。
我本身没有错误消息。该脚本不会产生任何运行时错误。意外的输出是阶段的名称是:
$configs[i]
脚本也会传递build_test_configs
个参数。
答案 0 :(得分:2)
我认为这是预期的行为:Jenkins Pipeline脚本是用Groovy编写的,但实际执行的是对它的转换(他们使用的术语是&#34;继续传递样式转换&#34;)。例如,某些部分将在主服务器上运行,某些部件在从服务器节点上运行。
这涉及到很多魔法,但是在我们的水平上,这意味着我们必须处理语法中的约束。我们使用的构造。
请参阅"fundamentals" paragraph of this article:
要了解管道行为,您必须了解有关其执行方式的几点。
另见JENKINS-41335讨论对脚本中变量的支持。
编辑:嗯,是的,正如评论中所指出的,新的声明性模型允许定义一个environment变量,这些变量将以您需要的方式传递...不知道该怎么做在没有JENKINS-41335的脚本管道中,但似乎进一步的演变现在将在声明性的土地上发生:/