重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
前言
企业线上环境是.NET Framework,自然使用Windows Server平台。现在需求是要对.NET项目进行自动化持续集成,免得每次手动发布,一台台机器登录,那种痛苦干过的都懂得,繁琐、效率低下、误操作等等。而.Net与Jenkins的结合使用目前要达到完全自动化还是有局限性的,关键是Windows环境,各种命令无法向Linux方便。.NET Core可能会好一些。现有的没办法,得上。
基本组合是Jenkins + Gitlab + Msbuild。实现代码提交、编译、部署。
成都网站设计、做网站,成都做网站公司-创新互联建站已向1000多家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。
"E:\Program Files (x86)\Tools\nuget.exe" restore "E:\jenkins-workspace\APIDataBM-test\BM.BMData.Web\BM.BMData.sln" -ConfigFile "C:\Users\Administrator\AppData\Roaming\NuGet\NuGet.Config" -NoCache
其中Nuget restore命令是获取项目需要的程序包,解决包的依赖问题。
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目录
8) 项目config配置
项目各个环境配置集中存储于Gitlab某个仓库中,开发需对配置更改直接Gitlab中更改,方便统一管理,并对某些敏感信息进行过滤,配置文件安全性增加了。
Windows batch command的bat文件内容如下:
@echo off
cd /d E:\git-config\config-public
git checkout dev
git pull origin dev
echo 选择部署的服务器IP: %1
xcopy E:\git-config\config-public\test\GroupAPIData\AB\%1 E:\jenkins-workspace\APIDataBK\TEST\AB /exclude:E:\Python-scripts\test\exclude.txt /s /e /h /y
@echo offnul
其中变量名表示方式Linux和Windows系统平台方式有区别:
Windows:%BUILD_ENV% %变量名%
Linux:${BUILD_ENV} ,也可直接使用 $BUILD_ENV
从Git Lab仓库中,pull下某个分支的最新配置文件。然后在本地的git config目录下copy配置文件到项目中,其中exclude配置指定无需copy的文件,如隐藏的.gitkeep文件等。
注:运行Jenkins程序需改成系统administrator账户权限,默认是本地系统账户(system),否则执行到git pull命令是报类似权限问题。
9) 参数化构建
发布构建的服务器是多台情况下,这里选择使用项目参数化方式,Jenkins中找到"This project is parameterized"项,选择“choice parameter”,填写好名称(这个会作为参数后面使用到)、选项(这里根据实际环境用IP)、描述。如下图:
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
配置完成后,Jenkins上点击构建。
3) Python脚本实现方式
winRM服务是windows server下PowerShell的远程管理服务。Python脚本可通过连接winRM模块操作windows命令行。
3.1配置winRM服务
在被控制windows server上winRM服务操作:
查看winRM服务状态,默认都是未启动状态,下面命令执行后无任何结果输出,需执行后续步骤进行开启。
> winrm enumerate winrm/config/listener
配置winRM服务启动
> winrm quickconfig
查看windows的winrm service listener
> winrm e winrm/config/listener
winrm service配置auth
> winrm set winrm/config/service/auth @{Basic="true"}
配置winrm service 加密方式为允许非加密
> winrm set winrm/config/service @{AllowUnencrypted="true"}
3.2配置python脚本
Job配置项构建中,增加构建步骤->Execute Windows batch command
Python脚本如下:
import winrm
import os
import sys
import time
env = os.getenv("ENV")
print('选择发布构建的服务器ENV是:', env)
if env == '10.10.10.10':
win2008r2 = winrm.Session('http://10.10.10.10:5985/wsman',auth=('deploy_user','xxxxxx'))
ip = win2008r2.run_cmd('ipconfig | findstr "10.10.10.10"')
app_list = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe list app')
app_stop = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe stop site DataapiBM')
backup = win2008r2.run_cmd('xcopy D:\\Web-prd\\DataapiBM D:\\Web-prd\\backup\\DataapiBM-%date:~8,2%月%date:~11,2%日%time:~0,2%时%time:~3,2%分%time:~6,2%秒\ /exclude:D:\\Web-prd\\backup\\exclude.txt /ryhs')
rsync_code = win2008r2.run_cmd('C:\\cwRsync\\bin\\rsync.exe -vzrtopg --numeric-ids --progress --port=1873 --password-file=/cygdrive/c/cwRsync/passwd.txt
配置完成后,点击“Build with Parameters”,选择下拉框中对应的服务器节点进行构建。
查看构建情况,通过控制台查看:
控制台输出构建详细的log信息,如果构建成功,会有个蓝色的圈圈,并且控制台最后输出“Finished: SUCCESS”信息,表示此Job构建成功。相应的如果构建失败,控制台也会输出报错信息。
自此,项目自动化构建完成。当然其中有些环节还需继续优化。测试比较下来,应用发布这步操作,winRM+Python方式比较灵活方便。