UPDATE:2021.6.30 jenkins可以自定义workplace来指定当前目录(普通-点击 高级 按钮),可以不用下面的方法。
jenkins默认是有一个当前目录作为运行环境,执行的操作均基于此目录,如果创建的jenkins项目是free style的,如果要执行远程命令,就不方便修改执行目录了。
例子:如果想通过jenkins执行一个sh脚本,里面有cd命令,项目是free style的,则用exectue command over ssh,会出一build不结束的现象。原因就是sh里不能出现cd命令去修改当前执行的目录。
要如何解决这个问题呢?
1种可选的方案是使用pipeline项目,用dir(目录){}代码来限制。但是pipeline使用上稍复杂,这里只是简单的执行一个命令,有点不太必要。
2种方案是使用嵌套sh调用。即jenkins执行一个简单的脚本,这个脚本再调用真正执行的脚本。其本质上是重新执行一个后台任务。如
jenkins.sh
#/bin/bash
nohup /dir/another.sh >/dev/null 2>&1
exit 0
another.sh才是真正的脚本,里面可以使用任何命令了。