6

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

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

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

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

2 回答 2

0

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

msbuild.exe

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

于 2014-08-21T13:50:01.113 回答
0

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

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

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

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

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

于 2016-03-01T10:29:52.273 回答