背景
阿里云测试环境一台,带宽1M跟不上,Jenkins安装一个插件耗时很长,于是想在本地搭建Jenkins服务,将生成的安装文件同步到目标服务器上。
技术点有:
-
win10:本地环境是win10,测试环境是windown server 2012 R2 -
NET Core:部署版本是2.1.1,部署在IIS上 -
Jenkins: 安装jenkins就不介绍了 -
bat:需要懂一点批处理命令 -
·
Jenkins插件: -
Gogs plugin -
Publish Over SSH
所需插件自行安装
Jeknin配置流程
创建Item

选择Gogs源码地址
这里三个是必填项:仓库地址,登陆凭据,代码分支;

Gogs是基于Git的这里和Github的仓库地址是一样的。
这里需要一个登陆凭证用于拉取代码,提供的凭证类型有很多,有用户名账户、SSH、以及秘钥等,这里选的是用户名和密码凭证:

分支格式就是*/xxxx,这里用的是develop
构建触发器

这里选择的时候当Gogs仓库收到push推送的时候触发构建。
如果没有这个选项,需要安装
Gogs plugin插件
由于Jenkins是本地搭建的,Gogs无法将消息推送到,所以使用了内网穿透。
uTools 提供免费的内网穿透,很好用!
效果类似这样:

构建
jenkin提供的脚本很多,其它的没用过,这里用到是Excute Windows batch command这个选项

脚本命令如下:

// 清空xxxx文件夹所有文件
rd "%WORKSPACE%publishxxxx"
//如果不存在创建文件夹
if not exist "%WORKSPACE%publishxxxx" md "%WORKSPACE%publishxxxx"
//生成项目打包文件到指定文件夹下
dotnet publish "%WORKSPACE%xxxxxxxxxxxx.csproj" -o "%WORKSPACE%publishxxxx"
//当前目录是在%WORKSPACE%下的,需要cd指定具体操作目录
cd publish/xxxx
//这里是将生成的项目文件使用7-zip打包了,所以需要删除上次遗留的压缩文件,不然会将上次打包文件也打包进去
del /a/f/q xxxx.api.zip
//删除webconfig,不想copy到目标服务器上
del /a/f/q web.config
//压缩项目文件
"C:Program Files7-Zip7z.exe" a "xxxx.api.zip" "**"
之所以删除
web.config,dotnet publish命令不知道怎么在web.config下生成相应的环境变量,比如目标环境是Staging.
构建后操作
构建好发布包后,一般是部署了,拷贝到web服务下。
这里目标服务器是远程不在局域网内,之前使用过很多种方式都没成功,比如:psexec,net use命令。最终只有SSH完成部署。
这里的目标服务器是预先配置好的,在jenkins的系统配置里的SSH 项下:

选择好目标服务后,设置必要的参数:

Transfer Set需要填写选项:
Source files:需要拷贝的目标文件Remove prefix:移除前缀,如果不移除,会在目标服务器将前缀作为目录生成Remote directory:目标及其需要安装SSH,这里是选择SSH可以操作的远程目录。Exec command:将文件拷贝到目标机器后,可以执行命令,这里的命令测试时候好像只能执行一条,如果需要批量执行还是填写bat地址吧。
本文拷贝完成后需要执行停止应用程序池和重启功能,如下:
C:WindowsSystem32inetsrvappcmd.exe stop apppool /apppool.name:"xxx"
"C:Program Files7-Zip7z.exe" x "C:UsersAdministratorjenkinsxxx.zip" -aoa -o"C:iis-publishjenkinsxxx"
C:WindowsSystem32inetsrvappcmd.exe start apppool /apppool.name:"xxx"
ECHO 服务器脚本执行完毕
第二行是7-zip的压缩命令:
x:后面的参数源压缩文件;-o:是解压到目标文件夹;-aoa:是强制覆盖重复的文件;
Tip
"C:Program Files7-Zip7z.exe"这个命令要加引号,不然出错!为什么这样没搞清楚!stop apppool /apppool.name:"xxx"命令name后面不能有空格,不然也会出错的!踩过的坑!