并行运行测试后,我需要立即发出通知。当前,并行节点已运行,然后放弃了该节点,并且发送通知有时会等待下一个可用节点。
// List of tasks, one for each marker/label type.
def farmTasks = ['ac', 'dc']
// Create a number of agent tasks that matches the marker/label type.
// Deploys the image to the board, then checks out the code on the agent and
// runs the tests against the board.
timestamps {
stage('Test') {
def test_tasks = [:]
for (int i = 0; i < farmTasks.size(); i++) {
String farmTask = farmTasks[i]
test_tasks["${farmTask}"] = {
node("linux && ${farmTask}") {
stage("${farmTask}: checkout on ${NODE_NAME}") {
// Checkout without clean
doCheckout(false)
}
stage("${farmTask} tests") {
<code>
}
} // end of node
} // end of test_tasks
} // end of for
parallel test_tasks
node('linux') {
sendMyNotifications();
}
} // end of Test stage
} // end of timestamps
答案 0 :(得分:0)
坦率地说,这段代码似乎完全可以。我尚未了解通知如何需要等待节点(您是否有更多使用这些代理的管道?该管道是否同时运行多个实例?),但是解决此问题的方法很简单:
设置另一个代理(它可以驻留在已托管现有代理的计算机上)并为其赋予唯一的标签(例如notifications
),以便其唯一的用途就是发送通知。
这不是完美的,因为您会遇到单点故障,但是当您找出导致并行步骤后无法使用“真实”代理的原因时,它可以帮助纠正这种情况。