赞
踩
我之前使用过jenkins的jnlp做附属服务器的代理,后来发现总是会断掉
于是更换为JenkinsSSH 直接进行机器的操作。
下面我的场景是 点击Jenkins 的一个任务,连通到我局域网 192.168.9.170(下面简称170)
来执行170 IIS站点进行 停止》Svn更新》启用的动作
将SSH服务安装到目标机器170
下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases
选择适合你机器版本的服务,我目标机器的环境是Win64
下载后直接安装
安装成功后 Win+R 换出命令窗口
输入【services.msc】换出服务管理
会发现多了一个服务,启用类型选择开机自启即可
唤出防火墙,新增入站规则,新建》选择端口》下一步》输入22》一直下一步》起个名字》点击完成
以上,我们目标机器170的ssh就部署完成。
打开自己的Jenkins选择插件管理
选择可选插件
输入筛选条件【Publish Over SSH】
正常情况下,下方空白处会出现ssh插件。下图看不到是因为我已经安装了,我的插件在【已安装】
进入系统配置
进入后找到【Publish Over SSH】模块
点击新增按钮,输入 显示名称、服务器IP、登录账号
点击高级》勾选使用密码或密钥》输入密码
右下角有一个测试链接,点击后如果出现了Success,则配置成功
以上,我们Jenkins服务端的配置配置完成。
新建任务
找到构建
选择构建步骤 【Send files or execute commands over SSH】
新增服务
在下拉框中选择我们在步骤【三(2)】中维护的SSH服务
然后再执行脚本中添加你要运行的目标服务器的脚本
值得一提的是,要在你执行脚本中添加一个前缀
我这里执行的bat脚本
【cmd /c 一个脚本.bat】
这里要注意一下,如果想在控制台看到执行过程可以点击高级
勾选【Verbose output in console】
点击保存,直接执行构建,这个时候我们发现直接成功了
以上就是我们创建构建任务的步骤
根据步骤【四(1)】,我已经能够控制目标服务器【170】的脚本执行
但是发现一个问题,即 无论bat执行成功还是失败,我的构建记录都是显示成功
我研究了Jenkins对构建状态的判定,是根据脚本的返回值
当最后的返回值为【exit 0】时,Jenkins构建认为这是一个成功的执行
当最后的返回值为非0,即【exit 1】时,Jenkins构建认为这是一个成功的执行
使用这个特性,我可以根据我的需求控制exit返回值,来达到输出jenkins构建状态的效果。
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=
经过测试,我发现jenkins对bat脚本的编码格式有兼容问题,此处我使用的bat编码格式为【ANSI】
在部署新机器的时候点击【Test Configuration】按钮发现一直报错
错误信息:【Failed to connect and initialize SSH connection. Message: [Failed to conn】
直接在目标服务器的文件管理浏览器输入以下地址
【C:\ProgramData\ssh\】
这个目录是隐藏的,一级级是找不到的,直接输入能打开
修改【sshd_config】这个文件
修改Pord 为2222
然后重新创建 【入站规则】
重启 SSH 服务
点击【Test Configuration】,Success出现,成功撒花
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。