Jenkins 构建 Exec timeout!

综合编程 2018-05-16 阅读原文

利用 Jenkins
做自动化构建是方便又省时的,只需简单的配置就能够完成前后端项目的部署。

1、报错提示:

ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,004 ms]

2、报错原因

参考博客

使用 Jenkins
做部署任务时,以前端项目举例,一般会有如下几个步骤:

  • 1、 从 git
    相应的分支拉取代码
  • 2、安装项目的三方依赖包 (npm install or cnpm install or yarn install)
  • 3、项目代码测试或生产环境编译构建 (npm run build or cnpm run build)
  • 4、启动项目的服务 (这里一般是 node server

其中的第 2、3 步是比较耗时的。这里主要因为第 3 步的构建时间完全有可能超过 Jenkins
设置的构建时间(120000 ms),导致 Jenkins
构建超时而中断。

我们再看看 Jenkins
的默认配置

每个构建步骤在没有做手动设置的情况下默认是 120000 ms
的超时时间。一旦相应的构建步骤超时,构建就会中断并抛出如下错误信息。

ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,004 ms]

3、解决方案

在可能超时的构建步骤那里设置 Exec timeout(ms)
合理的时间,以防止构建步骤超时,同时勾选上 Exec in pty
让控制台及时输出相关日志信息。

4、问题扩展

命令解析 cd deploy/merc && ls | grep -v node_modules | xargs rm -r

首页将命令分段

  • 1、cd deploy/merc 将当前目录指向 deploy/merc
  • 2、ls | grep -v node_modules 查找目录下除 node_modules 外的目录或文件
  • 3、ls | grep -v node_modules | xargs rm -r 查找并删除目录下除 node_modules 外的目录或文件

如果第二步目录或文件筛选不到,那么第三步的删除操作就不能执行,所以会报如下错误信息

cd deploy/merc && ls | grep -v node_modules | xargs rm -r
rm: missing operand    //操作对象不存在
Try `rm --help' for more information.

第二行报错:操作对象不存在。

这个命令的主要目的是:在 Jenkins 构建项目之前,会从配置的 git 地址拉取最新的代码,为了保证每次部署的代码都是最新的。那又为什么要排除 node_modules 目录呢?node_modules 是项目的第三方依赖包,文件下载比较大且很慢,为了保证每次的项目构建时间,所以保留了这个目录。这个命令也是非必要的,问题的解决方案就是先不执行这个命令,然后 build 一次,再添加这条命令就没问题。

稀土掘金

责编内容by:稀土掘金阅读原文】。感谢您的支持!

您可能感兴趣的

Setup a Jenkins Pipeline for local development env... Setup a Jenkins Pipeline for local development environment in Docker container CI/CD pipelines allow us to automatic...
Jenkins X 还是 2.0? 【编者的话】本文主要介绍了最近发布的jenkins x的一些吸引人的功能 近期发布的 Jenkins X 在开源界备受关注。在这篇文章里,我将探讨新产品里一些吸引人的功能,这些功能尚未在文档里被特别提及。如果你需要一个产品指南或者其他...
Announcing deploy to Azure app service Jenkins plu... We are proud to announce the availability of the Azure App Service plugin for Jenkins , which provides Jenkins native c...
跟我一起学docker(十)–jenkins的使用 什么是Jenkins? jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言(比如:java, c#, php等)的项...
用Jenkins自动部署hexo搭建的GitHub静态博客... 转载请声明出处 hexo 为我们提供了一套非常方便的静态博客搭建框架,我们只需要编写文章的 MarkDown 文件即可。但是即便方便,还是会有几个繁琐的步骤:每次写一篇博客都需要执行编译命令,再将新生成的网页代码提交到 GitHub...