前言
企业线上环境是.NET Framework,自然使用Windows Server平台。现在需求是要对.NET项目进行自动化持续集成,免得每次手动发布,一台台机器登录,那种痛苦干过的都懂得,繁琐、效率低下、误操作等等。而.Net与Jenkins的结合使用目前要达到完全自动化还是有局限性的,关键是Windows环境,各种命令无法向Linux方便。.NET Core可能会好一些。现有的没办法,得上。
基本组合是Jenkins + Gitlab + Msbuild。实现代码提交、编译、部署。
-
安装环境与流程
1) Jenkins是java产品,需安装JDK8,Windows server 2012环境。
2) .NET项目需.Net Framework支持,这里选择Framework4.6.1。Nuget解决依赖。构建工具Msbuild,基于VS2019下的Msbuild。以上都基于Windows server 2012。刚开始选择server 2008R2,后面构建打包这种问题,困扰2天,果断换。
3) 代码仓库GitLab。选用Centos7.6。
4) .Net项目持续集成流程: - Jenkins操作
1) Jenkins具体安装略,傻瓜式下一步...安装完成。下载见官方网站:https://jenkins.io/download/ ,找到downlaod下载,这里项目基于.Net Freamwork,Jenkins中构建需编译.net程序,方便编译,选择安装Windows版本。
这里Jenkins安装前,需配置好JDK环境。
2) 插件安装
Jenkins安装好后,进入系统管理->插件管理,安装好Msbuild、Git、ftp
3) 新建Job
4) Job设置
设置保留构建的天数,和构建最大数量
自定义workspace工作空间
5) 获取Git仓库代码
指定Git仓库代码项目分支,这里为测试环境,统一使用dev分支构建。
主要有以下配置项:
Repositories URL:git方式获取代码路径,走ssh协议。
Credentials:授权登录信息,添加凭据。这里使用SSH方式(用户名+私钥方式)登录。需先Jenkins配置SSH方式登录Gitlab。
Branches to build:指定分支。
6) 构建程序配置
6.1安装插件后,进入系统管理->Global Tool Configuration,找到MSbuild配置选项。
这里Path to MABuild配置VS下的MSBuild。不使用C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild。
6.2 构建前从Gitlab中拉取项目config配置和Nuget依赖。创建Windows batch command。
创建的Windows batch command如下:cd /d E:\git-config\config-public git pull xcopy E:\git-config\config-public\TEST E:\Publish-web /s /e /h /y /exclude:E:\git-config\config-public\excld.txt
从git config目录下copy配置文件到项目中,其中exclude配置指定无需copy的文件,如隐藏的.gitkeep文件等。
注:运行Jenkins程序需改成系统administrator账户权限,默认是本地系统账户(system),否则执行到git pull命令是报类似权限问题。
6.3 安装配置Nuget,解决项目文件依赖,获取程序需要的包。E:\Program Files (x86)\Tools\nuget.exe" restore "E:\jenkins-workspace\APIDatatest\BM.BMData.Web\BM.BMData.sln
7) 构建
选择“Build a Visual Studio project or solution using MSBuild”配置如下:
MSBuild Version:之前Global Tool Configuration中配置的版本。
MSBuild Build File:要构建的解决方案sln文件,也可以是项目.csproj文件。注意都是相对工作的路径。
Command Line Arguments:
/t:Rebuild 重新生成
/p:Configuration=Debug 生成Debug模式
/t:resolveReferences
/p:WebProjectOutputDir="E:\Publish-web\APIData-Test\web" 构建后sln输出目标目录
/p:OutputPath="E:\Publish-web\APIData-Test\web\bin" 输出目标的bin目录
配置完成后,点击构建。
控制台输出构建详细的log信息,如果构建成功,会有个蓝色的圈圈,并且控制台最后输出“Finished: SUCCESS”信息,表示此Job构建成功。相应的如果构建失败,控制台也会输出报错信息。 - 发布应用
应用构建成功后,接下来是将构建项目的输出目录copy到应用服务器相应的站点目录中,由于目标的应用服务器都是windows系统,因此无法像linux系统一样通过ssh远程命令操作。目前提供两种解决方案,使用Ftp直接上传到应用服务器以及使用Windows下的Rsync方式。
1) Ftp方式
1.1 需先Jenkins上安装Ftp插件。同时在发布的目标应用服务器安装配置好Ftp服务。
安装插件后,进入系统管理->Global Tool Configuration,找到FTP repository hosts配置选项。
Porfile Name:随便取个名字,后面Job配置会应用到。
hostname:Ftp主机名(端口号默认21)
TimeOut:设置timeout
Root Repository Path:Ftp服务端跟/目录
User Name:Ftp用户名
Password:Ftp密码
1.2 项目配置
构建后操作->增加构建后操作步骤->Publish artifacts to FTP
FTP site:全局中配置的
Source:选择发布包路径,即项目构建输出的目录。
Remote directory:放到远程目标路径(相对于Ftp根目录的路径)
配置完成后,点击构建。
2) Rsync方式
2.1 Windows server环境配置使用rsync命令。
Jenkins的Job配置项构建中,增加构建步骤->Execute Windows batch command
2.2 配置rsync
Windows server中使用rsync命令需要安装配置cwRsync,有Server端和Client端。现在官网已经不免费提供cwRsync Server服务了。应用服务器端安装cwRsync Server,Jenkins服务器配置rsync的Client端。具体cwRsync Server与Client安装略。
cwRsync Server默认安装下,cwRsync Server端的C:\Program Files (x86)\ICW\rsync.conf文件配置如下:uid = 0 gid = 0 use chroot = false strict modes = false hosts allow = * log file = rsyncd.log port = 873 [APIData] path = /cygdrive/e/Web/APIData-test/web secrets file = /cygdrive/c/Program Files (x86)/ICW/rsyncd.secrets list = true auth users = rsync_user read only = false
cwRsync Client端的rsync命令在Jenkins中的配置如下:
"C:\Program Files (x86)\cwRsync\bin\rsync.exe" -avzP --progress --delete --port=873 --password-file="/cygdrive/c/Program Files (x86)/cwRsync/passwd.txt" /cygdrive/e/Publish-web/APIData-Test2/web/ rsync_user@10.10.10.53::APIData
配置完成后,点击构建。
来源:51CTO
作者:Blue后花园
链接:https://blog.51cto.com/10874766/2452817