Jenkins Timeout因为脚本执行过长

时间:2013-10-17 05:48:27

标签: performance powershell jenkins

我有一些关于Jenkins和运行Powershell脚本的问题。长话短说:脚本需要8倍的执行时间,然后在服务器(Slave)上手动运行(只需几分钟)。 我想知道为什么?

在脚本中是调用&等命令的函数。 msbuild.exe或& svn提交。我发现脚本在执行之前的那些行中挂起。结果是,Jenkins因为脚本需要很长时间而超时。我可以在Jenkins作业配置中更改超时阈值,但我不认为这是问题的解决方案 没有错误输出或任何信息为什么需要这么长时间,我没有任何进一步的想法。也许你们其中一个人可以告诉我,Jenkins如何调用这些命令。

这是Jenkins所做的(Windows批处理插件):

powershell -File %WORKSPACE%\ScriptHead\DeployOrRelease.ps1

2 个答案:

答案 0 :(得分:0)

在我发现Jenkins支持CI Service之前,我创建了自己的Powershell own such plugin。但在我的实施和我目前的工作配置中,我们遵循样本隔离原则规则:越多越好。我发现我的CI服务在不同步骤中分离时效果更好(如果出现错误,则根本原因分析很容易)。单一责任原则在这里也很有用。就像詹金斯一样,我们有预先&作为单独的脚本发布,构建和发送电子邮件步骤。约

  

msbuild.exe

据我记得,在我的案例中,存在与FileSystem路径中的操作相关的问题。因此,当脚本在不同的函数中被分割/分离时,我们有更好的性能(对params的额外检查)。

答案 1 :(得分:0)

使用"分而治之"技术。您有两种选择:修改脚本,以便显示正在执行的操作以及每个步骤需要多少操作。第二个选项是使较小的脚本执行以下操作:

  • 获取代码源,
  • 编译/构建应用程序,
  • 运行测试,
  • 创建一个包,
  • 发送包裹,
  • 归档日志
  • 发送通知。

问题最多的通常是第一步:从GIT或SVN或Mercurial获取源代码或者您拥有的任何版本控制系统。确保此步骤不会嵌入到您的脚本中。

在作业运行期间,Jenkins捕获输出并使用AJAX在浏览器中显示结果。在脚本中,确保为每个步骤或几个步骤刷新标准输出。有些语言会缓存标准输出,因此您只能在结尾处查看结果。

此外,您还可以创建有助于存档和验证旧运行的活动状态的日志文件。根据我使用Jenkins进行超过10个步骤的经验,您需要创建一个可以运行多个步骤的专用应用程序,例如"机器人框架"。