Jenkins 构建 Exec timeout!

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

一、报错提示:node

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

二、报错缘由git

参考博客npm

使用 Jenkins 作部署任务时,之前端项目举例,通常会有以下几个步骤:后端

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

其中的第 二、3 步是比较耗时的。这里主要由于第 3 步的构建时间彻底有可能超过 Jenkins 设置的构建时间(120000 ms),致使 Jenkins 构建超时而中断。测试

咱们再看看 Jenkins 的默认配置ui

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

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

三、解决方案日志

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

四、问题扩展

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

首页将命令分段

  • 一、cd deploy/merc 将当前目录指向 deploy/merc
  • 二、ls | grep -v node_modules 查找目录下除 node_modules 外的目录或文件
  • 三、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 一次,再添加这条命令就没问题。

相关文章
相关标签/搜索