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 拥抱开源。总之,只有折腾过才能感觉到吧。

相关文章
|
9月前
|
Windows
Windows下版本控制器(SVN)-启动服务器端程序
Windows下版本控制器(SVN)-启动服务器端程序
352 4
|
11月前
|
人工智能 API 开发工具
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
GitHub MCP Server是基于Model Context Protocol的服务器工具,提供与GitHub API的无缝集成,支持自动化处理问题、Pull Request和仓库管理等功能。
2203 2
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
|
9月前
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
353 0
|
SQL 关系型数据库 MySQL
【简单无脑】自动化脚本一键安装虚拟机下的MySQL服务
该文章提供了在虚拟机上安装MySQL服务的简化方法,特别是针对新手。作者提供了一个自动化脚本`install_mysql.sh`,使得安装过程更简单。用户需要下载`install.rpm`资源,将其放在指定目录下,然后创建并编辑脚本文件,将提供的代码粘贴进去,通过`chmod u+x`授权,最后运行脚本`./install_mysql.sh [rpm文件路径]`来安装MySQL。文章还附有相关图片说明。
548 1
【简单无脑】自动化脚本一键安装虚拟机下的MySQL服务
|
存储 人工智能 弹性计算
自动化搭建专属 AI 绘图服务
本文介绍了如何使用通义万相AIGC技术和阿里云的计算和存储产品来搭建自己的AI绘画服务。首先,通过创建基础云产品资源和部署AI绘画服务的步骤来开始搭建服务。然后,介绍了模板的原理和内容,以及ROS编排引擎的作用。接下来,详细介绍了AI绘画服务的一键部署过程,包括定义参数、模板的编写和ROS的使用。最后,提到了应用运行环境的搭建和自定义应用页面的方法。通过ROS的自动化部署,用户可以方便快捷地拥有自己的AI绘画服务。
|
Linux 持续交付 Apache
在Linux中通过ansible自动化部署apache服务
【7月更文挑战第11天】Linux中用Ansible自动化部署Apache服务:1. 确保Ansible已安装;2. 在`/etc/ansible/hosts`配置目标主机,如\[webservers\] server1 server2;3. 编写Playbook `apache_deploy.yml`更新系统并安装、启动Apache;4. 执行`ansible-playbook apache_deploy.yml`。适用于快速部署至多台服务器,减少配置错误和成本。
249 0
|
Apache 项目管理 数据安全/隐私保护
Windows如何安装使用TortoiseSVN客户端并实现公网访问本地SVN Server
Windows如何安装使用TortoiseSVN客户端并实现公网访问本地SVN Server
408 0
|
弹性计算 运维 Shell
自动化安装并配置自定义服务
【4月更文挑战第30天】
217 0
|
机器学习/深度学习 人工智能 自然语言处理
服务行业自动化
服务行业自动化
375 1

热门文章

最新文章