Loading

NET Core+win10+Jenkins+Gogs+open ssh持续集成

背景

阿里云测试环境一台,带宽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

20191115-01-createitem.png

选择Gogs源码地址

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

20191115-02-git-source.png

Gogs是基于Git的这里和Github的仓库地址是一样的。

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

20191115-02-git-authentication.png

分支格式就是*/xxxx,这里用的是develop

构建触发器

20191115-03-trigger.png

这里选择的时候当Gogs仓库收到push推送的时候触发构建。

如果没有这个选项,需要安装Gogs plugin插件

由于Jenkins是本地搭建的,Gogs无法将消息推送到,所以使用了内网穿透。

uTools 提供免费的内网穿透,很好用!

效果类似这样:

20191115-03-trigger-gogs-gouzi.png

构建

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

20191115-04-build-option.png

脚本命令如下:

20191115-04-build.png

// 清空xxxx文件夹所有文件
rd "%WORKSPACE%\publish\xxxx"   

//如果不存在创建文件夹
if not exist "%WORKSPACE%\publish\xxxx" md  "%WORKSPACE%\publish\xxxx"

//生成项目打包文件到指定文件夹下
dotnet publish "%WORKSPACE%\xxxx\xxxx\xxxx.csproj" -o "%WORKSPACE%\publish\xxxx"

//当前目录是在%WORKSPACE%下的,需要cd指定具体操作目录
cd publish/xxxx

//这里是将生成的项目文件使用7-zip打包了,所以需要删除上次遗留的压缩文件,不然会将上次打包文件也打包进去
del /a/f/q  xxxx.api.zip

//删除webconfig,不想copy到目标服务器上
del /a/f/q  web.config

//压缩项目文件
"C:\Program Files\7-Zip\7z.exe" a "xxxx.api.zip" "**"  

之所以删除web.config,dotnet publish命令不知道怎么在web.config下生成相应的环境变量,比如目标环境是Staging.

构建后操作

构建好发布包后,一般是部署了,拷贝到web服务下。

这里目标服务器是远程不在局域网内,之前使用过很多种方式都没成功,比如:psexec,net use命令。最终只有SSH完成部署。

这里的目标服务器是预先配置好的,在jenkins的系统配置里的SSH 项下:
20191115-05-config-ssh.png

选择好目标服务后,设置必要的参数:
20191115-05-open-ssh.png

Transfer Set需要填写选项:

  • Source files:需要拷贝的目标文件
  • Remove prefix:移除前缀,如果不移除,会在目标服务器将前缀作为目录生成
  • Remote directory:目标及其需要安装SSH,这里是选择SSH可以操作的远程目录。
  • Exec command:将文件拷贝到目标机器后,可以执行命令,这里的命令测试时候好像只能执行一条,如果需要批量执行还是填写bat地址吧。

本文拷贝完成后需要执行停止应用程序池和重启功能,如下:

C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"xxx"  
"C:\Program Files\7-Zip\7z.exe"  x "C:\Users\Administrator\jenkins\xxx.zip"  -aoa -o"C:\iis-publish\jenkins\xxx"  
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"xxx"  
ECHO 服务器脚本执行完毕

第二行是7-zip的压缩命令:

  • x:后面的参数源压缩文件;
  • -o:是解压到目标文件夹;
  • -aoa:是强制覆盖重复的文件;

Tip

  1. "C:\Program Files\7-Zip\7z.exe"这个命令要加引号,不然出错!为什么这样没搞清楚!
  2. stop apppool /apppool.name:"xxx"命令name后面不能有空格,不然也会出错的!踩过的坑!

参考

jenkins 配置 ssh插件

posted @ 2019-11-15 14:36  牧白  阅读(413)  评论(0编辑  收藏  举报