日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【Hello CC.NET】巧用模板简化配置

發布時間:2025/3/21 asp.net 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Hello CC.NET】巧用模板简化配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  從 《【Hello CC.NET】CC.NET 實現自動化集成》 到 《【Hello CC.NET】自動化發布時 Web.config 文件維護》 ,大神在評論里提到的方案還沒有一一去研究對比,調研的 deadline 已經逼近,CC.NET 的落地提上日程。

  經過兩周的努力,終于成功部署了兩個項目,由于兩個項目的人員配置/開發流程/項目架構不一樣,部署的方案也有些差異。過程中碰到這樣那樣的坑,都是用最快想到的笨方法填坑,然后繼續往下走。落地的姿勢并不完美,但總算有了一些看得到的成果。   

  落地面臨的第一個問題是,ccnet.config 配置比較繁復:太多的 hardcode;相同的 xml 節點內容比較多,尤其在配置多個項目的時候,策略變更時,需要改動的地方比較多。本文將講述 ccnet.config 模板化的思路。

  

  目標

  • 提取全局性的配置,避免到處 Hardcode
  • 簡化各個節點的配置,便于維護

?

  1.全局變量

<cc:define CIWebSite="http://vm-caihaihua/CCNET/"/><cc:define CIDirectory="C:\CI\"/><cc:define MsBuildPath="C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"/><cc:define MsTestPath="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"/><cc:define SVNPath="C:\Program Files (x86)\VisualSVN Server\bin\svn.exe"/><cc:define FCReplacerPath="C:\CI\Tools\FCReplacer.exe"/><cc:define DFCopierPath="C:\CI\Tools\DFCopier.exe"/><cc:define name="MsBuildXmlLogger"><logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger></cc:define>

  

變量名稱描述
CIWebSiteCC.NET配套網站的地址http://vm-caihaihua/CCNET/
CIDirectory工作目錄C:\CI\
MsBuildPathMsBuild 程序的地址C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
MsTestPathMsTest 程序的地址C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe
SVNPathSvn 程序的地址C:\Program Files (x86)\VisualSVN Server\bin\svn.exe
FCReplacerPathFCReplacer 程序的地址C:\CI\Tools\FCReplacer.exe
DFCopierPathDFCopier 程序的地址C:\CI\Tools\DFCopier.exe
MsBuildXmlLogger日志 Logger 的配置<logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>

 

  2.默認值

<!-- 默認配置 --><cc:define QueuePriority="1"/><cc:define KeepLastXBuilds="300"/><!-- Email 相關 --><cc:define EmailDomain="company.com"/><cc:define EmailSendHost="smtp.live.com"/><cc:define EmailSendPort="25"/><cc:define EmailUseSSL="FALSE"/><cc:define EmailSendUser="ci"/><cc:define EmailSendPassword="********"/><cc:define CIEmailUser="ci"/><cc:define PMEmailUser="pm_1"/><cc:define name="EmailTesterList"><user group="tester" name="tester_1" address="tester_1@$(EmailDomain)"/><user group="tester" name="tester_2" address="tester_2@$(EmailDomain)"/></cc:define><!-- Trigger 相關 --><cc:define ModificationTriggerIntervalSeconds="300"/><cc:define ModificationDelaySeconds="60"/><cc:define ProjectTriggerIntervalSeconds="30"/><cc:define ProjectTriggerStatus="Success"/><cc:define DailyBuildTriggerTime="18:00"/><!-- SVN 相關 --> <cc:define SVNUsername="ci"/><cc:define SVNPassword="********"/><cc:define SvnCleanCopy="FALSE"/><cc:define name="SourceControl"> </cc:define><!-- Task 相關 --><cc:define TestTimeout="1800"/><cc:define CopyTimeout="60"/><cc:define ReplaceTimeout="60"/><cc:define BuildConfiguration="DEBUG"/><cc:define PublishConfiguration="RELEASE"/>

?

    

變量名稱描述
QueuePriority?項目在隊列中的優先級?1
KeepLastXBuilds?保留最后的 X 個構建結果?300
EmailDomain?公司郵箱域名?company.com
EmailSendHost?郵箱服務器地址?smtp.live.com
EmailSendPort?郵箱服務器端口?25
EmailUseSSL?是否啟用 SSL?TRUE
EmailSendUser?發送郵箱的帳號?ci
EmailSendPassword?發送郵箱賬戶的密碼?******
?CIEmailUser?CI 維護人員的郵箱賬戶?ci
?PMEmailUser?部門經理的郵箱賬戶?pm_1
?EmailTesterList?測試人員郵箱列表

?<user group="tester" name="tester_1" address="tester_1@$(EmailDomain)"/>

?<user group="tester" name="tester_2" address="tester_2@$(EmailDomain)"/>

