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用户身份执行:

1
# ssh-keygen -t rsa

② 一路回车,生成的密钥文件在当前用户的目录的.ssh目录中。

③ 复制主机202用户目录下的id_rsa.pub文件到主机201的fanlychie用户目录下的.ssh目录中,并将文件重命名为authorized_keys:

1
# cd ~/.ssh/ && scp id_rsa.pub fanlychie@192.168.1.201:/home/fanlychie/.ssh/authorized_keys

④ 验证SSH免密登陆,在主机202以root用户身份执行:

1
# ssh fanlychie@192.168.1.201

如果能顺利登陆主机201,说明配置成功。

⑤ 退出SSH登陆:

1
# exit

如果主机202需要远程登陆多台目标主机,如主机203,只需要从第3步开始配置即可。

5. 验证配置

新建一个自由风格的软件项目,在构建项里面选择增加构建后操作步骤并选择Execute shell script on remote host using ssh

在目标主机201中编写测试脚本:

1
$ cd ~ && mkdir scripts && vi scripts/hello.sh

测试内容如下:

1
2
3
4
5
#!/bin/bash
echo '========================================='
echo 'Hello World!'
echo '========================================='

保存退出。并修改文件权限为可执行:

1
$ chmod 764 scripts/hello.sh

构建任务:

6. 环境变量

上面这种远程SSH到目标主机属于NoLogin方式,无法获取 PATH 等环境变量。

Jenkins构建好项目之后,如果应用服务器跟Jenkins服务器不是同一台主机,那Jenkins就需要通过SSH远程将应用的部署包发布到目标主机。执行发布的过程,通常需要目标主机环境变量的支持。例如:

1
2
3
#!/bin/bash
java -version

构建结果:

实际上,java 环境变量是已经在服务器中配置好了的。但由于是NoLogin的方式登陆,无法获取 PATH 等环境变量导致。目前我的解决方法是在脚本中重新定义一次。如:

1
2
3
4
5
6
7
8
#!/bin/bash
JAVA_HOME=/usr/local/jdk1.8.0_144
CLASSPATH=.:$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
java -version

构建结果: