jenkins在window集群环境中如何部署自动化发布?

2020-11-03 10:03发布

问题:

1、公司环境,堡垒机window server 2008环境
2、软件应用,C#、前端React/vue
3、部署模式,前后端分离每两台机器进行负载均衡,如70/71(前端服务器)、113/114(接口服务器),测试环境服务器:168(前端服务器)、48(API服务器)
4、假设这几台服务器都在同一个局域网,相互可以访问

测试环境部署jenkins模式:
第一步,在本地开发环境安装jenkins,如localhost:8080,使用花生壳内网穿透作为webhook配置在github上
第二步,在168服务器上部署FTP站点,接受jenkins上传的项目部署包
第三部,在jenkins上创建任务,提交到github后会自动构建,然后打包上传到168服务器指定站点
以上操作都是好的,且能正常运行!如图

但我现在有一些问题:
问题1、当我在本地jenkins上执行任务的的时候,构建前操作的备份bat脚本,其实是在本地执行而不是服务器上。我要如何解决此问题如:

@echo off
echo 开始备份...
set yy=%DATE:~0,4%
set mm=%DATE:~5,2%
set dd=%DATE:~8,2%
set hh=%time:~0,2% 
set mi=%time:~3,2%
set ss=%time:~6,2%

echo 正在复制"D:\WebSite\txz2020uat\build"文件夹的内容至"D:\BAK"文件夹下......
xcopy "D:\WebSite\txz2020uat\build" "d:\bak\txt2020uat\%yy%%mm%%dd%%hh%%mi%%ss%" /e/I/d/h/r/y
exit
echo 备份完成...

问题2、我现想在jenkins上进行创建任务把站点部署到生产环境70/71上,那我的jenkins是不是分别要在70/71服务器上分别安装然后部署?我觉得这样非常的不科学,是否有其他方式?

回答1:

1、第一步,在WINDOW服务器上安装SSH,见https://www.cnblogs.com/chenmingjun/p/8535067.html 安装成功后如果一直提示密码错误,则需要重启FreeSSH服务

2、第二步,在JENKINS中添加 SSH

3、第三部,在任务中使用SSH进行部署,网站站点会进入当前登录用户根目录下 如 C:\Users\Administrator ;

3.1 先执行站点备份,再把当前站点发布

C:/Users/Administrator/txz2020uat/bak.bat

@echo off
echo 开始备份...
set yy=%DATE:~0,4%
set mm=%DATE:~5,2%
set dd=%DATE:~8,2%
set hh=%time:~0,2% 
set mi=%time:~3,2%
set ss=%time:~6,2%

echo 正在复制"D:\WebSite\txz2020uat\build"文件夹的内容至"D:\BAK"文件夹下......
xcopy "D:\WebSite\txz2020uat\build" "d:\bak\txt2020uat\%yy%%mm%%dd%%hh%%mi%%ss%" /e/I/d/h/r/y
echo 备份完成,开始发布...
xcopy "C:\Users\Administrator\txz2020uat\build" "D:\WebSite\txz2020uat\build" /e/I/d/h/r/y
echo 发布完成!!  
exit




总结

1、如果需要把局域网内的window服务器统一一个JENKINS管理,则需要在每台服务器上安装window ssh;
2、如果安装window ssh 后,一直登陆提示密码失败,则需要重启FreeSSH服务;
3、服务器上防火墙22端口,出站入站需要打开;
4、创建任务的使用使用publish over ssh进行部署并进行相应的备份等操作;

问题

直接把 C:/Users/Administrator/txz2020uat/bak.bat内容中的脚本放到jenkins中执行会报错,目前不知是何原因,解决后第一时间更新。

  • 以上操作仅限本人在测试环境测试通过,如在生产环境请在运维人员指导下谨慎使用,本人不对以上分享产生的风险负责。


回答2:

当然不用每个服务器都安装啦。关于部署问题,因为看见过没实践过,所以提供个思路哈。可以了解一下jenkins的插件publish over cifs。(https://blog.csdn.net/flyingshuai/article/details/77163376)
我之前看别人用publish over ssh在linux上实现远程部署,windows的话你试下上提到的那个。
思路是jenkins部署在某一台服务器上,再往其他服务器推送文件,并执行相关命令。



回答3:

1 在服务器上执行脚本
2 服务器上部署jenkins多节点