为了与Jenkins工作流并行运行,必须构建步骤才能持久吗?

时间:2015-07-07 18:05:22

标签: jenkins jenkins-workflow

我正在尝试jenkins工作流程中的并行步骤。目前我的流程(基本上)看起来像这样:

string SubAssemblySerialNumber = form.serail;
string Refdes = row.Cells["RefDesc"].Value.ToString().Replace(";", "");
string URL = "http://" + MSSRestSrv + ":8018/Quality/SerialNumbers/BoxBuilds/" + serial + "/Attach/?SubAssemblySerialNumber=" + SubAssemblySerialNumber + "&Refdes=" + Refdes + "";
try
{
    using (WebClient client = new WebClient())
    {
        System.Collections.Specialized.NameValueCollection reqparm = new System.Collections.Specialized.NameValueCollection();

        byte[] responsebytes = client.UploadValues(URL, "POST", reqparm);
        string responsebody = Encoding.UTF8.GetString(responsebytes);
    }
}
catch (WebException we)
{
    MessageBox.Show(we.Response.ToString());
}

两个输入都显示为在不同的执行程序上运行,但是当我点击"继续"在两者上,只有第一次部署实际开始。这些部署作为自定义插件运行,该插件是为旧作业编写的,并且非常简单地转换为工作流。我没有看到任何关于等待执行者的明显信息,部署根本就没有开始。第一个完成后,第二个将立即开始。

在并行步骤允许两者运行之前,我必须实现DurableTask(或其他东西?)到目前为止我的转换非常轻松,所以也许是时候尝试更真实的转换了。

1 个答案:

答案 0 :(得分:2)

假设DeployMachineBuilder是您编写的SimpleBuildStep,实际上它的perform方法将在其持续时间内阻止Workflow虚拟机:Groovy解释器使用协同多任务处理。

在可行的情况下,最简单的解决方案是使用sh步骤而不是自定义构建器。这可以避免从属断开连接和/或Jenkins重新启动,并显示增量进度并与parallel一起正常工作。 JENKINS-26055将提供一种更方便的方式来定义自定义的“持久”步骤。 JENKINS-25879将提供一种更方便的方法来定义不耐用的步骤,但至少避免阻塞本机线程(因此在parallel中表现得更好并且以递增方式记录)。

顺便提一下,在我的示例脚本中,我建议将input步骤移到node块之外:在等待(可能是无限期)用户批准时,没有必要占用执行程序。< / p>