Jenkins实现SVN .NET持续集成(二)

  很早就完成了Jenkins的搭建和预研,但是久久没有应用到实际项目中,今年年初Jenkins陆续投入到实际项目中使用,也暴露出一些问题,如:

  1.使用FTP传输文件时,总是遇到文件被占用,无法替换文件

  2.如何做留痕发布

  3.传输文件过多导致每次发布缓慢


Jenkins构建项目流程

  拉取项目源码 ——> 调用命令还原 NuGet 包 ——> 调用配置文件生成对应的发布包 ——> 通过 SSH 发布到服务器

一、搭建SSH服务器

  由于我们服务器用的windows,所以选择了freeSSHd来做我们ssh服务(带有可视化界面,方便操作)

  下载freeSSHd并安装,安装过程中程序会询问是否创建密钥,是否创建Windows服务,直接点是即可,启动程序(最好用管理员启动),找到SSH选项卡将Listen address 选择为当前主机IP,为ssh添加一个专用账户(users选项卡)

  

  Authentucation 选项卡配置一下公钥目录

  ServerStatus 选项卡,将SSH服务启动

  SFTP 选项卡,可以配置传输文件的根路径,注意该路径不能存在中文

  注意:如果不能正常启动

                 检查端口是否占用

                 服务已经运行了,手动关掉即可

  安装putty

  使用puttygen生成密钥对

  将Public key for pasting into OpenSSH authorized_keys file框中的公钥拷贝到文本文档中,注意这段文件只有一行,不要分成多行。然后将这个文本文档重命名成ftpuser,不要有扩展名。最后将这个文本文件拷贝到freeSSHD的公钥目录下

  注意:公钥的文件名称和你要使用的user名相同

  

  点击Save private key将私钥保存,然后拿到我们的Jenkins服务器中

  添加用户也可以选择用户名密码验证的方式

  

  配置Jenkins上的SSH

       添加插件Publish Over SSH

       在Configure System中添加SSH server

 

二、拉取SVN代码

  建议创建Jenkins专用的svn用户,用于获取代码

  svn仓储地址后使用 @版本号的形式可以获取指定版本的代码

三、拉取SVN代码

  因为有的项目是不上传Packages目录,需要依赖package.config来还原依赖,所以需要调用一下NuGet的还原命令

  在项目的构建节点,选择Execute Windows batch command

  执行命令"C:\Program Files (x86)\NuGet\NuGet.exe" restore  "%WORKSPACE%\test.sln"

四、调用配置文件生成发布包

  在项目的构建节点,增加一个构建步骤,然后选择Build a Visual Studio project or solution using MSBuild

  MSBuild Version选择msbuildv4.0(在Jenkins全局工具配置中进行配置)

  

  填写要编译的工程文件【相对路径和绝对路径都可以】

  输入命令生成发布包

/t:ReBuild
/p:DeployOnBuild=true;Configuration=Release;PublishProfile=JenkinsProfile;VisualStudioVersion=15.0

  

  JenkinsProfile是在项目中配置的用于指定到的目录,具体创建方法如下:

  右键工程项目,点发布,就可以找进行新建发布配置文件了,这是我的配置:

<?xml version="1.0" encoding="utf-8"?>
<!--
此文件由 Web 项目的发布/打包过程使用。可以通过编辑此 MSBuild 文件
自定义此过程的行为。为了解与此相关的更多内容,请访问 https://go.microsoft.com/fwlink/?LinkID=208121。 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>..\Build\API</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <PrecompileBeforePublish>True</PrecompileBeforePublish>
    <EnableUpdateable>True</EnableUpdateable>
    <DebugSymbols>False</DebugSymbols>
    <WDPMergeOption>DonotMerge</WDPMergeOption>
  </PropertyGroup>
</Project>

五、将发布文件进行压缩

  增加一个构建步骤,并选择Execute Windows batch command

  输入命令将发布文件压缩

echo 开始压缩 %WORKSPACE%\Build 下的发布文件
if not exist %WORKSPACE%\BuildZip (
        md %WORKSPACE%\BuildZip
        echo %WORKSPACE%\BuildZip 文件不存在,已创建该文件!
    ) else (
        echo %WORKSPACE%\BuildZip 文件已存在,删除上一版压缩文件!
        del  %WORKSPACE%\BuildZip\*.*   /s /q
)
E:
cd E:\7zSfx\
"E:\7zSfx\CreateSfx.bat" %WORKSPACE%\Build %WORKSPACE%\BuildZip BuildZip%SVN_REVISION%

  在Jenkins服务器的E盘放了一个7zSfx,通过7z命令将发布文件压缩为一个exe文件,输出格式为BuildZip+svn版本号.exe,如 BuildZip12345.exe

  7zSfx附件,由公司一个大神整理,下载

六、通过SSH将发布文件传输至服务器

  增加构建后操作,选择Send build artifacts over SSH 并选择配置好的SSH

  通过SSH停用对应的IIS站点

  

  传输文件

  

  启动对应的IIS站点

  

 

posted @ 2020-03-16 17:27  Yu2  阅读(394)  评论(1编辑  收藏  举报