windows服务+OpenSSH+SVN在Jenkins上的自动化部署进阶篇-阿里云开发者社区

开发者社区> 课间一起牛> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
svn配置钩子自动更新web目录
实现SVN与WEB同步,可以CO一个出来,也可以直接用自动更新web目录的方法,我们要在svn版本库中配置钩子来实现,就是创建一个post-commit的配置文件,对其进行简单的配置,简简单单的四步就可以实现Linux下SVN自动更新web目录配置。
745 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9494 0
linux/unix下svn自动更新post-commit hook failed (exit code 255)
linux/unix下svn自动更新post-commit hook failed (exit code 255) www.111cn.net 编辑:kp12345 来源:转载 svn是一款同步工具了,但让svn自动更新之后发现svn无法使用了,下面我们一起来看看svn出错问题解决办法吧。
911 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13177 0
svn 提交代码 自动过滤技巧
操作   在用svn管理版本时,有时希望在提交到服务器时,能过滤掉指定后缀名的所有文件,或指定名称的文件夹、文件名。   常见的文件夹名称和文件名如下: bin obj debug temppe *.
818 0
SVN:自动加锁
              SVN虽然好用,但是特别容易产生冲突,于是,我们就会怀念起用TFS的日子。其实,在SVN中,我们可以检出时选择获取锁,这样别人就不能更改你获取的文件了,提交时再释放锁。
895 0
使用Python实现自动化截取Windows系统屏幕
自动化截屏有什么用呢?为什么要实现自动化截屏呢?其实,在某些特殊的场景下,记录电脑使用者的操作还是很有必要的。比如,银行记录柜员日常操作当作日后规范流程的数据,或者是日后存证;再比如,作为家长记录孩子使用电脑的情况等。
901 0
svn服务器配置以及自动同步到web服务器
感觉再不用svn就真的老了。 安装 yum install subversion 新建repo mkdir -p /opt/svn/myrepo svnadmin create /opt/svn/myrepo 修改repo的配置文件 vim /opt/svn/myrepo/conf/svnserve.
812 0
+关注
课间一起牛
人怕不动,脑怕不用
32
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载