博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jenkins持续发布解决方案
阅读量:4981 次
发布时间:2019-06-12

本文共 9135 字,大约阅读时间需要 30 分钟。

持续发布系统架构

 

 

 

 

架构大致分为三个部分:开发环境、产品服务器环境、持续集成部署环境

开发环境配置项目部署文件。集成发布环境获取最新代码执行代码编辑及代码发布。产品服务器支持远程程序发布及备份。

其中产品服务器需要安装:IIS .NET Framework Web Deploy等工具;集成发布服务器需要安装IIS .NET Framework Web Deploy IIS Source Code Client Java Jenkins等工具。开发环境需要安装Visual Studio

2)方案设计

 用开源软件Jenkins作为持续发布工具。Jenkins使用MIT License可用于使用、复制、修改。Jenkins支持多个项目的持续构建与发布,并不限定开发语言。Jenkins支持插件式扩展。

 

1       解决方案

4.1发布流程图

 

 

4.2适用范围

1)此文档当前版本使用于发布Web站点,不支持发布失败后回滚。

2)此解决方案只适用持续发布。持续集成需自行设置。

4.3安装需求

  1. Java运行环境,如Java8
  2. .NET Framework 4.5
  3. Jenkins for windows2.0以上版本,如:jenkins-2.73.3

安装程序下载地址:

  1. IIS8
  2. IIS8 Web Deploy插件 (具体安装见实现步骤)

4.5实现步骤  

1.5.1    产品服务器环境 - 配置IIS发布程序

确保Web服务器->管理工具->管理服务已安装

 

安装Web Deploy 3.6,确保安装远程代理服务

注意:Web Deploy版本必须大于2.0

下载Web Deploy 3.6:

安装全部选项。注意:远程代理服务必须安装。

 

 

IIS管理服务->启用远程连接

 

注意:

1)这里可以根据实际情况配置标识凭据、端口、IP地址限制等选项。此处选择Windows凭据或IIS管理器凭据。

2)启用远程连接后可使用如下命令行重启msdepsvc、wmsvc服务,以确保服务器已正常安装、相应配置生效。

net stop msdepsvc

net start msdepsvc

net stop wmsvc

net start wmsvc

另外可以在IIS管理器中查看“管理服务”、“管理服务委派”是否安装成功。

网站->启用Web Deploy发布

选择启用Web Deploy发布的网站,右键鼠标,选择部署->启用Web Deploy发布。如:选择AutoDepTest网站,并启用Web Deploy发布

保持默认设置,点击【设置】按钮

 

1.5.2    产品服务器环境 - 配置IIS备份程序

开启Web Deploy网站自动备份功能

1)已管理员打开windows的PowerShell 执行下面的命令转到“%programfiles%\IIS\Microsoft Web Deploy V3\scripts”目录

cd "C:\Program Files\IIS\Microsoft Web Deploy V3\scripts"

2)检查当前PowerShell的执行策略,如果是Restricted 那么需要将它改为 RemoteSigned

Get-Executionpolicy

  //如果输出为:Restricted 那么执行下面的命令进行修改执行策略

Set-Executionpolicy RemoteSigned

  注意:上面命令会询问你是否要更改执行策略,你根据提示输入Y按回车

 

  关于PowerShell的其他设置可以参照官方的文档:https://technet.microsoft.com/zh-CN/library/hh847748.aspx

3)执行下面的命令加载脚本:

. .\BackupScripts.ps1

  注意:如果加载成功,将没有任何反应,如果加载失败将会有红色的提示语句;

4)通过TurnOn-Backups命令允许管理员开启或关闭站点的自动备份功能,这相当于一个总闸开关。

允许配置所有的备份功能

TurnOn-Backups -On $true

  禁用配置所有的备份功能

TurnOn-Backups -On $false

5)打开所有站点或者指定站点的自动备份功能

# 打开所有站点的备份功能

Configure-Backups -Enabled $true

# 打开foo站点的备份功能

Configure-Backups -SiteName "foo" -Enabled $true

    自动备份设置已经完成,关于跟多的自动备份设置请参照官方文档:https://www.iis.net/learn/publish/using-web-deploy/web-deploy-automatic-backups

             配置实例:

 

配置网站自动备份参数

上一步相当与开启了Web Deploy自动备份及设置全局的备份参数。还可以单独为某个网站指定具体的参数。

选择网站,选择配置编辑器

 

节点选择system.webServer.wdeploy.backup

 

 

       可以设置具体的参数。如:是否开启备份、备份的数量、备份路径等

 

 

