Jenkins SSH 远程执行 Shell 脚本
1. 安装插件
系统管理 -> 管理插件 -> 可用插件,搜索:SSH Plugin
2. 远程主机身份配置
Credentials –> global –> Add Credentials
3. 远程主机SSH配置
系统管理 –> 系统设置,找到SSH remote hosts
项,点击添加按钮:
4. 远程主机SSH免密登陆配置
当前主机信息:
- IP:192.168.1.202
- 用户:root
目标主机信息:
- IP:192.168.1.201
- 用户:fanlychie
主机202以root用户身份免密SSH登陆到主机201的fanlychie用户的配置方式:
① 在主机202以root用户身份执行:
|
|
② 一路回车,生成的密钥文件在当前用户的目录的.ssh
目录中。
③ 复制主机202用户目录下的id_rsa.pub文件到主机201的fanlychie用户目录下的.ssh
目录中,并将文件重命名为authorized_keys:
|
|
④ 验证SSH免密登陆,在主机202以root用户身份执行:
|
|
如果能顺利登陆主机201,说明配置成功。
⑤ 退出SSH登陆:
|
|
如果主机202需要远程登陆多台目标主机,如主机203,只需要从第3步开始配置即可。
5. 验证配置
新建一个自由风格的软件项目,在构建
项里面选择增加构建后操作步骤
并选择Execute shell script on remote host using ssh
:
在目标主机201中编写测试脚本:
|
|
测试内容如下:
|
|
保存退出。并修改文件权限为可执行:
|
|
构建任务:
6. 环境变量
上面这种远程SSH到目标主机属于NoLogin
方式,无法获取 PATH 等环境变量。
Jenkins构建好项目之后,如果应用服务器跟Jenkins服务器不是同一台主机,那Jenkins就需要通过SSH远程将应用的部署包发布到目标主机。执行发布的过程,通常需要目标主机环境变量的支持。例如:
|
|
构建结果:
实际上,java 环境变量是已经在服务器中配置好了的。但由于是NoLogin
的方式登陆,无法获取 PATH 等环境变量导致。目前我的解决方法是在脚本中重新定义一次。如:
|
|
构建结果: