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

相关文章
|
1月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
45 5
|
7月前
|
jenkins Java 持续交付
运用Jenkins实现Java项目的持续集成与自动化部署
在新建的Jenkins Job中,我们需要配置源码管理,通常选择Git、SVN等版本控制系统,并填入仓库地址和凭据。接着,设置构建触发器,如定时构建、轮询SCM变更、GitHub Webhook等方式,以便在代码提交后自动触发构建过程。
270 2
|
3月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
3月前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
5月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
107 1
|
5月前
|
Kubernetes jenkins 持续交付
Jenkins 插件生态:提升自动化能力
【8月更文第31天】Jenkins 是一个开源的持续集成/持续交付(CI/CD)平台,广泛应用于软件开发的各个阶段。Jenkins 的一大特色就是其丰富的插件生态系统,这些插件极大地扩展了 Jenkins 的功能,使其能够适应各种各样的应用场景。本文将深入探讨 Jenkins 的插件生态系统,并指导如何选择和配置插件以满足特定需求。
270 1
|
5月前
|
jenkins Linux 持续交付
在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
|
5月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
106 0
|
5月前
|
jenkins Shell 持续交付
自动化部署:使用Jenkins和Docker实现CI/CD
【8月更文挑战第31天】 本文旨在引导读者了解如何通过Jenkins和Docker来实现持续集成和持续部署(CI/CD),从而优化开发流程,提升工作效率。文章将详细介绍配置Jenkins服务器、创建Docker镜像以及设置自动化构建和部署的步骤。通过实际操作案例,我们将展示如何将代码变更快速部署到测试或生产环境,确保软件质量与发布速度的双重保障。
|
5月前
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
564 0