windows服务+OpenSSH+SVN在Jenkins上的自动化部署进阶篇

简介: 使用jenkins如何将编译好的源码包传输到其他服务器上时,顺便一起将windows服务做持续部署的内容也加入进来

一、简介

关于使用Jenkins做自动化部署入门篇,我已经分别写了两篇文章,不管企业现在是在用.Net Framework还是.Net Core,不管企业是在用git还是SVN。其实这两篇文章一般足以交付开发阶段的80%业务了。不足的是这两篇文章都只是将环境

部署到了单台机器上。所以这篇文章在介绍如何将编译好的源码包传输到其他服务器上时,顺便一起将windows服务做持续部署的内容也加入进来,和很多朋友交流后,大部分企业所使用的技术都还相对比较保守,觉得很有必要一起谈谈

关于windows服务做CI/CD的话题。毕竟在开发新项目的同时也要维护老项目。

Windows+.NetCore+git+IIS在Jenkins上的自动化部署入门。

Windows+.Net Framework+svn+IIS在Jenkins上的自动化部署入。

二、所需环境

1.Publish Over SSH 在Jenkins插件管理中安装

2.Publish Over FTP在Jenkins插件管理中安装

3.windows搭建FTP

4.windows安装OpenSSh

三、安装FTP/SSH环境及Jenkins中配置FTP/SSH进行构建

1.关于在Jenkins中安装Publish Over FTP和Publish Over SSH两款插件,这里就不多介绍了,不懂如何安装的可以看下前两篇文章。

2.在jenkins的系统配置中进行FTP账号相关配置。
1.png
2.1 上面的name取任意名称就行,remote Directory为服务器上的目录,这里填写的目录服务器上一定要提前创建好。一般服务器根目录可以这样写“/”。

  1. windows上搭建FTP,这个可以百度。注意的地方时防火墙记开启端口21和20。

4.使用topShelf创建一个.Net Framework服务。

5.新建自由风格项目TestWinservice,进行配置,步骤如下:

5.1代码拉取配置

2.png
5.2 构建配置
3.png
5.2.1 编译命令说明

/p:Configuration=Release
/p:VisualStudioVersion=16.0
/p:ExcludeGeneratedDebugSymbol=false 
/p:ExcludeXmlAssemblyFiles=false

5.3 FTP文件传输配置
4.png
5.4 开始构建,看结果
4.1.png
上图明显看到传输过去4个文件,一切都是成功的,但这时有个问题,传输过去的文件怎么让它自动部署起来,远程怎么执行部署脚本?突然shit 了,我没考虑周到。所以准备上SSH,当然也可以用 Web Deploy,我觉得用Web Deploy有些繁琐,所以放弃。
5.5 windows上安装OpenSSh。
下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases
5.png
解压好后打开目录,使用管理员权限执行一下命令

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

设置服务自动启动并启动服务

net start sshd

记得防火墙规则放行22端口,可以用Xshell工具测试连接。

5.6 Jenkins中配置SSH,和前面在Jenkins中配置FTP是一样的步骤,这里采用账号方式。
6.png
基本上和配置FTP都类似,就不过多解释。

5.7 之前构建项目FTP配置的地方替换成SSH Server,看下图。
7.png
执行的脚本逻辑,使用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 拥抱开源。总之,只有折腾过才能感觉到吧。

相关文章
|
3月前
|
存储 网络协议 Ubuntu
如何通过内网穿透实现远程访问Linux SVN服务
如何通过内网穿透实现远程访问Linux SVN服务
67 0
|
3月前
|
Apache 项目管理 数据安全/隐私保护
Windows如何安装使用TortoiseSVN客户端并实现公网访问本地SVN Server
Windows如何安装使用TortoiseSVN客户端并实现公网访问本地SVN Server
59 0
|
3月前
|
自然语言处理 Shell 网络安全
Liunx服务器搭建SVN服务,并通过钩子实现代码自动部署
Liunx服务器搭建SVN服务,并通过钩子实现代码自动部署
57 3
|
11月前
|
jenkins Java Shell
容器 & 服务:Jenkins构建实例
这次准备研究容器相关技术,并不仅仅是学习,而是基于项目的实战。而使用容器的几个典型场景之一,就是通过容器构建/部署应用服务,而这与持续继承是密切相关的。我们可以使用jenkins,也可以使用其他持续继承工具,但最终都离不开对这类工具的理解和应用。在后续的学习中,还会有很多与持续继承工具紧密关联的实践案例,也会有很多问题需要深入调研解决。
113 0
|
3月前
|
存储 网络协议 Ubuntu
【SVN内网穿透】远程访问Linux SVN服务(二)
由于文档资料越来越多,将所有资料都存放在自己的电脑上容易混淆,并且也不利于分享。这种情况下,考虑将资料上传SVN统一管理,这样一来其他人也能很方便的查略各种资料。 当SVN安装在局域网内的话,想要远程访问资料库或者代码将会受到限制,为了能从公共网络访问内网SVN资料库,cpolar能很好的解决这一需求,cpolar是一个能把内网服务暴露至公网进行访问的工具。 SVN分为服务端和客户端,服务端主要是做数据资料存储,客户端主要是图形化工具连接服务端获取服务端数据资料,下面介绍在ubuntu系统安装服务端,在通过客户端远程访问。
|
3月前
|
存储 Ubuntu 网络协议
【SVN内网穿透】远程访问Linux SVN服务(一)
由于文档资料越来越多,将所有资料都存放在自己的电脑上容易混淆,并且也不利于分享。这种情况下,考虑将资料上传SVN统一管理,这样一来其他人也能很方便的查略各种资料。 当SVN安装在局域网内的话,想要远程访问资料库或者代码将会受到限制,为了能从公共网络访问内网SVN资料库,cpolar能很好的解决这一需求,cpolar是一个能把内网服务暴露至公网进行访问的工具。 SVN分为服务端和客户端,服务端主要是做数据资料存储,客户端主要是图形化工具连接服务端获取服务端数据资料,下面介绍在ubuntu系统安装服务端,在通过客户端远程访问。
171 0
|
3月前
|
算法 程序员 Apache
Windows下搭建SVN服务器并配置eclipse和idea
Windows下搭建SVN服务器并配置eclipse和idea
116 1
|
10月前
|
Linux 网络安全 数据安全/隐私保护
[技巧]还在使用RDP远程windows?OpenSSH远程win10操作系统!
[技巧]还在使用RDP远程windows?OpenSSH远程win10操作系统!
|
10月前
|
Java jenkins 持续交付
服务搭建篇(十) 使用GitLab+Jenkins搭建CI\CD执行环境 (下) 配置整合
上一篇文章搭建了GitLab+Jenkins的基础环境 , 现在基于搭建好的环境快速的实现CI/CD , 接下来需要在Jenkins中配置一个构建任务。
121 0
|
10月前
|
运维 Devops Java
服务搭建篇(九) 使用GitLab+Jenkins搭建CI\CD执行环境 (上) 基础环境搭建
所以 , 在现代化的大型软件项目中 , 对于开发的要求还是比较高的 , 虽然不会要求像运维老哥那样linux命令熟练到起飞 , 精通各种参数调优 , 安全策略 , 但是基础的运行环境运维的操作也是需要了解的 , 这样才能指导运维老哥进行业务环境部署 , 也就是开发运维一体化。虽然现在有很多工具能够帮助开发人员减少一些复杂的操作,但是开发人员还是需要更多的接触运维的工作
201 0

热门文章

最新文章