jenkins-通过SSH连接linux和windows宿主机

4,267 阅读4分钟

jenkins中slave节点连接的两种常用方式

任务一般是在slave上面运行的。当然不是讲master节点不能跑任务,master节点主要是处理调度构建作业,把构建分发到slave节点进行实际执行,监视slave节点的状态(必要时让它们进行上线或者离线),记录和发布构建产物。

主要常用的的连接slave节点的方式就是通过ssh和jnlp。两个特点分别如下:

1)ssh来说,我们一般用的服务器都是linux系统,当然最方便的就是通过ssh启动jenkins节点,但是这个有个前提的要求就是master和slave之前能进行ssh连接

2)jnlp连接方式有个好处就是不用master和slave之间能够ssh连接,只需要能够ping即可。并且如果slave的机器是windows的话,也是可以的这个其实是非常实用的,因为有时候,可能一些权限或者防火墙的原因,这master和slave真的不能够ssh连接,还有一些未知的原因无法ssh到slave节点都可以通过jnlp的方式进行连接。

(一)SSH连接linux Windows Slave安装OpenSSH,并启动ssh服务,测试ssh的22端口是否开启

安装SSH插件

去插件管理-可选插件搜索: SSH Agent

image.png

安装完成

启用SSH Server Jenkins- 系统管理 - 全局安全配置, 把 SSH Server 设置为启用(默认是禁用)

image.png

新增节点

Jenkins- 系统管理 - 节点管理,新建节点

image.png

添加节点页面

名称 自定义一个节点名称

执行器数量 可以同时执行的job线程数,随便写个数字

远程工作目 宿主机上workspace目录

标签 自定义

用法 尽可能的使用这个节点

启动方式 Launch agent agents via SSH

主机 你自己的宿主机linux服务的ip

Credentials 添加你的linux服务器远程访问的root账号和密码

Host Key Verification Strategy 这项选择Non verifying Verifcation Stragegy

image.png

添加成功后,是离线状态

image.png

启动代理节点

点上面新增的节点启动代理

image.png

保存后重新构建job任务,会发现这个任务就在节点机器上运行了

image.png

(一)SSH连接windows

1,下载openSSH windows版(注:该版本是64位)

链接: pan.baidu.com/s/19V2W_e1A…

提取码: xgjp

openssh官网:

github.com/PowerShell/…

Windows Slave需安装OpenSSH,并启动ssh服务,测试ssh的22端口是否开启

cmd到openSSH路径下

安装sshd服务
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
开放22号端口(如果你在windows关闭了防火墙并配置了入站规则可以不执行如下命令,多执行不影响)
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
配置开机自启sshd服务
sc config sshd start= auto
将C:\Program Files\OpenSSH添加到path中,免得每次都要切到C:\Program Files\OpenSSH才能使用ssh,启动ssh服务
net start sshd

image.png

ssh出于安全考虑,每次连接都会提示输入密码,为了避免麻烦,就要配置密钥对。

1)生成密钥对命令

这里采用rsa算法,你也可以使用其他算法,但dsa默认不支持,这里是个坑,最好生成rsa密钥,ssh支持,随自己吧

ssh-keygen -t rsa

image.png

2)将公钥传到master主机的~/.ssh目录下

名字改成authorized_keys

image.png

3)修改远程主机sshd_config配置

PubkeyAuthentication yes

StrictModes no

重启sshd服务

image.png

Jenkins安装Publish Over SSH插件

image.png

Jenkins上配置ssh客户端

Publish Over SSH算是一个比较流行的ssh工具,可以传输文件,也可以执行命令(针对linux,可以执行命令和shel;针对windows,cmd里能够进行的操作都可以)。

在Jenkins管理界面中,依次打开:系统管理--》系统设置--》Publish over SSH部分,按照下图进行配置:

image.png

填写完成后,可以点击下面的按钮,测试下连接是否成功。

image.png

注意:

Name随便填,Hostname是ip或者主机名,用户名同远程桌面 用的用户名,点击高级后,填写密码部分。

其中的Remote Directory需要重点关注,该参数表示的是:ssh文件上传后,文件在远端服务器上的保存路径,路径需要预先建立好。

同时,如果上传了文件后,需要执行命令的话,这也是bat、shell等命令的工作目录。

针对windows类型的ssh服务器,这边的填写只能写相对路径,(base 路径为C:\Users\Administrator,如果作为非管理员登录,可能会稍微不一样,可以自己用SecureCRT之类的登进去试试,看看在哪个路径下)

如果不填,就是在base路径;

如果填写内容为“\”,(不含双引号),则路径会是c盘根路径;

如果填"target",则路径会是C:www.wanmeiyuele.cn www.120xh.cn \www.thd178.com/ Users\Administrator\target。

我这边简单起见,先不填。因为其作为后续命令执行的工作路径的原因,会有一些坑。后边我再补充。