?ModificationTriggerIntervalSeconds?源代碼監測的頻率(秒)?300
?ModificationDelaySeconds?源代碼變更觸發構建任務的延遲時間(秒)?60
?ProjectTriggerIntervalSeconds?依賴項目的狀態監測頻率(秒)?30
?ProjectTriggerStatus?依賴項目的設定狀態?SUCCESS
?DailyBuildTriggerTime?每日構建的時間點?18:00
?SVNUsername?SVN 帳號?ci
?SVNPassword?SVN 帳號的密碼?******
?SvnCleanCopy?下載源代碼前是否先刪除本地源代碼?FALSE
?SourceControl?源代碼管理的配置?
?TestTimeout?運行測試的超時時間(秒)?1800
?CopyTimeout?拷貝文件的超時時間(秒)?60
?ReplaceTimeout?替換文件內容的超時時間(秒)?60
?BuildConfiguration?編譯的配置?DEBUG
?PublishConfiguration?發布網站的配置?RELEASE

  

  

  3.通知模板

<cc:define name="EmailPublisher"><email mailhost="$(EmailSendHost)" mailport="$(EmailSendPort)"mailhostUsername="$(EmailSendUser)@$(EmailDomain)" mailhostPassword="$(EmailSendPassword)"from="$(EmailSendUser)@$(EmailDomain)"useSSL="$(EmailUseSSL)" includeDetails="true"><!--郵件標題配置--><subjectPrefix>$(EmailSubject)</subjectPrefix><subjectSettings><!-- Success/Broken/StillBroken/Fixed/Exception--><subject buildResult="Success" value="${CCNetProject} Build result"/><subject buildResult="Fixed" value="${CCNetProject} Build result"/><subject buildResult="Broken" value="${CCNetProject} Build result"/><subject buildResult="StillBroken" value="${CCNetProject} Build result" /><subject buildResult="Exception" value="${CCNetProject} Build result" /></subjectSettings><!--收件人配置--><converters><rcgexConverter find="$" replace="@$(EmailDomain)"/></converters><modifierNotificationTypes><notificationType>Failed</notificationType><notificationType>Fixed</notificationType></modifierNotificationTypes><users><user group="pm" name="$(PMEmailUser)" address="$(PMEmailUser)@$(EmailDomain)"/><user group="ci" name="$(CIEmailUser)" address="$(CIEmailUser)@$(EmailDomain)"/><user group="tl" name="$(TeamLeader)" address="$(TeamLeader)@$(EmailDomain)"/><cc:EmailTesterList/></users><groups><group name="pm"><notifications><!--Always/Success/Change/Fixed/Failed/Exception --><notificationType>Change</notificationType></notifications></group><group name="ci"><notifications><notificationType>Exception</notificationType></notifications></group><group name="tl"><notifications><notificationType>Success</notificationType><notificationType>Fixed</notificationType><notificationType>Failed</notificationType></notifications></group><group name="developer"><notifications><notificationType>Success</notificationType><notificationType>Fixed</notificationType><notificationType>Failed</notificationType></notifications></group><group name="tester"><notifications><notificationType>Fixed</notificationType></notifications></group></groups></email></cc:define>

?

  模板變量:

變量名稱描述默認值是否必填
EmailDomain公司郵箱域名?company.com?N
EmailSendHost郵件服務器的地址?smtp.live.com?N
EmailSendPort郵件服務器的端口?25?N
EmailUseSSL是否使用 SSL(取決于郵件服務器的配置)?TRUE?N
EmailSendUser郵件通知的發送帳號?CI?N
EmailSendPassword郵件通知的發送帳號的密碼?******?N
PMEmailUser部門經理的郵箱帳號?pm_1?N
CIEmailUserCI 環境維護人員的郵箱帳號?ci?N
TeamLeader項目組負責人的郵箱帳號,各個項目組配置不同??Y
EmailSubject郵件通知的前綴??Y

  

?  例子:  

<publishers><!--郵件通知--><cc:EmailPublisher/></publishers>

?

?

?  4.觸發器模板

  (1)源代碼檢測:每隔一段時間檢查源代碼,如果有變更,則觸發構建過程

<!-- Triggers:ModificationTrigger/DailyBuildTrigger/ProjectTrigger--><cc:define name="ModificationTrigger"><!--源碼修改觸發--><intervalTrigger seconds="$(ModificationTriggerIntervalSeconds)" buildCondition="IfModificationExists" /></cc:define>

?

  模板變量:

變量名稱描述默認值是否必填
ModificationTriggerIntervalSeconds源碼監測頻率(秒)600N

  

  例子:

<triggers><cc:ModificationTrigger/></triggers>

?

?

  (2)每日構建:每天到設定的時間點觸發構建過程

<cc:define name="DailyBuildTrigger"><!--每日構建--><scheduleTrigger time="$(DailyBuildTriggerTime)" buildCondition="ForceBuild"><weekDays><!--<weekDay>Sunday</weekDay>--><weekDay>Monday</weekDay><weekDay>Tuesday</weekDay><weekDay>Wednesday</weekDay><weekDay>Thursday</weekDay><weekDay>Friday</weekDay><!--<weekDay>Saturday</weekDay>--></weekDays></scheduleTrigger></cc:define>

?

  模板變量:

變量名稱描述默認值是否必填
DailyBuildTriggerTime每日構建的時間點18:00N

  

  例子:

<triggers><cc:DailyBuildTrigger/></triggers>

?

?

  (3)項目依賴:每隔一段時間檢查指定項目的構建結果,如果等于指定值,則觸發構建過程

