每日构建【Daily Build Using CruiseControl.NET and MSBuild】

在上一篇项目 管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】中 我们已经讲解了如何使用TortoiseSVN和VisualSVN Server来做简单的版本控制,这一篇我们将会讲解使用CruiseControl.NET和MSBuild来搭建每日构建系统。

在第一篇项目 管理实践教程一、工欲善其事,必先利其器【Basic Tools】 中我们已经安装了CruiseControl.NET 1.4,因为我们还要用到MSBuild,所以如果你的系统没有安装Visual Studio,那么你需要首先安装Visual Studio 2005/2008,我们在这里使用的是Visual Studio 2008,准备好这些了吗?OK,我们正式开始今天的课程! 

首先,我们要配置CruiseControl.NET【下面简写为CCNET】,配置完成后,我们每次提交源代码到SVN服务器后,CCNET就可 以自动从SVN服务器上签出源代码,并调用MSBuild自动进行编译。我们以昨天的教程中创建的StartKit项目为实例,先看看下面的配置文件:


<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  2    
<!--项目名称-->
  3    
<name>StartKit</name>
  4    
<!--标示类型,有多种类型。下面为默认标示,作为每次编译时生成的日志文件的名称-->
  5    
<labeller type="defaultlabeller">
  6        
<!--前缀-->
  7         
<prefix>StartKit-1-</prefix>
  8        
<!--编译失败时是否增加-->
  9         
<incrementOnFailure>false</incrementOnFailure>
 10       
<!--格式-->
 11        
<labelFormat>00000</labelFormat>
 12   
</labeller>
 13   
<!--项目的WebDashboard地址,CruiseControl.NET包括二部分, 一是Server用来配置项目和监视文件修改,二是WebDashboard,是一个显示项目信息及编译信息的Website-->
 14       
<webURL>http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx</webURL>
 15   
<!--触发器,包含多种,有兴趣可以查看官方文档-->
 16   
<triggers>
 17   
<!--时间间隔触发器,下面是60秒触发一次-->
 18         
<intervalTrigger seconds="60" />
 19   
</triggers>
 20   
<!--如果发现修改,延迟多久开始编译,下面是2秒-->
 21   
<modificationDelaySeconds>2</modificationDelaySeconds>
 22   
<!--源代码控制系统,支持多种,有兴趣可以查看官方文档,下面采用svn-->
 23   
<sourcecontrol type="svn">
 24   
<!--源代码在SVN服务器上的路径-->
 25         
<trunkUrl>http://zt.net.henu.edu.cn/svn/StartKit/StartKit/</trunkUrl>
 26   
<!--svn服务器所在路径,在这里就是VisualSVN Server安装目录中的bin 目录下的svn.exe -->
 27         
<executable>C:/Program Files/VisualSVN Server/bin/svn.exe</executable>
 28     
<!--用来迁出源代码的用户名,svn服务器进行验证-->
 29   
<username>starter</username>
 30   
<!--用来迁出源代码的用户名对应的密码-->
 31         
<password>123456</password>
 32       
<!--web获取源代码的地址,类似于开源网站上浏览代码的那部分功能,这里的类型是 trac-->
 33   
<!--<webUrlBuilder type="trac">
 34       <!--trac中对应项目的地址?
-->
 35         
<tracProjectUrl>http://svn.net.henu.edu.cn/pojects/StartKit/</tracProjectUrl>
 36         
<!--trac中对应项目的源代码库地址,相对于上面的路径-->
 37         
<tracRepositoryRoot>/StartKit</tracRepositoryRoot>
 38         
</webUrlBuilder>-->
 39   
</sourcecontrol>
 40   
<!--该节点用来配置具体执行那些任务-->
 41   
<tasks>
 42   
<!--msbuild任务配置,用来编译项目-->
 43         
<msbuild>
 44           
<!--MSBuild.exe的路径-->
 45           
<executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
 46           
<!--从SVN迁出的源代码的存放位置,可以不配置,下面的即为默认值 -->
 47           
<!--我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的 安装路径即可-->
 48           
<workingDirectory>D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory</workingDirectory>
 49           
<!--对这个项目的监控过程的日志记录目录,可以不配置,下面的即为默认值-->
 50           
<!--我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的 安装路径即可-->
 51            
<artifactDirectory> D:\Program Files\CruiseControl.NET\server\StartKit\ Artifacts</artifactDirectory>
 52           
<!--要编译的项目名称 -->
 53   
<projectFile>StartKit.sln</projectFile>
 54   
<!-- MSBuild编译时的参数,具体参数信息可以查看MSDN上的说明-->
 55           
<buildArgs>/p:configuration=debug</buildArgs>
 56           
<!--指定日志记录模块-->
 57          
<!--我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的 安装路径即可-->
 58           
<logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,D:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
 59           
<!--编译目标-->
 60   
<targets />
 61         
</msbuild>
 62           
<!--在这里还可以添加其他的程序,比如运行测试、部署项目等等-->
 63   
</tasks>
 64   
<!--项目编译状态信息的保存位置-->
 65   
<!--我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安 装路径即可-->
 66       
<state type="state" directory="D:\Program Files\CruiseControl.NET\server\CCState" />
 67   
<!--发布和部署配置-->
 68   
<publishers>
 69     
<!--如果编译成功,那么下面的配置,会将源代码复制到指定目录HistoryVersion 下,名称为版本标识(自动增长,labeller配置)的子目录下-->
 70     