备份路径{sitePathParent}代表网站文件路径的父目录

{siteName}_snapshots为备份文件命名规则

备份文件实例:

D:\AutoDeployment\Web为网站目录,则备份文件目录为:D:\AutoDeployment\AutoDepTest_snapshots

 

 

msdeploy_2017_12_04_07_35_25.zip为生成的备份文件

 

 

1.5.3    开发环境 - 配置VS开发环境

项目配置及配置转换配置

如果项目发布时需要根据不能环境生成不同的配置文件,则首先完成各个环境的配置转换定义。如:Debug环境、Staging环境、Release环境

如果不需求配置转换可跳过此步骤。

 

 

Debug模式下的appSettings配置:

发布到Release环境时,需要将value值修改为456789,那么只需要打开Web.Release.config文件,添加如下的代码:

 

 

具体替换规则参考附件一

生成发布文件

选择发布项目->选择Publish

 

 

选择自定义发布,并创建发布文件名称

 

 

Publish Method选择Web Deploy,配置其他属性。服务器、站点名称、用户/密码可使用服务器管理员帐号。

 

 

Destination URL为Web服务器启用Web Deploy时创建的“发布服务器连接URL”

下一步选择配置文件

 

 

完成发布VS生成发布文件

 

1.5.4    持续集成部署环境 – 安装基础程序

1).NET Framework 4.5

2)Web Deploy 3.6

参考4.5.1产品服务器环境 – 配置IIS发布程序章节。

1.5.5    持续集成部署环境 - 安装Jenkins

 

 确定Jenkins服务已启动

 启动Jenkins管理后台,浏览器输入:,进入开始页面,解锁Jenkins,输入初始管理员密码

 

 

 输入密码后,点击【继续】,进入“自定义Jenkins”,选择Select suggested plugins

 

安装Plugins

 

 

下一步创建用户,如:robin

 

 

点击【Start using Jenkins】进入控制面板

1.5.6    持续集成部署环境 - 配置Jenkins

配置插件

进入Jenkins后台控制面板,点击【系统管理】

 

 

选择管理插件

选择可用插件, MSBuild Plugin,和batch task plugin,点击【直接安装】

 

 

配置项目

创建一个新任务

 

 

输入项目名称 如:AutoDepDemo,并选择“构建一个自由风格的软件项目”,点击【OK】

 

 

进入项目配置页面

 

 

完成构建触发器配置。具体构建触发器规则参考附件2

配置构建->增加构建步骤->选择执行Windows batch command

 

 

 我们增加两个构建脚本,并点击【保存】。一个用于发布网站的备份,一个用于网站的发布。具体脚本参考4.5.7构建脚本章节。

 

注意:如果数据库或其他程序发布可增加数据库备份或发布的脚本。

1.5.7    持续集成部署环境 -构建脚本

4.5.7.1              Website备份脚本

@ECHO off

CLS

CD\

 

::CD C:\Program Files\IIS\Microsoft Web Deploy V3

 

@REM ------------------------根据实际情况修改--------------------------------

 

::WEB服务器名称

SET webName="×××××××××"

::管理员密码

SET psd="****************"

::发布站点名称

SET pubSite=AutoDepTest

 

msdeploy.exe -verb:sync -source:backupManager,computername=%webName%,userName="administrator",password=%psd% -dest:backupManager=%pubSite%,computername=%webName%,userName="administrator",password=%psd%

 

::PAUSE

 

脚本说明:

脚本中黑体字部分需要根据实际发布情况修改。其他部分不变。

 

4.5.7.2              Website发布脚本

@ECHO off

CLS

CD\

 

CD %VS140COMNTOOLS%

 

@call :GetVSCommonToolsDir

@if "%VS140COMNTOOLS%"=="" goto error_no_VS140COMNTOOLSDIR

 

@call "%VS140COMNTOOLS%VCVarsQueryRegistry.bat" 32bit No64bit

 

@REM These variables are set by VCVarsQueryRegistry.bat and need to be cleared

@set WindowsSdkDir=

@set WindowsSDK_ExecutablePath_x64=

@set WindowsSDK_ExecutablePath_x86=

@set Framework40Version=

@set FrameworkDIR32=

@set FrameworkVersion32=

@set FSHARPINSTALLDIR=

@set VSINSTALLDIR=

@set VCINSTALLDIR=

 

@rem Add path to MSBuild Binaries

@if exist "%ProgramFiles%\MSBuild\14.0\bin" set PATH=%ProgramFiles%\MSBuild\14.0\bin;%PATH%

