• 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%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 项下:
    20191115-05-config-ssh.png

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

    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

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

    参考

    jenkins 配置 ssh插件

  • 相关阅读:
    如何使用 @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面
    看不懂 ASP.NET 相册上传代码
    asp.net判断是1.1还是2.0主要由Code*属性来解决,判断规则如下:
    引号看不懂
    GridView的行删除事件 //取当前行的Id
    <Columns></Columns>中间的是列集合
    DropDownList1.SelectedIndex = 0 DropDownList1处于位选择任何选项的状态下
    是一个查询语句 查询ZhuanJia表里面id=输入id的数据
    验证码图片的解释
    get和post区别:
  • 原文地址:https://www.cnblogs.com/ricolee/p/devops-jenkins-netcore.html
Copyright © 2020-2023  润新知