<cc:define name="ProjectTrigger"><projectTrigger serverUri="tcp://vm-caihaihua:21234/CruiseManager.rem" project="$(ListenToProject)"><triggerStatus>$(ProjectTriggerStatus)</triggerStatus><innerTrigger type="intervalTrigger" seconds="$(ProjectTriggerIntervalSeconds)" buildCondition="ForceBuild" /><!--<triggerFirstTime>True</triggerFirstTime>--></projectTrigger></cc:define>

?

  模板變量:

變量名稱描述默認值是否必填
ProjectTriggerIntervalSeconds監測依賴項目的頻率(秒)30N
ProjectTriggerStatus設定的構建結果SUCCESSN
ListenToProject依賴的項目名稱?Y

  

  例子:

<triggers><cc:ProjectTrigger ListenToProject="TestProject-Servcies"/></triggers>

?

?

  5.源代碼管理模板

<!-- SourceControl: SVNSourceControl --><cc:define name="SVNSourceControl"><sourcecontrol type="svn"><trunkUrl>$(SVNTrunkURL)</trunkUrl><executable>$(SVNPath)</executable><workingDirectory>$(CIDirectory)$(WorkingDirectory)</workingDirectory><username>$(SVNUsername)</username><password>$(SVNPassword)</password><revert>True</revert><cleanCopy>$(SvnCleanCopy)</cleanCopy><cleanUp>True</cleanUp><deleteObstructions>True</deleteObstructions></sourcecontrol></cc:define>

?

  模板變量:

變量名稱描述默認值是否必填
SVNUsernameSvn 賬戶,需要項目的 checkout 權限
ciN
SVNPasswordSvn 賬戶的密碼
******N
SvnCleanCopy下載源代碼前是否先刪除本地源代碼FALSEN
SVNTrunkURL項目的 Svn 路徑
?Y

?

  例子:

<project><cc:SVNSourceControl SVNTrunkURL="https://vm-caihaihua/svn/testproject/services/trunk/"SvnCleanCopy="False"/></project>

?

?

  6.任務模板

  (1)文件內容替換

  

<cc:define name="Replace"><exec><executable>$(FCReplacerPath)</executable><buildArgs><cc:Files/><cc:Rules/></buildArgs><buildTimeoutSeconds>$(ReplaceTimeout)</buildTimeoutSeconds><successExitCodes>0</successExitCodes></exec></cc:define>

?

  模板變量:

變量名稱描述默認值是否必填
ReplaceTimeout替換的超時時間(秒)60N
Files需要替換的文件列表?Y
Rules替換的規則
?Y

?

?  例子:

?

<tasks><!-- Config --><cc:Replace><cc:define name="Files"> /file=$(CIDirectory)$(WorkingDirectory)WcfService\Web.config /file=$(CIDirectory)$(WorkingDirectory)ManagerTest\App.config /file=$(CIDirectory)$(WorkingDirectory)WcfServiceTest\App.config</cc:define><cc:define name="Rules"> /from=Catalog=(?![^;\s']*_log[;\s']+)(=?[^;\s']*)/to=Catalog=testproject_trunk /from=Source=(=?.*?)(=?[;\s']+)/to=Source=vm-caihaihua$2 /from=http://(=?[^\/]+)/(=?\w+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$2.svc /from=http://(=?.*?)/(?!SSO)(=?[^\/]+)/(=?\w+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$3.svc /from=http://(=?.*?)/SSO/(=?\w+).svc/to=http://vm-caihaihua/testproject_trunk_ci/SSO/$2.svc</cc:define></cc:Replace></tasks>

?

  (2)項目編譯

<cc:define name="Build"><msbuild><executable>$(MsBuildPath)</executable><buildArgs>/t:build /p:configuration=$(BuildConfiguration)</buildArgs><cc:MsBuildXmlLogger/><workingDirectory>$(CIDirectory)$(WorkingDirectory)</workingDirectory><projectFile>$(SolutionPath)</projectFile></msbuild></cc:define>

?

  模板變量:

變量名稱描述默認值是否必填
BuildConfiguration編譯的配置DEBUGN
SolutionPath項目的相對路徑?Y

?

?  例子:

?

<tasks><!-- Build --><cc:Build SolutionPath="TestProjectService.sln"/></tasks>

?

?

  (3)網站發布

  

<cc:define name="Publish"><msbuild><executable>$(MsBuildPath)</executable><workingDirectory>$(CIDirectory)$(WorkingDirectory)</workingDirectory><projectFile>$(SolutionPath)</projectFile><buildArgs>/t:ResolveReferences;Compile/t:_CopyWebApplication/p:Configuration=$(PublishConfiguration)/p:WebProjectOutputDir=$(CIDirectory)$(To)/p:OutputPath=$(CIDirectory)$(To)\bin</buildArgs></msbuild></cc:define>

?

?

  模板變量:

變量名稱描述默認值是否必填
PublishConfiguration編譯的配置RELACEN
SolutionPath項目的相對路徑?Y
To目標文件夾的相對路徑?Y

?

?  例子:

<tasks><!-- Publish --><cc:Publish SolutionPath="WcfService\WcfService.csproj"To="$(PublishDirectory)WcfService" /></tasks>