@if exist "%ProgramFiles(x86)%\MSBuild\14.0\bin" set PATH=%ProgramFiles(x86)%\MSBuild\14.0\bin;%PATH%

 

@goto end

 

@REM -----------------------------------------------------------------------

:GetVSCommonToolsDir

@set VS140COMNTOOLS=

@call :GetVSCommonToolsDirHelper32 HKLM > nul 2>&1

@if errorlevel 1 call :GetVSCommonToolsDirHelper32 HKCU > nul 2>&1

@if errorlevel 1 call :GetVSCommonToolsDirHelper64  HKLM > nul 2>&1

@if errorlevel 1 call :GetVSCommonToolsDirHelper64  HKCU > nul 2>&1

@exit /B 0

 

:GetVSCommonToolsDirHelper32

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "14.0"') DO (

    @if "%%i"=="14.0" (

        @SET VS140COMNTOOLS=%%k

    )

)

@if "%VS140COMNTOOLS%"=="" exit /B 1

@SET VS140COMNTOOLS=%VS140COMNTOOLS%Common7\Tools\

@exit /B 0

 

:GetVSCommonToolsDirHelper64

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" /v "14.0"') DO (

    @if "%%i"=="14.0" (

        @SET VS140COMNTOOLS=%%k

    )

)

@if "%VS140COMNTOOLS%"=="" exit /B 1

@SET VS140COMNTOOLS=%VS140COMNTOOLS%Common7\Tools\

@exit /B 0

 

@REM -----------------------------------------------------------------------

:error_no_VS140COMNTOOLSDIR

@echo ERROR: Cannot determine the location of the VS Common Tools folder.

@goto end

 

:end

 

@REM ------------------------根据实际情况修改--------------------------------

::解决方案路径

SET slnPath="C:\Users\dben\Documents\Visual Studio 2015\Projects\WebDep\WebDep.sln"

::发布文件名称

SET pubFileName=WebDepDebug.pubxml

::配置文件类型Release Or Debug

SET config=Release

::远程WebDeploy密码

SET password=********************

::Build并发布

MSBUILD %slnPath%  /p:DeployOnBuild=true /p:PublishProfile=%pubFileName% /p:Configuration=%config% /p:Password=%password% /p:AllowUntrustedCertificate=true

 

::PAUSE

 

 

脚本说明:

脚本中黑体字部分需要根据实际发布情况修改。其他部分不变。

1.5.8    持续集成部署环境 -构建项目

构建项目

完成构建脚本配置可手动点击【立即构建】或根据触发规则自动构建,完成手动或自动发布。

 

 

构建完成可查看Output

       确定网站已备份,程序已更新到最新版本。

       如:AutoDepTest网站的备份文件

 

 

多项目构建

Jenkins可以创建多个项目并进行构建。可以查看多个项目的构建状态。

 

 

1.5.9    持续集成部署环境 – 其他配置

源代码管理工具

项目配置中可以配置源代码管理获取最新代码

 

 

通知邮件

系统管理->系统设置中可以配置SMTP服务器

 

 

 附件1 – VS配置替换

https://www.cnblogs.com/zwwhnly/p/7094024.html

 

开发项目中,有些可能会改变的值,如是否记录日志,记录日志路径等,我们都会配置在Web.config的<appSettings></appSettings>节点,也比如数据库的连接,我们会配置在Web.config的<connectionStrings></connectionStrings>节点。

但是每个开发都会遇到部署的情况,部署的环境可能还不止一套,每个环境连接的数据库都不同,appSettings节点中配置的值可能也不同,如果每次都靠手动去修改这些值,效率非常低下,那么问题来了,如何改变这种效率低下的情况呢?

其实强大的微软早就为我们准备好了方案,就是利用xdt:Transform和xdt:Locator这两个属性。

不知道大家有没有发现,新建一个MVC项目后,配置文件Web.config有两个嵌套的文件,一个是Web.Debug.config,一个是Web.Release.config,前者是Debug模式使用,后者是Release(发布)模式使用

 

那么下面就分场景讲解一下如何利用xdt:Transform,xdt:Locator来提升效率

场景1:替换appSettings节点中的某个值

Debug模式下的appSettings配置:

 

但发布到Release环境时,我需要将value值修改为456789,那么只需要打开Web.Release.config文件,添加如下的代码: 

    
 

此时发布项目后,会看到生成的Web.config中,value的值自动变成了456789

 

 

场景2:替换整个appSettings节点中的值

