记录一次Jenkins构建任务的坑
场景
描述下当时的场景,我在项目根目录创建了一个deploy.sh脚本,
脚本中完成给脚本赋执行权限、拷贝公共配置文件(application-common.yml)到各服务目录、停止服务、启动新服务这一系列操作,
但 Jenkins 构建完总是有两三个任务起不来,奇怪的是,我手动执行deploy.sh脚本就没问题。
排查&分析
后面排查起来,那些没有启起来的服务是因为没有公共配置文件(application-common.yml),
巧合的是,那些能起起来的服务,在项目构建时,就把公共配置文件(application-common.yml)打到它们服务目录里了,
当时为了快速解决这个问题,我统一了 pom.xml 中的打包配置,将公共配置文件(application-common.yml)都打包到各服务目录里,
这个问题就解决了。
复现当时的场景,我创建了下面这个 Jenkins 任务,这个任务会创建一个文件夹,并执行拷贝配置文件的脚本。
拷贝配置文件的脚本的内容如下
#!/bin/bashifcp./config/config_stop.sh ./system/;thenecho"配置拷贝成功"elseecho"配置拷贝失败"exit0fi构建一下,成功了
看下system文件夹呢,文件并没有被拷贝进来
这是因为执行脚本所在的位置是当前用户所在的目录(root 用户是在 /root),不会因为下面这两个地方的设置而更改
(Jenkins 任务页)
(服务器配置页)
如下,在脚本中做个测试,验证一下当前执行脚本所在的路径,可见执行目录是/root
解决
解决办法很简单,要么脚本中使用绝对路径,要么在脚本执行的第一行加 cd 命令,切换到指定目录
#!/bin/bash# 切换到项目所在目录cd/home/projectsifcp./config/config_stop.sh ./system/;thenecho"配置拷贝成功"elseecho"配置拷贝失败"exit0fi点构建,这回 OK 了,文件能拷贝到system目录里了
