实现目标
Jenkins部署服务器与业务机完全独立,就需要借助这个插件让Jenkins可以远程执行命令。
前提
Jenkins SSH到业务机可以免密登录
1. 下载插件
打开 Jenkins插件下载链接 ,搜索:“publish-over-ssh” 下载hpi格式的文件
在“插件管理” — “上传插件” 中离线安装即可。
注:有可能需要事先安装依赖,安装的时候有提示依赖包,再下载对应的hpi安装并重启Jenkins后,再安装publish-over-ssh
2. 插件配置
在“系统配置” —“Publish over SSH”进行配置
参数含义:
- Passphrase:如果事先配置了免密登录,那么这里就填写密钥密码。
- Path to key:Jenkins机器的私钥,如:~/.ssh/id_rsa
- Key:这里粘贴~/.ssh/id_rsa文件cat命令的结果
- SSH-Server
- Name: 填写业务机标识
- Hostname: 填写业务机IP地址
- Username: root
- Remote Directory: 这里填写“Jenkins自动传输到业务机的文件存储路径”, 如:/tmp
填写完成后,点击“Test Configurationn” ,没问题的话,保存。
3. Job配置
构建 —> 添加构建步骤 —> “Send files or execute commands over ssh”
SSH Server
Name: 选择定义好的名称,表示当前Job远程到此机器执行
Source files: * (需要复制的源文件)
Remove prefix: 排除目录, 这里留空
Remote directory: 相对于步骤2中设置的/tmp目录而言,这里设置为”/“,表示文件上传到远程目录/tmp/中
Exec command: 这里输入要在远程服务器(业务机)上执行的命令, 如:ifconfig > /tmp/test.log
保存后,尝试构建
附录:Job执行错误解决
1 | Job内容 |
错误:
1 | ERROR: Exec timed out or was interrupted after 120,000 |
表面上看是因为执行shell脚本超时导致异常,实则不然。
原因是在执行脚本文件时(关于启动服务的脚本),pty(伪终端)就断开连接。
解决方法:让脚本在后台运行
勾选 “Exec in pty”
意思是启动脚本服务的时候,不进行等待
让脚本在后台运行
1
2cd /data/server1/assets/
nohup sh start_server.sh
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2021/02/24/Jenkins插件Publish-over-SSH配置/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!