Debug模式下的appSettings配置:

 

 

但发布到Release模式时,我需要替换所有节点的值,那么只需要打开Web.release.config,添加如下的代码:

    
    
 

此时发布项目后,会看到生成的Web.config中,所有节点的值都被替换了

 

 

场景3:替换connectionStrings节点某个数据库连接

Debug模式下的appSettings配置:

    
 

但发布到Release模式时,我需要替换数据库名为ReleaseDBName,那么只需要打开Web.release.config,添加如下的代码:

    
 

此时发布项目后,会看到生成的Web.config中,数据库名字已经被替换了

  场景4:移除某个属性

默认生成的Web.config中,有如下配置:

    
    
    
 

但我们发版时,往往会移除属性debug="true",此时,打开Web.release.config,添加如下的代码:

    
 

此时发布项目后,会看到生成的Web.config中,属性debug="true"已经被自动移除

 

场景5:修改某个属性的值

开发环境时,appSettings节点引用了外部的一个配置文件,如下所示:

但在发布到生产环境时,我们需要引用另外一个配置文件,那么此时只需要替换下configSource属性即可,打开Web.release.config,添加如下的代码:

此时发布项目后,会看到生成的Web.config中,configSource的值已经被自动修改

 

本篇博客先总结这5种场景,后续如有其它场景,再持续更新该博客,希望对新人有些帮助,大牛可直接忽略……

如你想了解更多的场景,可以看下微软官方文档:

附件2 – Jenkins构建出发器规则

 

 

 

Build after other projects are built在其他项目构建完成后再进行构建。

这里又分三种情况:

①Trigger only if build is stable:其他项目构建成功

②Trigger even if the build is unstable:其他项目不稳定

③Trigger even if the build fails:其他项目构建失败

 

Build periodically周期进行构建

例如:0 4 * * *  (每天凌晨4点必须构建一次源码)

Poll SCM根据SCM软件的版本号,定时检查源码变更。如果有更新,则checkout最新code,然后执行构建动作。

例如:*/10 * * * *  (每10分钟检查一次源码变化,如果有更新才build)

 

 

1.Build periodic ally与Poll SCM

Build periodic ally:周期性的执行,源码有没有变化都会执行

比如配置:H/60 * * * *  这样配置就会每60分钟构建一次,不管SVN有没有新源码

Poll SCM:定时行的执行,源码有变化才会执行

比如配置:*/10 * * * *  这样配置就会10分钟去检查svn是否有新源码,有就checkout,构建,没有就继续去潇洒,10分钟后再回来检查。

 

2.构建触发器可以配置构建的时间,如果需要定时构建,可以选择 Build periodically,日程表参数解释如下:

第一个参数代表的是分钟 minute,取值 0~59;

第二个参数代表的是小时 hour,取值 0~23;

第三个参数代表的是天 day,取值 1~31;

第四个参数代表的是月 month,取值 1~12;

最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

3.下面为举例:

每10分钟构建一次:H/10 * * * *   或*/10 * * * *

每天8点构建一次:0 8 * * *

每天8点~17点,两小时构建一次:0 8-17/2 * * *

周一到周五,8点~17点,两小时构建一次:0 8-17/2 * * 1-5

1-6月中每月1号、30号各构建一次:H H 1,30 1-6 *

附件3 – 参考文献

谈谈持续集成,持续交付,持续部署之间的区别

网站自动备份

自动发布网站

转载于:https://www.cnblogs.com/facethesea/p/7978598.html

你可能感兴趣的文章
最优比例生成树最优比率生成树 01分数规划问题
查看>>
ARM函数调用过程分析
查看>>
css样式重置方案 -解决浏览器差异
查看>>
distpicker使用记录
查看>>
[BZOJ3282]Tree(LCT)
查看>>
最终版详细设计
查看>>
GenePix Pro 3.0
查看>>
html移动端 -- meta-模板 + rem
查看>>
js-控制浏览器和移动端的后退按钮 . popstate
查看>>
[QT][SQLITE]学习记录二 日期查询
查看>>
hdu 4455 Substrings
查看>>
web传参
查看>>
Python 查找binlog文件
查看>>
Git——如何将本地项目提交至远程仓库
查看>>
Convert CString to std::string
查看>>
3 - Selenium元素定位和操作
查看>>
GCC C语言 DLL范例,含源码
查看>>
冲刺第一天(补发)
查看>>
iOS开发Xcode中切换显示语言实现国际化
查看>>
C++模板学习
查看>>