?

?

  (4)文件拷貝

<cc:define name="Copy"><exec><executable>$(DFCopierPath)</executable><buildArgs>/from=$(CIDirectory)$(From) /to=$(CIDirectory)$(To)</buildArgs><buildTimeoutSeconds>$(CopyTimeout)</buildTimeoutSeconds><successExitCodes>0</successExitCodes></exec></cc:define>

?

?

  模板變量:

變量名稱描述默認值是否必填
CopyTimeout拷貝的超時時間(秒)60N
From需要拷貝的文件夾的相對路徑?Y
To目標文件夾的相對路徑?Y

?

?  例子:

<tasks><!-- Copy--><cc:Copy From="$(WorkingDirectory)WcfServiceTo="$(PublishDirectory)WcfService"/></tasks>

?

?

  (5)自動化測試

<cc:define name="RunTest"><exec><executable>$(MSTestPath)</executable><baseDirectory>$(CIDirectory)$(WorkingDirectory)</baseDirectory><buildArgs>/testcontainer:$(TestContainerPath)</buildArgs><buildTimeoutSeconds>$(TestTimeout)</buildTimeoutSeconds></exec></cc:define>

?

?

  模板變量:

變量名稱描述默認值是否必填
TestTimeout測試的超時時間(秒)1800N
TestContainerPath測試列表的相對路徑?Y

?

?  例子:

<tasks><!--Run Test--><cc:RunTest TestContainerPath="ManagerTest\bin\Debug\ManagerTest.dll"/><cc:RunTest TestContainerPath="WcfServiceTest\bin\Debug\WcfServiceTest.dll"/></tasks>

?

?

?  7.項目模板

<cc:define name="Project"><project name="$(ProjectName)" queue="$(Queue)" queuePriority="$(QueuePriority)"><webURL>$(CIWebSite)server/local/project/$(ProjectName)/ViewProjectReport.aspx</webURL><!--標簽--><labeller type="dateLabeller"/><artifactDirectory>$(CIDirectory)$(ArtifactDirectory)</artifactDirectory><!--項目的目錄--><workingDirectory >$(CIDirectory)$(WorkingDirectory)</workingDirectory><!--自動運行時間間隔--><triggers><cc:TriggerList/></triggers><!--對源碼修改延遲處理時間間隔--><modificationDelaySeconds>$(ModificationDelaySeconds)</modificationDelaySeconds><maxSourceControlRetries>5</maxSourceControlRetries><!--源代碼管理(SVN)--><cc:SourceControl/><state type="state" directory="$(CIDirectory)$(StateDirectory)"/><publishers><modificationHistory onlyLogWhenChangesFound="true"/><statistics/><xmllogger/><artifactcleanup cleanUpMethod="KeepLastXBuilds" cleanUpValue="$(KeepLastXBuilds)" /><!--郵件通知--><cc:EmailPublisher/></publishers><tasks><cc:TaskList/></tasks></project></cc:define>

?

?

  模板變量:

變量名稱描述默認值是否必填
QueuePriority項目在隊列里的優先級1N
KeepLastXBuilds保存最后的 X 個構建結果300N
ModificationDelaySeconds源代碼變更觸發構建任務的延遲時間60N
SourceControl源代碼配置?N
Queue項目從屬的隊列?Y
ProjectName項目名稱?Y
StateDirectory構建日志的保存目錄?Y
WorkingDirectory項目的工作目錄,即源代碼的保存路徑?Y
ArtifactDirectory構建結果的存放目錄?Y
TriggerList觸發器配置列表?Y
TaskList任務列表?Y

  

?  例子:

  TestProject 包括 Wcf Service 項目和 AdminWeb 項目

  (1)Wcf Service

  a.??自動化部署

    • 自動獲取源代碼
    • 源代碼監測及每日構建
    • 修改配置文件中的數據庫連接字符串及服務引用地址
    • Debug 編譯整個解決方案
    • Release 發布 Service 到 CI 環境

  b.?自動化測試

    • 與a使用同一個工作目錄(即源代碼)
    • 監測自動化部署過程,如果成功則觸發自動化測試
    • 運行 ManagerTest 和 ServiceTest

  (2) AdminWeb

自動化部署

  • 自動獲取源代碼
  • 源代碼監測及每日構建
  • 修改配置文件中的數據庫連接字符串及服務引用地址
  • Debug 編譯整個解決方案
  • Release 發布 AdminWeb 到 CI 環境
