Jenkins 有个插件叫做 “Publish Over SSH”,可以实现 jenkins 服务器免密访问其它服务器,执行一些操作和命令,进行远程部署服务。
这篇主要说下原理:jenkins 上配置 SSH;job 中选择要远程的服务器,设置操作目录和执行的脚本。
一、生成 SSH 秘钥,并将公钥发布到各服务器
登录 jenkins 服务器,执行 “ssh-keygen”:
这里会让你选择一个秘钥生成存放的路径,我使用了默认的/root/.ssh/id_rsa, 还有让你这是一个 “passphrase”,可以不加密码直接回车。我设置了密码,比如 “testssh”。
生成成功后,进入到/root/.ssh 目录下查看是否有秘钥文件:
然后将公钥发到要远程的各服务器上,执行 “ssh-copy-id root@192.168.X.X”, root 是远程服务器的登录名,@ 后面是 IP。
可以用 “ssh root@192.168.X.X”,验证下是否发布成功,如果成功登录到远程服务器,就 OK 了。
一般会有多台服务器,同样的方式操作就行了。
二、插件安装
在 jenkins 的插件管理模块,搜索 “ssh”,选择安装 “Publish Over SSH” 即可。
三、jenkins 系统配置
在 jenkins 的 “Configure System”(系统配置)中拉到最下面,找到 “Publish over SSH” 添加要远程的服务器,并进行配置。
完成配置后,点击下方的 “Test configuration”,如果出现 “success” 说明通了。
四、jenkins job 中远程服务器,进行操作。
这里我们实现把 jenkins 服务器上 jenkins 工作目录下的 test.txt 文件上传到远程服务器的/root/home 目录下。
在 “构建环境” 项,勾选 “Send files or execute commands over SSH before the build starts”。
这里有两个选项,一个是 “before the build starts” ,一个是 “after the build starts”,根据需要选择。
在 “构建” 项,我让 jenkins 执行一条打印 “helloworld” 的 shell。
配置完成,保存,构建看下结果:
“Transferred 1 file(s)” 说明上传了一个文件,并且打印了 “helloworld”。
我们再登录远程服务器上,看下/root/home 目录下确实多了 test.txt 文件。
基本原理和逻辑就是这样,实际部署时,只不过执行的 shell 脚本,和远程操作的文件不同而已。