请注意:问题基于旧的,现在称为"脚本"管道格式.使用"声明性管道"时,并行块可以嵌套在阶段块内(请参阅带有声明性管道1.2的并行阶段).
我想知道如何将并行步骤与Jenkins工作流/管道插件一起使用,尤其是.如何将它们与构建阶段混合.我知道一般模式:
parallel(firstTask: {
// Do some stuff
}, secondTask: {
// Do some other stuff in parallel
})
Run Code Online (Sandbox Code Playgroud)
但是,我想并行运行几个阶段(在同一节点上,有多个执行程序),所以我尝试添加这样的阶段:
stage 'A'
// Do some preparation stuff
parallel(firstTask: {
stage 'B1'
// Do some stuff
}, secondTask: {
stage 'B2'
// Do some other stuff in parallel
})
stage 'C'
// Finalizing stuff
Run Code Online (Sandbox Code Playgroud)
这不能按预期工作."do stuff"任务是并行执行的,但并行阶段会立即结束,并且不会包含它们应包含的内容.因此,舞台视图不会显示正确的结果,也不会链接日志.
我可以并行构建不同的阶段,还是"并行"步骤仅用于单个阶段?
在具有Ajax事件的页面上,我想在Ajax调用返回之前禁用所有操作(以防止双重提交等问题)
我通过return false;在"锁定"页面时预先设置当前的onclick事件来尝试此操作,并在"解锁"页面时稍后删除它.但是,在"解锁"后,操作不再处于活动状态 - 您无法触发它们.
为什么这不起作用?见下面的示例页面.还有其他想法来实现我的目标吗?
示例代码:
链接和按钮都显示JS警报; 当按下锁定,然后解锁事件处理程序与以前一样,但不起作用......?!?
该代码最终将与特立尼达合作,但也应在外部工作.
<html><head><title>Test</title>
<script type="text/javascript">
function lockPage()
{
document.body.style.cursor = 'wait';
lockElements(document.getElementsByTagName("a"));
lockElements(document.getElementsByTagName("input"));
if (typeof TrPage != "undefined")
{
TrPage.getInstance().getRequestQueue().addStateChangeListener(unlockPage);
}
}
function lockElements(el)
{
for (var i=0; i<el.length; i++)
{
el[i].style.cursor = 'wait';
if (el[i].onclick)
{
var newEvent = 'return false;' + el[i].onclick;
alert(el[i].onclick + "\n\nlock -->\n\n" + newEvent);
el[i].onclick = newEvent;
}
}
}
function unlockPage(state)
{
if (typeof TrRequestQueue == "undefined" || state == TrRequestQueue.STATE_READY)
{
//alert("unlocking …Run Code Online (Sandbox Code Playgroud) 在Jenkins管道中,当在特定节点上运行构建时,会在该代理上分配工作区。我们没有设置工作空间路径,因此它是自动确定的。我了解,当同一作业在同一代理上同时运行时,工作空间必须包含执行程序编号以隔离构建。
但是...工作空间路径究竟是如何构建的?
我们的构建被分配给一个特定的节点(具有4个执行器),并且被配置为不允许并行构建。通常分配给它:
EXECUTOR_NUMBER=1
WORKSPACE=xxx\yyy\jobname
Run Code Online (Sandbox Code Playgroud)
在某个时候,该构建开始在执行程序2上运行,但仍使用与以前相同的工作空间。
稍后,该构建再次在执行程序1上运行,但现在使用
WORKSPACE=xxx\yyy\jobname@2
Run Code Online (Sandbox Code Playgroud)
由于无法处理路径中的“ @”符号,因此中断了构建。从那时起,即使在将构建计算机上的执行程序的数量设置为1之后,该构建仍继续使用该工作区,手动删除代理的工作区目录等。
所以我的问题是:
感谢您的任何见解!
我们正在使用Jenkins LTS 2.107.2和最新的Pipeline插件(我不知道哪个版本特别有趣)。