<buildpublisher>
 71       
<!--源代码路径-->
 72       
<!--我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的 安装路径即可-->
 73        
<sourceDir> D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory </sourceDir>
 74        
<!--编译成功后保存源代码到该目录下名称为版本标示labeller的目录中-->
 75       
<!--我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的 安装路径即可-->
 76   
<publishDir> D:\Program Files\CruiseControl.NET\server\StartKit\HistoryVersion </publishDir>
 77     
</buildpublisher> 
 78   
<!--该节点用来配置合并多个文件,当时有外部插件时,要把他们分别产生的输出文件合并--> 
 79         
<merge>
 80           
<!--要合并的文件,合并后的信息可以显示在Web Dashboard和邮件通知里-->
 81           
<files>
 82               
<!--我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的 安装路径即可-->
 83             
<file>D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory\results.xml</file>
 84           
</files>
 85         
</merge>
 86           
<!--源代码路径-->
 87         
<xmllogger />
 88           
<!--显示历史修改记录列表, 在Web Dashboard中可以查看-->
 89        
<modificationHistory />
 90          
<!--所有编译信息的统计, 在Web Dashboard中可以查看-->
 91         
<statistics />
 92           
<!--邮件通知配置,每次编译后,都会邮件通知下面配置中添加的用户-->
 93         
<!-- mailhost是发送邮件的主机,mailport是邮件发送端 口,mailhostUsername发送邮件的邮箱用户名,mailhostPassword发送邮件的邮箱密码,from希望显示在发件人中的邮箱地 址, includeDetails邮件内容是否包含详细的编译信息 -->
 94   
<email mailhost="smtp.qq.com" mailport="25"
 95                    mailhostUsername
="******" mailhostPassword="******" from="******@qq.com" includeDetails="true">
 96           
<!--接收邮件通知的用户 -->
 97   
<users>
 98     
<!--name是SVN服务器上存在的用户名,group是SVN服务器上存在的 组,address是该用户的邮箱地址 -->
 99             
<user name="zt" group="StartKit" address="******1@qq.com" />
100            
<user name="***" group="StartKit" address="******2@qq.com" />
101           
<user name="***" group="StartKit" address="******3@qq.com" />
102          
</users>
103          
<!--接收邮件通知的组-->  
104        
<groups>  
105          
<!--name必须是SVN服务器上存在的组,notification是什么时候发送通 知,可选有Always/Success/Change/Fixed/Failed --> 106           <group name="StartKit " notification="always" /> 107          </groups>  
108        
</email>  
109      
</publishers>  
110    
</project>  
111  
<!--可以同时添加多个项目  
112  <project >  
113  <name>test</name>  
114  ……  
115  </project>  
116  
-->  
117  
</cruisecontrol


好了,我们已经对CCNET的配置文件有了大致的了解,接下来,你打开CCNET的安装路径,找到子目录server下的ccnet.config文件, 把上面的配置信息Copy到ccnet.config文件中,记得把配置文件中的一些路径修改为自己的实际路径啊,修改好后,保存。这时候,检查 Windows服务CruiseControl.NET Server是否启动,如果没有则启动它,启动该服务后,打开浏览在地址栏输入上面配置文件中的webUrl地址:http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx 也可以直接输入http://202.196.96.55:8080/server/ ,这里是演示地址,要根据自己的实际情况修改为正确的地址,OK,看到类似下图的效果,好了,搞定!如果你遇到了什么麻烦,请在下面留言,我一定会及时回 复!
点击StartKit,转入下图所示的页面:
OK,到这里,我们提交更新到SVN服务器后,CCNET就会根据我们配置自动编译项 目,而且我们也可以通过Web Dashboard来查看具体的编译信息了,提示如果配置了邮件发送,那么我们还可以通过邮件收到详细的编译信息,怎么样?够方便吧!

其实,CCNET的功能是相当强大的,上面只是最常用的配置,其他还有很多非常好的功能。你想知道吗?那你可以在这里查看CCNET 官方文档 ,实际上,你安装CCNET后,文档也已经安装到你的电脑了,在CCNET的安装目录下的webdashboard的子目录doc中就是。

好了,我们今天的教程就到这里,本来我应该把如何使用CruiseControl.NET Tray来监视每次更新后的编译状态,但是今天真的太晚了,明天还要做项目,所以我明天补上,请大家见谅!
补充部分:
下面我简单讲一下,如何使用CruiseControl.NET Tray【以下简称CCTray】来监视每次提交后的编译状态。
安装好打开CCTray后,运行CCTray程序,点击左上角的菜单File下的Settings…,如下图:

点击Settings…会弹出下面的窗体:

切换到Build Projects选项卡,如下图:

点击Add…按钮,添加我们的CCNET服务器,如下图:

输入我们的CCNET服务器后,CCNET服务器上的项目就会在右侧显示出来,如下图:

选中右侧的项目后,点击OK按钮,返回CCTray打开时的界面,我们的二个项目已经添加进来了,如下图:

我们在桌面的右下角的任务栏,可以看到如下图所示的图标:

绿色的那个标示就是CCTray的标示,绿色表示所有的项目都通过了编译,紫红色表示至少有一个项目没有通过编译,橘黄色表示有项目正在编译,橘红色表示 有项目被强制编译,显示为灰色则说明和CCNET服务器失去了链接。

OK,大家可以使用CCTray实时监视提交更新后项目的编译状态了。

如果大家有什么问题,欢迎和我交流!

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值