并行运行后继续使用节点

时间:2019-06-12 19:58:11

标签: jenkins jenkins-pipeline

并行运行测试后,我需要立即发出通知。当前,并行节点已运行,然后放弃了该节点,并且发送通知有时会等待下一个可用节点。

// 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

1 个答案:

答案 0 :(得分:0)

坦率地说,这段代码似乎完全可以。我尚未了解通知如何需要等待节点(您是否有更多使用这些代理的管道?该管道是否同时运行多个实例?),但是解决此问题的方法很简单:

设置另一个代理(它可以驻留在已托管现有代理的计算机上)并为其赋予唯一的标签(例如notifications),以便其唯一的用途就是发送通知。

这不是完美的,因为您会遇到单点故障,但是当您找出导致并行步骤后无法使用“真实”代理的原因时,它可以帮助纠正这种情况。