一、背景说明

我之前使用过jenkins的jnlp做附属服务器的代理,后来发现总是会断掉
于是更换为JenkinsSSH 直接进行机器的操作。
下面我的场景是 点击Jenkins 的一个任务,连通到我局域网 192.168.9.170(下面简称170)
来执行170 IIS站点进行 停止》Svn更新》启用的动作

二、Windows安装SSH服务

(1)安装服务程序

将SSH服务安装到目标机器170
下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases
选择适合你机器版本的服务,我目标机器的环境是Win64

在这里插入图片描述

下载后直接安装
安装成功后 Win+R 换出命令窗口
输入【services.msc】换出服务管理
会发现多了一个服务,启用类型选择开机自启即可

在这里插入图片描述

(2)开放22端口

唤出防火墙,新增入站规则,新建》选择端口》下一步》输入22》一直下一步》起个名字》点击完成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上,我们目标机器170的ssh就部署完成。

三、Jenkins安装SSH插件

(1)先安装插件

打开自己的Jenkins选择插件管理
选择可选插件
输入筛选条件【Publish Over SSH】
正常情况下,下方空白处会出现ssh插件。下图看不到是因为我已经安装了,我的插件在【已安装】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)配置Jenkins中的SSH服务信息

进入系统配置

在这里插入图片描述

进入后找到【Publish Over SSH】模块

在这里插入图片描述

点击新增按钮,输入 显示名称、服务器IP、登录账号

在这里插入图片描述

点击高级》勾选使用密码或密钥》输入密码

在这里插入图片描述

右下角有一个测试链接,点击后如果出现了Success,则配置成功

在这里插入图片描述

以上,我们Jenkins服务端的配置配置完成。

四、配置Jenkins任务,开始做对目标机器的脚本相关

(1)创建一个工作任务

新建任务

在这里插入图片描述

找到构建

在这里插入图片描述

选择构建步骤 【Send files or execute commands over SSH】

在这里插入图片描述

新增服务

在这里插入图片描述

在下拉框中选择我们在步骤【三(2)】中维护的SSH服务
然后再执行脚本中添加你要运行的目标服务器的脚本
值得一提的是,要在你执行脚本中添加一个前缀
我这里执行的bat脚本
【cmd /c 一个脚本.bat】

在这里插入图片描述

这里要注意一下,如果想在控制台看到执行过程可以点击高级
勾选【Verbose output in console】

在这里插入图片描述
在这里插入图片描述

点击保存,直接执行构建,这个时候我们发现直接成功了

在这里插入图片描述

以上就是我们创建构建任务的步骤

五、把执行bat中的成功/失败结果返回到构建中来

(1)背景描述

根据步骤【四(1)】,我已经能够控制目标服务器【170】的脚本执行
但是发现一个问题,即 无论bat执行成功还是失败,我的构建记录都是显示成功
我研究了Jenkins对构建状态的判定,是根据脚本的返回值
当最后的返回值为【exit 0】时,Jenkins构建认为这是一个成功的执行
当最后的返回值为非0,即【exit 1】时,Jenkins构建认为这是一个成功的执行
使用这个特性,我可以根据我的需求控制exit返回值,来达到输出jenkins构建状态的效果。

(2)贴一个bat脚本模板

cd /d %~dp0
::获取当前目录

@set WebSiteName="【程序名称】"
@set SCWebApiWebPoolName="【程序池名称】"

:停止一下IIS站点
@echo stop WebSite start...
@C:\Windows\System32\inetsrv\appcmd.exe stop site %WebSiteName%
@echo stop WebSite finished...
echo= 

:停止应用程序池
@echo stop WebSite start...
C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:%SCWebApiWebPoolName%
@echo stop WebSite finished...
echo= 


@echo SVN Update start......
svn update --non-interactive --trust-server-cert-failures="unknown-ca,cn-mismatch,expired,not-yet-valid,other" --username 【svn用户名】 --password 【svn密码】 > up.txt
@echo SVN Update finished......
 
 
:启动应用程序池
@echo stop WebSite start...
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:%SCWebApiWebPoolName%
@echo stop WebSite finished...
echo= 

:启动IIS站点
@echo Restart WebSite start...
@C:\Windows\System32\inetsrv\appcmd.exe start site %WebSiteName%
@echo Restart WebSite finished...
echo= 




findstr "At revision" "up.txt">"up2.txt"

set /p r1= < up2.txt

del up.txt
del up2.txt

set r2=%r1:~0,11%



if not "%r2%"=="At revision" goto or
if "%r2%"=="At revision" goto b

:or
if not "%r2%"=="Updated to " goto a
if "%r2%"=="Updated to " goto b

:a
exit 1
:b
exit 0

@echo=

(3)bat编码格式

经过测试,我发现jenkins对bat脚本的编码格式有兼容问题,此处我使用的bat编码格式为【ANSI】

六、端口占用

在部署新机器的时候点击【Test Configuration】按钮发现一直报错
错误信息:【Failed to connect and initialize SSH connection. Message: [Failed to conn】

(1)更换目标服务器的SSH端口

直接在目标服务器的文件管理浏览器输入以下地址
【C:\ProgramData\ssh\】
这个目录是隐藏的,一级级是找不到的,直接输入能打开
修改【sshd_config】这个文件

在这里插入图片描述

修改Pord 为2222
然后重新创建 【入站规则】
重启 SSH 服务

在这里插入图片描述

(2)修改Jenkins的端口号

点击【Test Configuration】,Success出现,成功撒花

在这里插入图片描述

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