<!-- TestProject: Service 項目 --><queue name="TestProject" duplicates="ApplyForceBuildsReAdd" /><cc:Project ProjectName="TestProject-Servcies"Queue="TesProjectt"WorkingDirectory="TestProject\SourceCode\service_trunk\"ArtifactDirectory="TestProject\Artifact\service\"StateDirectory="TestProject\State\"PublishDirectory="TestProject\Publish\"EmailSubject="[CI-TestProjectService]"ModificationDelaySeconds="30"TeamLeader="caihaihua"><cc:define name="SourceControl"><cc:SVNSourceControl SVNTrunkURL="https://vm-caihaihua/svn/testproject/services/trunk/"SvnCleanCopy="False"/></cc:define><cc:define name="TriggerList"><cc:ModificationTrigger/><cc:DailyBuildTrigger/></cc:define><cc:define name="TaskList"><!-- Config --><cc:Replace><cc:define name="Files">/file=$(CIDirectory)$(WorkingDirectory)WcfService\Web.config/file=$(CIDirectory)$(WorkingDirectory)ManagerTest\App.config/file=$(CIDirectory)$(WorkingDirectory)WcfServiceTest\App.config</cc:define><cc:define name="Rules">/from=Catalog=(?![^;\s']*_log[;\s']+)(=?[^;\s']*)/to=Catalog=service_trunk_ci/from=Source=(=?.*?)(=?[;\s']+)/to=Source=localhost$2/from=http://(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$2.svc/from=http://(=?.*?)/(?!SSO)(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$3.svc/from=http://(=?.*?)/SSO/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/SSO/$2.svc</cc:define></cc:Replace><!-- Build --><cc:Build SolutionPath="TestProjectService.sln"/><!-- Publish --><cc:Copy From="$(WorkingDirectory)WcfService"To="$(PublishDirectory)WcfService"/></cc:define></cc:Project><cc:Project ProjectName="TestProjectServcies-Test"Queue="TestProject"QueuePriority="2"WorkingDirectory="TestProject\SourceCode\service_trunk\"ArtifactDirectory="TestProject\Artifact\test\"StateDirectory="TestProject\State\"EmailSubject="[CI-TestProjectServcie-Test]"ModificationDelaySeconds="30"TeamLeader="caihaihua"><cc:define name="TriggerList"><cc:ProjectTrigger ListenToProject="TestProject-Servcies"/></cc:define><cc:define name="TaskList"><!--Run Test--><cc:RunTest TestContainerPath="ManagerTest\bin\Debug\ManagerTest.dll"/><cc:RunTest TestContainerPath="WcfServiceTest\bin\Debug\WcfServiceTest.dll"/></cc:define></cc:Project><!-- TestProject: AdminWeb 項目 --><cc:Project ProjectName="TestProject-AdminWeb"Queue="TestProject"WorkingDirectory="TestProject\SourceCode\admin_trunk\"ArtifactDirectory="TestProject\Artifact\admin\"StateDirectory="TestProject\State\"PublishDirectory="TestProject\Publish\"EmailSubject="[CI-TestProject-AdminWeb]"TeamLeader="caihaihua"><cc:define name="SourceControl"><cc:SVNSourceControl SVNTrunkURL="https://vm-caihaihua/svn/testproject/adminweb/trunk/"/></cc:define><cc:define name="TriggerList"><cc:ModificationTrigger/><cc:DailyBuildTrigger/></cc:define><cc:define name="TaskList"><!-- Config --><cc:Replace><cc:define name="Files">/file=$(CIDirectory)$(WorkingDirectory)AdminWeb\Web.config</cc:define><cc:define name="Rules">/from=http://(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$2.svc/from=http://(=?.*?)/(?!SSO)(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$3.svc/from=http://(=?.*?)/SSO/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/SSO/$2.svc</cc:define></cc:Replace><!-- Build --><cc:Build SolutionPath="AdminWeb.sln"/><!-- Publish --><cc:Publish SolutionPath="AdminWeb\AdminWeb.csproj"To="$(PublishDirectory)AdminWeb" /></cc:define></cc:Project>

?

完整的 ccnet.config:

