最近计划对Jenkins的构建项目进行优化,将传统的scp
命令替换为Publish Over SSH插件来执行远程命令和文件传输操作,从而提升安全性和简化流程。本文将分享我在使用Jenkins Publish Over SSH插件过程中积累的一些经验以及踩坑记录。
Jenkins安装Publish Over SSH插件
在Jenkins后台【系统管理 - 插件管理】搜索Publish Over SSH进行安装并重启Jenkins即可生效。
设置Publish Over SSH
在Jenkins后台【系统管理 - 系统配置】,找到SSH Servers填写目标服务器的IP、用户名、密码等信息,如下图。
唯一需要注意的是Remote Directory
这里,如果你不填写,那么你在进行文件拷贝的时候即使你填写的目标路径是绝对路径,他也会在前面加上家目录。
假如你Remote Directory
留空,服务器用户名配置的test
,那么会出现下面的情况:
- 比如你目标路径填写:
/tmp
- 实际上他在拷贝的时候目标路径变成了
$HOME/tmp
,也就是/home/test/tmp
所以这里需要尤其注意,个人建议填写/
路径,这样就是实际的绝对路径。
构建任务中使用Publish Over SSH
在创建构建任务的时候可以选择Send files or execute commands over SSH来使用Publish Over SSH,比如我需要将构建后的onenav.tar.gz
文件拷贝到绝对路径:/data/apps/dnmp/wwwroot/onenav.xiaoz.top/main/${VERSION}/
,那么:
- Source files:填写
onenav.tar.gz
- Remote directory:填写
/data/apps/dnmp/wwwroot/onenav.xiaoz.top/main/${VERSION}/
如果执行成功,但是目标路径下没有对应文件,需要注意以下几点:
- 可能是上面设置Publish Over SSH的时候
Remote Directory
留空的原因 - 可能是源文件不存在,可增加打印调试查看结果
- 可能是目标路径没有对应的执行和写入权限
拷贝目录失败
如果您需要使用Publish Over SSH拷贝目录,而不是单个或多个文件,可能会出现拷贝失败。
- 一开始我Source files填写的
test
(test是一个实际且存在的目录) - Remote directory填写的绝对路径
发现没有拷贝成功,并提示执行失败了,而且没有详细的错误原因,通过搜索得知,如果是要拷贝一个目录,及其下面的子文件,我们需要加上/**/*
,比如原来的test
需要修改为test/**/*
,如下图所示。
结语
通过使用Jenkins的Publish Over SSH插件,我们能够显著提升远程文件传输与命令执行的安全性与效率。本文介绍了插件的安装、配置及常见问题的解决方法,如路径设置、权限检查和目录拷贝失败等。希望这些经验能帮助您更高效地优化Jenkins构建流程,减少踩坑成本,助力CI/CD实践更加顺畅!
此文部分内容参考了: