前言
公司项目使用jenkins来做自动部署。其中使用到publish over SSH plugin插件。
该插件可以实现项目的远程发布。在使用中遇到一个坑,一直未能解决
问题
-
安装插件. 进入插件管理,输入上面的名字即可。
-
配置远程服务器。
image.png
记得点击test 出现success才算配置ok
-
在Job中配置参数
image.png -
点击立即构建。在日志中出现如下的文字。
SSH: EXEC: completed after 400 ms
SSH: Disconnecting configuration [8楼centos7-test] ...
SSH: Transferred 0 file(s)
Build step 'Send files or execute commands over SSH' changed build result to SUCCESS
Finished: SUCCESS
去远程服务器的目录下查看文件,也未能找到。
说明文件发送失败。
解决
该问题出现的初期,我尝试找一下问题所在。未能找到。遂放弃解决。转而通过 执行远程命令来实现文件传输。
近期得一些空闲,于是开始研究问题原因所在。
在咨询阅读官方的说明文档之后,一一尝试,总算解决了问题。
官方文档
这里举例说明,如果实现名称为sskzmz的任务的项目文件发送到远程服务器/www/sites/sskzmz/目录下。
注: 构建文件所在的目录是 /var/jenkins_home/workspace/sskzmz
则配置如下:
- Source files
**/*
表示sskzmz这个job的工作目录下所有的文件和目录。 - Remove prefix 该操作是针对上面的source files目录,会移除匹配的目录。通常留空。
- Remote directory 该操作是基于设定的服务器目录进行。这里我的服务器配置是的/www. 因此这里应该写sites/sskzmz即可。
- Exec command 远程服务器执行的命令。例如可以输出 service nginx restart 或者/www/xx. sh 均可。
重点一: source files 要基于任务的目录进行。不支持绝对路径。如果配置不对,则找不到文件。上例中/var/jenkins_home/workspace/sskzmz 是任务目录。最终jenkins会选择 /var/jenkins_home/workspace/sskzmz/**/* 查询所要传送的文件。
重点二: Remote directory 要基于你远程服务器的目录配置。你远程服务器配置的基准是/www 。则最终的文件目录是 /www+ Remote directory的配置参数。不支持绝对路径。
只要理解上面这2点,就不会再出现SSH: Transferred 0 file(s)
总结
要学会看文档,即使是英文的。
网友评论