设为首页 收藏本站
查看: 2775|回复: 0

[经验分享] Jenkins持续发布解决方案

[复制链接]

尚未签到

发表于 2018-1-8 14:34:29 | 显示全部楼层 |阅读模式
  持续发布系统架构

  架构大致分为三个部分:开发环境、产品服务器环境、持续集成部署环境
  开发环境配置项目部署文件。集成发布环境获取最新代码执行代码编辑及代码发布。产品服务器支持远程程序发布及备份。
  其中产品服务器需要安装: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安装需求


  • Java运行环境,如Java8
  • .NET Framework 4.5
  • Jenkins for windows2.0以上版本,如:jenkins-2.73.3
  安装程序下载地址:https://jenkins.io/download/


  • IIS8
  • IIS8 Web Deploy插件 (具体安装见实现步骤)
4.5实现步骤

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

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


安装Web Deploy 3.6,确保安装远程代理服务
  注意:Web Deploy版本必须大于2.0
  下载Web Deploy 3.6:https://www.iis.net/downloads/microsoft/web-deploy
  安装全部选项。注意:远程代理服务必须安装。


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管理后台,浏览器输入:http://localhost:8080,进入开始页面,解锁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文件,添加如下的代码:
  

<appSettings>  

    <add key="WeChat:appid" value="456789" xdt:Transform="Replace" xdt:Locator="Match(key)" />  

</appSettings>  

  此时发布项目后,会看到生成的Web.config中,value的值自动变成了456789
  场景2:替换整个appSettings节点中的值
  Debug模式下的appSettings配置:
  但发布到Release模式时,我需要替换所有节点的值,那么只需要打开Web.release.config,添加如下的代码:
  

<appSettings xdt:Transform="Replace">  

    <add key="WeChat:appid" value="456789" />  

    <add key="WeChat:secret" value="secret20170630" />  

</appSettings>  

  此时发布项目后,会看到生成的Web.config中,所有节点的值都被替换了
  场景3:替换connectionStrings节点某个数据库连接
  Debug模式下的appSettings配置:
  

<connectionStrings>  

    <add name="myDB" connectionString="Data Source=.;Initial Catalog=DebugDBName;User>  

</connectionStrings>  

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

<connectionStrings>  

    <add name="myDB" connectionString="Data Source=.;Initial Catalog=ReleaseDBName;User>  
xdt:Transform="Replace" xdt:Locator="Match(name)"/>
  

</connectionStrings>  

  此时发布项目后,会看到生成的Web.config中,数据库名字已经被替换了
  场景4:移除某个属性
  默认生成的Web.config中,有如下配置:
  

<system.web>  

    <authentication mode="None" />  

    <compilation debug="true" targetFramework="4.5" />  

    <httpRuntime targetFramework="4.5" />  

</system.web>  

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

<system.web>  

    <compilation xdt:Transform="RemoveAttributes(debug)" />  

</system.web>  

  此时发布项目后,会看到生成的Web.config中,属性debug="true"已经被自动移除
  场景5:修改某个属性的值
  开发环境时,appSettings节点引用了外部的一个配置文件,如下所示:
  

<appSettings configSource="Configs\AppSettings.config" />  

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

<appSettings configSource="Configs\AppSettings.Prd.config" xdt:Transform="SetAttributes(configSource)"/>  

  此时发布项目后,会看到生成的Web.config中,configSource的值已经被自动修改
  本篇博客先总结这5种场景,后续如有其它场景,再持续更新该博客,希望对新人有些帮助,大牛可直接忽略……
  如你想了解更多的场景,可以看下微软官方文档:https://msdn.microsoft.com/zh-cn/library/dd465326.aspx

附件2 – Jenkins构建出发器规则
  http://blog.csdn.net/wudj810818/article/details/50962920
  http://blog.sina.com.cn/s/blog_71bc9d680102x0n1.html


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://segmentfault.com/a/1190000006166538
  网站自动备份
  https://docs.microsoft.com/en-us/iis/publish/using-web-deploy/web-deploy-automatic-backups
  自动发布网站
  https://weblogs.asp.net/scottgu/automating-deployment-with-microsoft-web-deploy

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432945-1-1.html 上篇帖子: Jenkins安装 CentOS 7上安装Jenkins 下篇帖子: Jenkins 集成 Sonar
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表