<cruisecontrol xmlns:cc="urn:ccnet.config.builder"><!-- 全局配置 --><cc:define CIWebSite="http://vm-caihaihua/CCNET/"/><cc:define CIDirectory="C:\CI\"/><cc:define MsBuildPath="C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"/><cc:define MsTestPath="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"/><cc:define SVNPath="C:\Program Files (x86)\VisualSVN Server\bin\svn.exe"/><cc:define FCReplacerPath="C:\CI\Tools\FCReplacer.exe"/><cc:define DFCopierPath="C:\CI\Tools\DFCopier.exe"/><cc:define name="MsBuildXmlLogger"><logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger></cc:define><!-- Publishers:EmailPublisher--><cc:define name="EmailPublisher"><email mailhost="$(EmailSendHost)" mailport="$(EmailSendPort)"mailhostUsername="$(EmailSendUser)@$(EmailDomain)" mailhostPassword="$(EmailSendPassword)"from="$(EmailSendUser)@$(EmailDomain)"useSSL="$(EmailUseSSL)" includeDetails="true"><!--郵件標題配置--><subjectPrefix>$(EmailSubject)</subjectPrefix><subjectSettings><!-- Success/Broken/StillBroken/Fixed/Exception--><subject buildResult="Success" value="${CCNetProject} ${CCNetBuildDate} Build result"/><subject buildResult="Fixed" value="${CCNetProject} ${CCNetBuildDate} Build result"/><subject buildResult="Broken" value="${CCNetProject} ${CCNetBuildDate} Build result"/><subject buildResult="StillBroken" value="${CCNetProject} ${CCNetBuildDate} Build result" /><subject buildResult="Exception" value="${CCNetProject} ${CCNetBuildDate} Build result" /></subjectSettings>lo<!--收件人配置--><converters><regexConverter find="$" replace="@$(EmailDomain)"/></converters><modifierNotificationTypes><notificationType>Failed</notificationType><notificationType>Fixed</notificationType></modifierNotificationTypes><users><user group="pm" name="$(PMEmailUser)" address="$(PMEmailUser)@$(EmailDomain)"/><user group="ci" name="$(CIEmailUser)" address="$(CIEmailUser)@$(EmailDomain)"/><user group="tl" name="$(TeamLeader)" address="$(TeamLeader)@$(EmailDomain)"/><cc:EmailTesterList/></users><groups><group name="pm"><notifications><!--Always/Success/Change/Fixed/Failed/Exception --><notificationType>Change</notificationType></notifications></group><group name="ci"><notifications><notificationType>Exception</notificationType></notifications></group><group name="tl"><notifications><notificationType>Success</notificationType><notificationType>Fixed</notificationType><notificationType>Failed</notificationType></notifications></group><group name="developer"><notifications><notificationType>Success</notificationType><notificationType>Fixed</notificationType><notificationType>Failed</notificationType></notifications></group><group name="tester"><notifications><notificationType>Fixed</notificationType></notifications></group></groups></email></cc:define><!-- Triggers:ModificationTrigger/DailyBuildTrigger/ProjectTrigger--><cc:define name="ModificationTrigger"><!--源碼修改觸發--><intervalTrigger seconds="$(ModificationTriggerIntervalSeconds)" buildCondition="IfModificationExists" /></cc:define><cc:define name="DailyBuildTrigger"><!--每日構建--><scheduleTrigger time="$(DailyBuildTriggerTime)" buildCondition="ForceBuild"><weekDays><!--<weekDay>Sunday</weekDay>--><weekDay>Monday</weekDay><weekDay>Tuesday</weekDay><weekDay>Wednesday</weekDay><weekDay>Thursday</weekDay><weekDay>Friday</weekDay><!--<weekDay>Saturday</weekDay>--></weekDays></scheduleTrigger></cc:define><cc:define name="ProjectTrigger"><projectTrigger serverUri="tcp://Server12:21234/CruiseManager.rem" project="$(ListenToProject)"><triggerStatus>$(ProjectTriggerStatus)</triggerStatus><innerTrigger type="intervalTrigger" seconds="$(ProjectTriggerIntervalSeconds)" buildCondition="ForceBuild" /><!--<triggerFirstTime>True</triggerFirstTime>--></projectTrigger></cc:define><!-- SourceControl: SVNSourceControl --><cc:define name="SVNSourceControl"><sourcecontrol type="svn"><trunkUrl>$(SVNTrunkURL)</trunkUrl><executable>$(SVNPath)</executable><workingDirectory>$(CIDirectory)$(WorkingDirectory)</workingDirectory><username>$(SVNUsername)</username><password>$(SVNPassword)</password><revert>True</revert><cleanCopy>$(SvnCleanCopy)</cleanCopy><cleanUp>True</cleanUp><deleteObstructions>True</deleteObstructions></sourcecontrol></cc:define><!-- Tasks: Replace/Build/Publish/Copy/RunTest --><cc:define name="Replace"><exec><executable>$(FCReplacerPath)</executable><buildArgs><cc:Files/><cc:Rules/></buildArgs><buildTimeoutSeconds>$(ReplaceTimeout)</buildTimeoutSeconds><successExitCodes>0</successExitCodes></exec></cc:define><cc:define name="Build"><msbuild><executable>$(MsBuildPath)</executable><buildArgs>/t:build /p:configuration=$(BuildConfiguration)</buildArgs><cc:MsBuildXmlLogger/><workingDirectory>$(CIDirectory)$(WorkingDirectory)</workingDirectory><projectFile>$(SolutionPath)</projectFile></msbuild></cc:define><cc:define name="Publish"><msbuild><executable>$(MsBuildPath)</executable><workingDirectory>$(CIDirectory)$(WorkingDirectory)</workingDirectory><projectFile>$(SolutionPath)</projectFile><buildArgs>/t:ResolveReferences;Compile/t:_CopyWebApplication/p:Configuration=$(PublishConfiguration)/p:WebProjectOutputDir=$(CIDirectory)$(To)/p:OutputPath=$(CIDirectory)$(To)\bin</buildArgs></msbuild></cc:define><cc:define name="Copy"><exec><executable>$(DFCopierPath)</executable><buildArgs>/from=$(CIDirectory)$(From) /to=$(CIDirectory)$(To)</buildArgs><buildTimeoutSeconds>$(CopyTimeout)</buildTimeoutSeconds><successExitCodes>0</successExitCodes></exec></cc:define><cc:define name="RunTest"><exec><executable>$(MSTestPath)</executable><baseDirectory>$(CIDirectory)$(WorkingDirectory)</baseDirectory><buildArgs>/testcontainer:$(TestContainerPath)</buildArgs><buildTimeoutSeconds>$(TestTimeout)</buildTimeoutSeconds></exec></cc:define><!-- 通用配置(模板) --><cc:define name="Project"><project name="$(ProjectName)" queue="$(Queue)" queuePriority="$(QueuePriority)"><webURL>$(CIWebSite)server/local/project/$(ProjectName)/ViewProjectReport.aspx</webURL><!--標簽--><labeller type="dateLabeller"/><artifactDirectory>$(CIDirectory)$(ArtifactDirectory)</artifactDirectory><!--項目的目錄--><workingDirectory >$(CIDirectory)$(WorkingDirectory)</workingDirectory><!--自動運行時間間隔--><triggers><cc:TriggerList/></triggers><!--對源碼修改延遲處理時間間隔--><modificationDelaySeconds>$(ModificationDelaySeconds)</modificationDelaySeconds><maxSourceControlRetries>5</maxSourceControlRetries><!--源代碼管理(SVN)--><cc:SourceControl/><state type="state" directory="$(CIDirectory)$(StateDirectory)"/><publishers><modificationHistory onlyLogWhenChangesFound="true"/><statistics/><xmllogger/><artifactcleanup cleanUpMethod="KeepLastXBuilds" cleanUpValue="$(KeepLastXBuilds)" /><!--郵件通知--><cc:EmailPublisher/></publishers><tasks><cc:TaskList/></tasks></project></cc:define><!-- 默認配置 --><cc:define QueuePriority="1"/><cc:define KeepLastXBuilds="300"/><!-- Email 相關 --><cc:define EmailDomain="company.com"/><cc:define EmailSendHost="smtp.live.com"/><cc:define EmailSendPort="25"/><cc:define EmailUseSSL="TRUE"/><cc:define EmailSendUser="ci"/><cc:define EmailSendPassword="******"/><cc:define CIEmailUser="ci"/><cc:define PMEmailUser="pm_1"/><cc:define name="EmailTesterList"><user group="tester" name="tester_1" address="tester_1@$(EmailDomain)"/><user group="tester" name="tester_2" address="tester_2@$(EmailDomain)"/></cc:define><!-- Trigger 相關 --><cc:define ModificationTriggerIntervalSeconds="300"/><cc:define ModificationDelaySeconds="60"/><cc:define ProjectTriggerIntervalSeconds="30"/><cc:define ProjectTriggerStatus="SUCCESS"/><cc:define DailyBuildTriggerTime="18:00"/><!-- SVN 相關 --> <cc:define SVNUsername="ci"/><cc:define SVNPassword="******"/><cc:define SvnCleanCopy="FALSE"/><cc:define name="SourceControl"> </cc:define><!-- Task 相關 --><cc:define TestTimeout="1800"/><cc:define CopyTimeout="60"/><cc:define ReplaceTimeout="60"/><cc:define BuildConfiguration="DEGUB"/><cc:define PublishConfiguration="RELEASE"/><!-- TestProject: Service 項目 --><queue name="TestProject" duplicates="ApplyForceBuildsReAdd" /><cc:Project ProjectName="TestProject-Servcies"Queue="TesProjectt"WorkingDirectory="TestProject\SourceCode\service_trunk\"ArtifactDirectory="TestProject\Artifact\service\"StateDirectory="TestProject\State\"PublishDirectory="TestProject\Publish\"EmailSubject="[CI-TestProjectService]"ModificationDelaySeconds="30"TeamLeader="caihaihua"><cc:define name="SourceControl"><cc:SVNSourceControl SVNTrunkURL="https://vm-caihaihua/svn/testproject/services/trunk/"SvnCleanCopy="False"/></cc:define><cc:define name="TriggerList"><cc:ModificationTrigger/><cc:DailyBuildTrigger/></cc:define><cc:define name="TaskList"><!-- Config --><cc:Replace><cc:define name="Files">/file=$(CIDirectory)$(WorkingDirectory)WcfService\Web.config/file=$(CIDirectory)$(WorkingDirectory)ManagerTest\App.config/file=$(CIDirectory)$(WorkingDirectory)WcfServiceTest\App.config</cc:define><cc:define name="Rules">/from=Catalog=(?![^;\s']*_log[;\s']+)(=?[^;\s']*)/to=Catalog=service_trunk_ci/from=Source=(=?.*?)(=?[;\s']+)/to=Source=localhost$2/from=http://(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$2.svc/from=http://(=?.*?)/(?!SSO)(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$3.svc/from=http://(=?.*?)/SSO/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/SSO/$2.svc</cc:define></cc:Replace><!-- Build --><cc:Build SolutionPath="TestProjectService.sln"/><!-- Publish --><cc:Copy From="$(WorkingDirectory)WcfService"To="$(PublishDirectory)WcfService"/></cc:define></cc:Project><cc:Project ProjectName="TestProjectServcies-Test"Queue="TestProject"QueuePriority="2"WorkingDirectory="TestProject\SourceCode\service_trunk\"ArtifactDirectory="TestProject\Artifact\test\"StateDirectory="TestProject\State\"EmailSubject="[CI-TestProjectServcie-Test]"ModificationDelaySeconds="30"TeamLeader="caihaihua"><cc:define name="TriggerList"><cc:ProjectTrigger ListenToProject="TestProject-Servcies"/></cc:define><cc:define name="TaskList"><!--Run Test--><cc:RunTest TestContainerPath="ManagerTest\bin\Debug\ManagerTest.dll"/><cc:RunTest TestContainerPath="WcfServiceTest\bin\Debug\WcfServiceTest.dll"/></cc:define></cc:Project><!-- TestProject: AdminWeb 項目 --><cc:Project ProjectName="TestProject-AdminWeb"Queue="TestProject"WorkingDirectory="TestProject\SourceCode\admin_trunk\"ArtifactDirectory="TestProject\Artifact\admin\"StateDirectory="TestProject\State\"PublishDirectory="TestProject\Publish\"EmailSubject="[CI-TestProject-AdminWeb]"TeamLeader="caihaihua"><cc:define name="SourceControl"><cc:SVNSourceControl SVNTrunkURL="https://vm-caihaihua/svn/testproject/adminweb/trunk/"/></cc:define><cc:define name="TriggerList"><cc:ModificationTrigger/><cc:DailyBuildTrigger/></cc:define><cc:define name="TaskList"><!-- Config --><cc:Replace><cc:define name="Files">/file=$(CIDirectory)$(WorkingDirectory)AdminWeb\Web.config</cc:define><cc:define name="Rules">/from=http://(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$2.svc/from=http://(=?.*?)/(?!SSO)(=?[^\/]+)/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/WcfService/$3.svc/from=http://(=?.*?)/SSO/(=?[^\/]+).svc/to=http://vm-caihaihua/testproject_trunk_ci/SSO/$2.svc</cc:define></cc:Replace><!-- Build --><cc:Build SolutionPath="AdminWeb.sln"/><!-- Publish --><cc:Publish SolutionPath="AdminWeb\AdminWeb.csproj"To="$(PublishDirectory)AdminWeb" /></cc:define></cc:Project> </cruisecontrol> View Code

