【问题标题】:Jenkins Timeout because of long script execution由于脚本执行时间长,Jenkins 超时
【发布时间】:2013-10-25 11:55:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • “脚本需要 8 倍的执行时间,然后在服务器(从站)上手动运行(只需几分钟)”您是否在运行 Jenkins 的同一用户下运行脚本?跨度>
  • 抱歉回复晚了。不,我只是在我的帐户中执行了它(管理员权限)。但这可能是一个很好的提示!
  • 这是因为您通过 cmd 调用 powershell 并且其中一个 cmdlet 永远不会返回.. 发布您的代码,或者只是通过创建批处理文件并在本地运行来测试它
  • 您是在服务器上手动运行脚本还是在自己的机器上运行脚本?

标签: performance powershell jenkins


【解决方案1】:

在发现 Jenkins 支持 own such plugin 之前,我已经创建了自己的 Powershell CI Service。但是在我的实现和我当前的工作配置中,我们遵循样本隔离原则规则:越多越好。我发现我的 CI 服务在不同的步骤中分开时效果更好(同样在出现错误的情况下,根本原因分析也很容易)。单一责任原则在这里也很有帮助。因此,在 Jenkins 中,我们将前、后、构建和电子邮件步骤作为单独的脚本。关于

msbuild.exe

据我记得,在我的案例中存在与文件系统路径中的操作相关的问题。所以当脚本在不同的函数中被分割/分离时,我们有更好的性能(额外的参数检查)。

【讨论】:

    【解决方案2】:

    使用“分而治之”的技巧。您有两个选择:修改您的脚本,以便显示正在做什么以及每一步需要多少。第二种选择是制作更小的脚本来执行以下操作:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多