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
AI 代码解读

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
AI 代码解读

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

net start sshd
AI 代码解读

记得防火墙规则放行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
AI 代码解读

注意:上面脚本中我以"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
..................
AI 代码解读

用这种方式经过测试,目前只有在服务器上双击运行可以安装成功,在Jenkins SSH Server中执行 没有看到服务安装起来。如果有人知道什么原因可以告诉我。其实还折腾过vbs,也仅仅只是服务器上可以双击运行起来。

四、总结

在弄Windows服务自动化部署的过程中,感觉在windows中要做CI/CD这些事情,头发真会越来越少。如果要玩CI/CD ,有机会尽可能项目环境用linux 、.net core 拥抱开源。总之,只有折腾过才能感觉到吧。

相关文章
|
1天前
|
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Gti 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Gti 服务
11 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Gti 服务
Ansible与Jenkins:自动化工具的对比
Ansible和Jenkins是自动化领域的两大巨头。Ansible专注于配置管理和任务自动化,采用无代理架构,使用YAML定义配置,具有幂等性和可扩展性。Jenkins则擅长持续集成和持续交付(CI/CD),支持丰富的插件生态系统,适用于自动化构建、测试和部署。两者各有优势,Ansible适合配置管理与大规模部署,Jenkins则在CI/CD方面表现出色。结合使用可创建更强大的自动化工作流,提升团队生产力和软件质量。选择工具时应根据具体需求决定。
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
178 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
74 5
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
249 4
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
130 9
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
167 3
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
72 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等