关于使用Jenkins作自动化部署入门篇,我已经分别写了两篇文章,无论企业如今是在用.Net Framework仍是.Net Core,无论企业是在用git仍是SVN。其实这两篇文章通常足以交付开发阶段的80%业务了。不足的是这两篇文章都只是将环境html
部署到了单台机器上。因此这篇文章在介绍如何将编译好的源码包传输到其余服务器上时,顺便一块儿将windows服务作持续部署的内容也加入进来,和不少朋友交流后,大部分企业所使用的技术都还相对比较保守,以为颇有必要一块儿谈谈linux
关于windows服务作CI/CD的话题。毕竟在开发新项目的同时也要维护老项目。
Windows+.NetCore+git+IIS在Jenkins上的自动化部署入门。git
Windows+.Net Framework+svn+IIS在Jenkins上的自动化部署入。github
1.Publish Over SSH 在Jenkins插件管理中安装shell
2.Publish Over FTP在Jenkins插件管理中安装windows
3.windows搭建FTP服务器
4.windows安装OpenSSh
app
1.关于在Jenkins中安装Publish Over FTP和Publish Over SSH两款插件,这里就很少介绍了,不懂如何安装的能够看下前两篇文章。ssh
2.在jenkins的系统配置中进行FTP帐号相关配置。ide
2.1 上面的name取任意名称就行,remote Directory为服务器上的目录,这里填写的目录服务器上必定要提早建立好。通常服务器根目录能够这样写“/”。
3. windows上搭建FTP,这个能够百度。注意的地方时防火墙记开启端口21和20。
4.使用topShelf建立一个.Net Framework服务。
5.新建自由风格项目TestWinservice,进行配置,步骤以下:
5.1代码拉取配置
5.2 构建配置
5.2.1 编译命令说明
/t:Rebuild /p:Configuration=Release /p:VisualStudioVersion=16.0
/p:ExcludeGeneratedDebugSymbol=false
/p:ExcludeXmlAssemblyFiles=false
5.3 FTP文件传输配置
5.4 开始构建,看结果
上图明显看到传输过去4个文件,一切都是成功的,但这时有个问题,传输过去的文件怎么让它自动部署起来,远程怎么执行部署脚本?忽然shit 了,我没考虑周到。因此准备上SSH,固然也能够用 Web Deploy,我以为用Web Deploy有些繁琐,因此放弃。
5.5 windows上安装OpenSSh。
下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases
解压好后打开目录,使用管理员权限执行一下命令
设置服务自动启动并启动服务
记得防火墙规则放行22端口,能够用Xshell工具测试链接。
5.6 Jenkins中配置SSH,和前面在Jenkins中配置FTP是同样的步骤,这里采用帐号方式。
基本上和配置FTP都相似,就不过多解释。
5.7 以前构建项目FTP配置的地方替换成SSH Server,看下图。
执行的脚本逻辑,使用TopShelf建立的windows服务都要以管理员方式运行安装。
::切换到管理员运行命令 cd C:\WINDOWS\system32 e: cd E:\publish\ConsoleService set scrpath=C:\publish\ConsoleService\*.* set dirpath=E:\publish\ConsoleService sc query MhgService | findstr /i "STATE">nul :: 若是服务未安装,则跳过中止服务的步骤 if errorlevel 1 goto NotExist :: 更新windows服务 NetFxConsoleService.exe stop XCOPY %scrpath% %dirpath% /Y /S NetFxConsoleService.exe start if not %ERRORLEVEL% geq 0 goto Error: goto next :NotExist XCOPY %scrpath% %dirpath% /Y /S NetFxConsoleService.exe install NetFxConsoleService.exe start :next echo "MhgService更新成功!" goto :success :error echo "MhgService更新失败!" :success echo 执行完毕,任意键退出 pause >nul exit
注意:上面脚本中我以"cd C:\WINDOWS\system32"方式切换到管理员方式运行脚本在我某一台服务器上是能够安装起来的,在另一台服务器上就会提示要以管理员方式安装服务。因这个问题折腾了许久。后来网上了解到脚本执行中能够获取管理员的权限。请看下面的脚本。
::获取管理员权限 @ECHO OFF setlocal EnableDelayedExpansion color 3e title 服务配置 PUSHD %~DP0 & cd /d "%~dp0"
%1 %2 mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof :runas ::脚本逻辑 e: cd E:\publish\ConsoleService set scrpath=C:\publish\ConsoleService\*.* set dirpath=E:\publish\ConsoleService sc query MhgService | findstr /i "STATE">nul ..................
用这种方式通过测试,目前只有在服务器上双击运行能够安装成功,在Jenkins SSH Server中执行 没有看到服务安装起来。若是有人知道什么缘由能够告诉我。其实还折腾过vbs,也仅仅只是服务器上能够双击运行起来。
在弄Windows服务自动化部署的过程当中,感受在windows中要作CI/CD这些事情,头发真会愈来愈少。若是要玩CI/CD ,有机会尽量项目环境用linux 、.net core 拥抱开源。总之,只有折腾过才能感受到吧。