?

?

轉載于:https://www.cnblogs.com/harveyChoi/p/hello_cc_net_3.html

總結

以上是生活随笔為你收集整理的【Hello CC.NET】巧用模板简化配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久免费毛片 | 亚洲AV无码阿娇国产精品 | 天天射天天干 | 丁香色欲久久久久久综合网 | 日韩成人高清视频在线观看 | 国产男女精品 | 欧美精品在线第一页 | 久久久国产精品免费 | 性色网站 | 国产精品成人免费精品自在线观看 | 五月天婷婷综合 | 亚洲成av人片一区二区 | 国产美女极度色诱视频www | 久久这里有精品 | 精品国产精品网麻豆系列 | 天天操天天做 | 欧美一区二区三区在线 | 国产精品视频一二三区 | 日本黄色免费观看 | 少妇饥渴难耐 | av福利影院 | 亚洲区视频在线观看 | 午夜一本| 337p日本欧洲亚洲大胆精筑 | 国产亚洲美女精品久久久2020 | 天天爽网站| av在线观看地址 | 91pron在线 | 久久久久久国产精品三级玉女聊斋 | 色综合久久精品亚洲国产 | 欧美中文字幕在线观看 | 99久久久国产精品无码免费 | 黄色aa网站| 九九热re | 黄色链接视频 | 亚洲精品7777 | 欧洲a级片 | 99这里都是精品 | 欧美日本一本 | 在线视频毛片 | 3p视频在线观看 | 国产综合在线观看视频 | 女同动漫免费观看高清完整版在线观看 | 国产精品一区二区三区四区 | 美女扒开屁股让男人桶 | 国产伦精品一区二区三区网站 | 亚洲国产免费视频 | 中文字幕高清在线播放 | 精品视频在线观看免费 | 国产无套精品一区二区三区 | 求免费黄色网址 | 超碰黑丝 | 亚洲永久精品视频 | 18欧美性xxxx极品hd | 成人av电影天堂 | 亚洲国产精品久久久久婷蜜芽 | 亚洲永久免费视频 | 在线免费看毛片 | 麻豆视频免费入口 | 久色| 国产视频精品一区二区三区 | 国产精品久久久久久久免费大片 | 国产精品99久久久久久人 | 国产免费一级视频 | 加勒比波多野结衣 | 日韩欧美在线不卡 | 日韩免费影院 | 亚洲第一视频 | 日韩人妻无码一区二区三区99 | 欧美视频在线观看免费 | 国产在线观看黄色 | 少妇的激情 | 国产午夜精品理论片在线 | 欧美日韩高清一区二区三区 | 中文文字幕一区二区三三 | 国产精品久久久久永久免费看 | 风流老熟女一区二区三区 | 97免费在线观看 | av在线观看地址 | 五月婷综合| 深爱激情久久 | 五月天丁香久久 | 粗大挺进潘金莲身体在线播放 | 蜜桃臀av在线 | 深夜福利网址 | 日韩特级片 | 欧美黑人啪啪 | 日本免费一区二区三区四区 | 亚洲欧美高清视频 | 性猛交ⅹxxx富婆video | 日韩免费视频一区 | 又黄又爽的免费视频 | 久久久久亚洲AV成人 | 欧美成人aaaaa | 久久精品一区二区免费播放 | 久久久国产精品x99av | 天降女子| 天天激情 | 爱上av|