Jenkins 超时,因为脚本执行时间过长



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

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

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

powershell -File %WORKSPACE%ScriptHeadDeployOrRelease.ps1

我发现 Jenkins 支持它自己的此类插件之前,我已经创建了自己的 Powershell CI 服务。但是在我的实现和我当前的作业配置中,我们遵循示例隔离原则规则:越多越好。我发现我的 CI 服务在不同的步骤中分离时效果更好(在出错的情况下,进行根本原因分析也很容易)。单一责任原则在这里也很有帮助。因此,就像在 Jenkins 中一样,我们将 pre- & post-、build 和 email 步骤作为单独的脚本。大约

msbuild.exe

据我所知,在我的情况下,存在与文件系统路径中的操作相关的问题。因此,当脚本在不同的函数中划分/分离时,我们有更好的性能(参数的额外检查)。

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

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

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

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

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

最新更新